Persistente Zeitgeber im Enterprise JavaBeans-Zeitgeberservice konfigurieren

Für persistente EJB-Zeitgeber können Sie im EJB-Zeitgeberservice die Datenquelle, in der die Zeitgeber gespeichert werden, das Intervall zwischen den Zeitgeberwiederholungen und die Anzahl der Wiederholungen für fehlgeschlagene Aufrufe der Zeitlimit-Callback-Methode konfigurieren.

Informationen zu diesem Vorgang

Wenn das Feature "ejbPersistentTimer" aktiviert ist, muss eine Datenquelle für die persistente Speicherung der Zeitgeber konfiguriert werden. Ansonsten schlagen alle Versuche, persistente Zeitgeber zu verwenden, fehl. Der EJB-Zeitgeberservice verwendet die Standarddatenquelle, sofern diese konfiguriert und keine andere spezielle Datenquelle für den EJB-Zeitgeberservice konfiguriert ist.

Der EJB-Zeitgeberservice wiederholt fehlgeschlagene Aufrufe der Zeitlimit-Callback-Methode für persistente Zeitgeber alle 5 Minuten, bis die Zeitlimit-Callback-Methode erfolgreich ausgeführt wird.

Verwenden Sie zum Konfigurieren persistenter Zeitgeber die folgenden Optionen.

Steuerprogramm für terminierte Tasks persistenter EJB-Zeitgeber

Gibt eine Referenz auf ein persistentes Steuerprogramm an, das das Verhalten persistenter Zeitgeber steuert. Die bereitgestellte Standardinstanz defaultEJBPersistentTimerExecutor verwendet die Standarddatenquelle (DefaultDataSource) als persistenten Speicher. Sie können die Referenz auf das Steuerprogramm für terminierte Tasks persistenter EJB-Zeitgeber ändern oder die Standardinstanz überschreiben, um bestimmte Werte zu ändern. Die folgenden Optionen sind für das persistente Steuerprogramm verfügbar:

Wiederholungslimit

Gibt an, wie oft eine fehlgeschlagene Zeitlimit-Callback-Methode maximal wiederholt wird. Wenn die Zeitlimit-Callback-Methode bei der Wiederholung erfolgreich ist, stellt der Server die Versuche, die Methode auszuführen, ein. Schlägt eine Wiederholung fehl, setzt der Server die Wiederholungsversuche oft, bis die Zeitlimit-Callback-Methode erfolgreich ist oder das Wiederholungslimit erreicht wird. Nach dem Erreichen des Wiederholungslimits stellt der Server seine Versuche, die Zeitlimit-Callback-Methode auszuführen, ein, selbst wenn die vorherigen Versuche nicht erfolgreich waren. Der Standardwert -1 gibt an, dass die Wiederholungen nicht begrenzt sind. Der Wert 0 gibt an, dass keine Wiederholungen stattfinden, und ist mit der EJB-Spezifikation nicht kompatibel. Ein Wert größer-gleich 1 gibt die gewünschte Anzahl an Wiederholungen an.

Eine Änderung der konfigurierten Anzahl an Wiederholungen der Zeitlimit-Callback-Methode für nicht persistente Zeitgeber ist für Anwendungen hilfreich, in denen nicht persistente Zeitgeber nicht jedes geplante Mal ausgeführt werden müssen. Wenn eine Anwendung beispielsweise einen nicht persistenten Intervallzeitgeber erstellt, der alle 5 Minuten ausgeführt werden soll, führt die Konfiguration einer Wiederholungsanzahl von 0 dazu, dass der Zeitgeber alle 5 Minuten ein einziges Mal ausgeführt wird, unabhängig davon, ob er erfolgreich ist oder nicht.

Wiederholungsintervall

