Show Table of Contents
29.5. EJB タイマー設定
J2EE タイマーサービスにより EJB オブジェクトは指定した時間にタイマーコールバックの登録を行うことができるようになります。タイマーイベントは監査、報告、あるいはその他クリーンアップなど今後必要になってくる作業を行うために使用することができます。タイマーイベントは永続化されるようになっており、サーバーに障害が発生した場合であっても実行されなければなりません。EJB タイマーに対するコーディングは J2EE 仕様の標準部分となるため、このプログラミングモデルについてはここでは触れません。代わりに、ご使用の環境に最適な状態でタイマーを稼働させる方法を理解するために JBoss でのタイマーサービスの設定について見ていくことにします。
EJB タイマーサービスは
ejb-deployer.xml
ファイル内のいくつかの関連 MBean によって設定されます。主要 MBean は EJBTimerService
MBean です。
<mbean code="org.jboss.ejb.txtimer.EJBTimerServiceImpl" name="jboss.ejb:service=EJBTimerService"> <attribute name="RetryPolicy">jboss.ejb:service=EJBTimerService,retryPolicy=fixedDelay</attribute> <attribute name="PersistencePolicy">jboss.ejb:service=EJBTimerService,persistencePolicy=database</attribute> <attribute name="TimerIdGeneratorClassName">org.jboss.ejb.txtimer.BigIntegerTimerIdGenerator</attribute> <attribute name="TimedObjectInvokerClassName">org.jboss.ejb.txtimer.TimedObjectInvokerImpl</attribute> </mbean>
EJBTimerService
には次のような設定可能な属性があります
- RetryPolicy: 再試行ポリシーを実装する MBean の名前です。この MBean は
org.jboss.ejb.txtimer.RetryPolicy interface
に対応する必要があります。 JBoss はFixedDelayRetryPolicy
という実装を1つ提供しており、これについては後ほど説明していきます。 - PersistencePolicy: タイマーイベント保存用の永続方法を実装する MBean の名前です。この MBean は
org.jboss.ejb.txtimer.PersistencePolicy
インターフェースに対応しなければなりません。JBoss は NoopPersistencePolicy と DatabasePersistencePolicy の 2 つの実装を提供しており、これについては後ほど説明していきます。 - TimerIdGeneratorClassName: タイマー ID 生成方法を提供するクラスの名前になります。このクラスは
org.jboss.ejb.txtimer.TimerIdGenerator
インタフェースに対応していなければなりません。JBoss はorg.jboss.ejb.txtimer.BigIntegerTimerIdGenerator
実装を提供しています。 - TimedObjectInvokerClassname: タイマーメソッド呼び出し方法を提供するクラスの名前になります。このクラスは
org.jboss.ejb.txtimer.TimedObjectInvoker
インターフェースを実装していなければなりません。JBoss はorg.jboss.ejb.txtimer.TimedObjectInvokerImpl
実装を提供しています。
使用される再試行ポリシー MBean 定義を次に示します。
<mbean code="org.jboss.ejb.txtimer.FixedDelayRetryPolicy" name="jboss.ejb:service=EJBTimerService,retryPolicy=fixedDelay"> <attribute name="Delay">100</attribute> </mbean>
再試行ポリシーは設定値を 1 つとります。
- Delay: 失敗したタイマー実行を再試行するまでの遅延時間 (ミリ秒) になります。 デフォルトの遅延時間は 100 ミリ秒です。
EJB タイマーを永続化する必要がない場合、
NoopPersistence
ポリシーを使用することができます。この MBean はデフォルトではコメントアウトされていますが、有効にすると次のようになります。
<mbean code="org.jboss.ejb.txtimer.NoopPersistencePolicy" name="jboss.ejb:service=EJBTimerService,persistencePolicy=noop"/>
タイマーを使用するほとんどのアプリケーションがタイマーの永続化を必要とします。この場合には
DatabasePersitencePolicy
MBean を使用してください。
<mbean code="org.jboss.ejb.txtimer.DatabasePersistencePolicy" name="jboss.ejb:service=EJBTimerService,persistencePolicy=database"> <!-- DataSource JNDI name --> <depends optional-attribute-name="DataSource">jboss.jca:service=DataSourceBinding,name=DefaultDS</depends> <!-- The plugin that handles database persistence --> <attribute name="DatabasePersistencePlugin">org.jboss.ejb.txtimer.GeneralPurposeDatabasePersistencePlugin</attribute> </mbean>
- DataSource: タイマーデータの書き込み先となる DataSource の MBean です。
- DatabasePersistencePlugin: 永続方法を実装するクラスの名前になります。これは
org.jboss.ejb.txtimer.GeneralPurposeDatabasePersistencePlugin
になるはずです。