為持續性計時器配置 Enterprise JavaBeans 計時器服務

對於持續性 EJB 計時器,您可以配置 EJB 計時器服務,來控制計時器儲存所在的資料來源、計時器的重試間隔,以及呼叫逾時回呼方法失敗時的重試次數。

關於這項作業

當啟用 ejbPersistentTimer 特性時,必須配置資料來源以持續保存計時器,否則,只要嘗試使用持續性計時器就會失敗。若有配置 DefaultDataSource,則 EJB 計時器服務會使用它,且不會配置其他任何特定的資料來源供 EJB 計時器服務使用。

此外,當針對持續性計時器呼叫逾時回呼方法失敗時,EJB 計時器服務會每隔 5 分鐘重試一次,直到順利完成逾時回呼方法為止。

請使用下列選項,來配置持續性計時器。

EJB 持續性計時器排程執行程式

指定用來控制持續性計時器行為之持續性執行程式的參照。系統提供預設實例 defaultEJBPersistentTimerExecutor,它使用 DefaultDataSource 作為持續儲存庫。EJB 持續性計時器排程執行程式參照可變更成自訂配置,或是可置換預設實例以變更特定值。持續性執行程式的可用選項如下:

重試限制

指定失敗逾時回呼方法的重試次數上限。如果重試逾時回呼方法成功,伺服器會停止嘗試執行它。如果重試失敗,伺服器會繼續重試,直到逾時回呼方法成功,或抵達重試限制為止。在抵達重試限制之後,伺服器就不會嘗試執行逾時回呼方法,即使先前的嘗試都不成功也一樣。預設值 -1 表示重試不限次數。值 0 表示不重試,這不符合 EJB 規格的標準。值 1 或以上表示特定的重試次數。

如果應用程式不要求非持續性計時器得在每次排定的時間完成,則變更非持續性計時器的逾時回呼方法重試次數配置,會很有幫助。比方說,如果應用程式建立非持續性間隔計時器,以排定每隔 5 分鐘執行一次,一旦將重試次數設為 0,則不論執行成功或失敗,計時器都會每隔 5 分鐘執行一次。

重試間隔

指定重試失敗逾時回呼方法的間隔時間。第一次重試一律是立即進行,而不考慮配置給此值的間隔。其他所有的重試會等到指定給此值的間隔再進行。0 值表示所有重試都是立即進行。值 1 或以上表示重試必須等到該特定的秒數才行。預設值為 300 秒。

如果逾時回呼方法必須在排定的時間之前完成,對應用程式很重要,則配置不同的重試間隔時間給非持續性計時器,會很有幫助。如果應用程式可接受計時器延後完成(例如:間隔久一點再重試),以啟用逾時回呼方法,以便讓應用程式更有機會順利執行,則也可以採行這種作法。

持續性作業儲存庫

指定要使用的資料來源。系統提供預設實例 defaultDatabaseStore,它使用 DefaultDataSource 作為持續儲存庫。

程序

  1. server.xml 檔中,配置應用程式伺服器,以便包含支援持續性計時器的 EJB 特性。
     <featureManager>
             <feature>ejbPersistentTimer-3.2</feature>
        </featureManager>
  2. server.xml 檔中配置 EJB 計時器服務,以針對持續性計時器,使用特定的重試次數上限值和重試間隔值。 例如,使用下列配置,指定持續性計時器最多重試 3 次,並且每隔 10 秒重試一次:
    <persistentExecutor id="defaultEJBPersistentTimerExecutor" retryInterval="10s"
              retryLimit="3"/>

    利用這項配置,計時器的逾時回呼方法最多可呼叫 4 次。第一次呼叫發生在排定的時間。如果第一次呼叫失敗,在失敗之後會立即進行第一次重試。如果逾時回呼方法繼續失敗,則 10 秒和 20 秒後會進行第二次和第三次重試。

    在下列範例中,只會重試一次失敗的逾時回呼方法。回呼間隔無關緊要,因為第一次重試一律是立即開始的。

    <persistentExecutor id="defaultEJBPersistentTimerExecutor" retryLimit="1"/>
  3. server.xml 檔中配置 EJB 計時器服務,以針對持續性計時器,使用特定的資料來源。 例如,使用下列配置,指定必須使用 jdbc/timerDataSource 來儲存持續性計時器。
    <dataSource id="timerDataSource" jndiName="jdbc/timerDataSource">
    </dataSource>
    <databaseStore id="EJBTimerDatabaseStore" tablePrefix="EJBTimer_"dataSourceRef="timerDataSource"/>
    <persistentExecutor id="defaultEJBPersistentTimerExecutor"
              taskStoreRef="EJBTimerDatabaseStore"/>

指示主題類型的圖示 作業主題

檔名:twlp_config_ejbtimer_persistent.html