パーシスタント・エンタープライズ JavaBeans タイマーの構成オプション
パーシスタント EJB タイマーでは、ejbPersistentTimer フィーチャーを有効にして、ID が DefaultDataSource のデフォルト・データ・ソースを、データベースを指すようにセットアップする以外に構成は不要です。異なるデータ・ソースの選択、永続化タイマー・タスクを検索するためにデータベースにポーリングするタイミングと頻度、および失敗したタイマー・タスクまたはロールバックされたタイマー・タスクを再試行するかどうかとその頻度の制御など、動作を制御するために、オプションの構成設定が使用可能です。
EJB タイマー構成は、オプションの timerService 構成エレメントによって指定します。 パーシスタント EJB タイマーの構成属性は、さらに、persistentExecutor 構成の下にグループ化されています。デフォルトでは、EJB タイマー・サービスは、defaultEJBPersistentTimerExecutor という名前のパーシスタント executor インスタンスを使用します。異なるパーシスタント executor インスタンスを使用するようにタイマー・サービスを構成して、EJB パーシスタント・タイマー構成をカスタマイズすることができます。ただし、EJB パーシスタント・タイマー構成をカスタマイズするためのベスト・プラクティスは、defaultEJBPersistentTimerExecutor インスタンスをオーバーライドして、defaultEJBPersistentTimerExecutor インスタンスからデフォルト値を継承することです。
<persistentExecutor id="defaultEJBPersistentTimerExecutor" retryLimit="50"/>
- パーシスタント・タイマー・タスクのためのデータベース・ストアのカスタマイズ
- パーシスタント EJB タイマー・タスクは、データベースに永続化されます。データベースに関連した構成は、databaseStore 構成エレメントの下でグループ化されます。別途構成されていない限り、 defaultDatabaseStore という名前の databaseStore のインスタンスが、パーシスタント EJB タイマー、およびデータベースを必要とする他の製品フィーチャーによって使用されます。以下に、defaultDatabaseStore インスタンスをオーバーライドする例を示します。
<databaseStore id="defaultDatabaseStore" dataSourceRef="DB2DataSource" tablePrefix="MYTIMERS"/>
以下に、異なる databaseStore インスタンスを使用するように defaultEJBPersistentTimerExecutor インスタンスを構成する例を示します。<persistentExecutor id="defaultEJBPersistentTimerExecutor" taskStoreRef="MyDBStore"/> <databaseStore id="MyDBStore" dataSourceRef="DB2DataSource" tablePrefix="MYTIMERS"> <authData user="user1" password="password1"/> </databaseStore>
- パーシスタント・タイマー・タスク実行の有効化および無効化
パーシスタント EJB タイマー・タスクは、それらのタスクがスケジュールされているトランザクションのコミット時に実行されるように有効化されます。パーシスタント・タイマー・タスクが実行されないようにするために、値 false を指定して enableTaskExecution 属性を構成できます。その場合でも、EJB タイマー・サービスはパーシスタント・タイマー・タスクをデータベースに書き込みますが、実行はしません。値を true に切り替えると、EJB タイマー・サービスは、以前にスケジュールされたタイマー、およびスケジュールされた新しいタイマーの実行を開始します。
- タイマー・タスクのためのパーシスタント・ストアのポーリングのカスタマイズ
- 以前にスケジュールされたタイマー・タスクを検出するために、パーシスタント・ストアの単一の初回ポーリングが始動時に実行されます。タスクがスケジュールされると、スケジュールされている次回実行時に関する情報が永続化されると同時にメモリーに保持されるため、それ以降にパーシスタント・ストアをポーリングする必要がなくなります。この動作は多くの場合に最適ですが、常に望ましいわけではありません。
- タイマー・タスクに他のサービスへの外部依存関係がある場合、初回ポーリングが時期尚早で、必要とされる外部サービスが使用不可であるために、タイマー・タスクが失敗することがあります。この場合、初回ポーリングの遅延を使用して、固定時間分、初回ポーリングを遅らせることができます。
- 多数の EJB パーシスタント・タイマーがスケジュールされている場合、使用されるメモリー量が多くなりすぎることがあります。 この場合、次回ポーリングまでの間隔内で実行するタイマー・タスクのみについてパーシスタント・ストアに定期的にポーリングするようにポーリング間隔を構成できます。ポーリング・サイズによってさらに、各ポーリング間隔でデータベースから読み取ることができるタイマー・タスクの数が制限されます。これにより、一部のタスクが後から実行される可能性があります。
構成例:<persistentExecutor id="defaultEJBPersistentTimerExecutor" initialPollDelay="5m" pollInterval="10m" pollSize="200"/>
- 失敗したパーシスタント・タイマー・タスクおよびロールバックしたパーシスタント・タイマー・タスクの再試行
パーシスタント EJB タイマーの実行が失敗したか、ロールバックするようにマークされた場合、即時に 1 回再試行されます。即時の再試行が失敗した場合、成功するまで固定間隔で再試行されます。構成で再試行制限を指定することで、再試行回数を制限できます。 また、構成で再試行間隔を指定することで、再試行間隔を制御することもできます。
構成例:<persistentExecutor id="defaultEJBPersistentTimerExecutor" retryLimit="100" retryInterval="2m"/>