Gibt das Intervall an, in dem eine fehlgeschlagene Zeitlimit-Callback-Methode wiederholt wird. Die erste Wiederholung findet immer sofort statt, unabhängig vom Intervall, das mit diesem Wert konfiguriert wird. Alle weiteren Wiederholungen werden in dem mit diesem Wert angegebenen Intervall durchgeführt. Der Wert 0 gibt an, dass alle Wiederholungen sofort stattfinden. Ein Wert größer-gleich 1 gibt an, dass die einzelnen Wiederholungen jeweils nach dieser Anzahl an Sekunden durchgeführt werden. Der Standardwert sind 300 Sekunden.

Die Konfiguration eines anderen Wiederholungsintervalls für nicht persistente Zeitgeber ist für Anwendungen hilfreich, in denen es wichtig ist, dass die Zeitlimit-Callback-Methode vor der geplanten Zeit abgeschlossen ist. Dieser Ansatz ist auch für Anwendungen zutreffend, in denen es vertretbar ist, die Zeitgeberausführung auf einen späteren Zeitpunkt zu verschieben, z. B. ein späteres Wiederholungsintervall, sodass die Chancen, dass die Zeitlimit-Callback-Methode erfolgreich ausgeführt wird, höher sind.

Persistenter Taskspeicher

Gibt die zu verwendende Datenquelle an. Die bereitgestellte Standardinstanz "defaultDatabaseStore" verwendet die Standarddatenquelle (DefaultDataSource) als persistenten Speicher.

Vorgehensweise

  1. Konfigurieren Sie den Anwendungsserver und schließen Sie ein EJB-Feature, das persistente Zeitgeber unterstützt, in die Datei server.xml ein.
     <featureManager>
             <feature>ejbPersistentTimer-3.2</feature>
        </featureManager>
  2. Konfigurieren Sie im EJB-Zeitgeberservice spezielle interne Werte für die maximale Anzahl an Wiederholungen und das Wiederholungsintervall für persistente Zeitgeber in der Datei server.xml. Verwenden Sie beispielsweise die folgende Konfiguration, um festzulegen, dass die persistenten Zeitgeber bis zu drei Mal mit jeweils 10 Sekunden zwischen den einzelnen Wiederholungen wiederholt werden sollen:
    <persistentExecutor id="defaultEJBPersistentTimerExecutor" retryInterval="10s"
              retryLimit="3"/>

    Mit dieser Konfiguration kann die Zeitlimit-Callback-Methode für einen Zeitgeber bis zu vier Mal aufgerufen werden. Der erste Aufruf findet zur geplanten Zeit statt. Wenn der erste Aufruf fehlschlägt, findet die erste Wiederholung unmittelbar nach dem Fehler statt. Schlägt der Aufruf der Zeitlimit-Callback-Methode weiterhin fehl, finden die zweite und dritte Wiederholung 10 bzw. 20 Sekunden später statt.

    Im folgenden Beispiel wird eine fehlgeschlagene Zeitlimit-Callback-Methode nur ein einziges Mal wiederholt. Das Callbackintervall ist irrelevant, weil die erste Wiederholung immer unmittelbar nach dem Fehler stattfindet.

    <persistentExecutor id="defaultEJBPersistentTimerExecutor" retryLimit="1"/>
  3. Konfigurieren Sie im EJB-Zeitgeberservice eine spezielle Datenquelle für persistente Zeitgeber in der Datei server.xml. Verwenden Sie beispielsweise die folgende Konfiguration, um festzulegen, dass die persistenten Zeitgeber unter Verwendung von jdbc/timerDataSource gespeichert werden sollen.
    <dataSource id="timerDataSource" jndiName="jdbc/timerDataSource">
    </dataSource>
    <databaseStore id="EJBTimerDatabaseStore" tablePrefix="EJBTimer_"dataSourceRef="timerDataSource"/>
    <persistentExecutor id="defaultEJBPersistentTimerExecutor"
              taskStoreRef="EJBTimerDatabaseStore"/>

Symbol das den Typ des Artikels anzeigt. Taskartikel

Dateiname: twlp_config_ejbtimer_persistent.html