web-dev-qa-db-ja.com

EJB3 + JEE6:永続タイマーとは何ですか?

新しいEJB3TimerServiceを(Java EE 6の一部として)使用しようとしています。いつものように、JavaDocの簡潔さに感銘を受けました:)

persistentオブジェクトのTimerConfigプロパティの効果を知っていますか?

JavaDoc TimerConfig 言います:persistentプロパティは、対応するタイマーの存続期間が、それが作成されたJVMにまたがるかどうかを決定します。これはオプションであり、デフォルトはtrueです。

32
Hank

永続プロパティは、コンテナがタイマー状態をデータベースに永続化する必要があることを意味します。これは、サーバーがオフラインになった場合でも(意図的にまたはクラッシュした場合でも)タイマーが起動することを保証する必要がある場合に重要です。サーバーがオンラインに戻ったとき、逃したタイマーを実行する必要があります。タイマーを永続として設定すると、製品にとって意味が何であれ、タイマーが1つのサーバーJVM(ただし、必ずしもタイマーを作成したサーバーではない)でのみ実行されるようにするという副作用もあります。たとえば、クラスター化されたサーバー環境では、これは通常、EJBモジュールが3つのJVMで実行されている場合でも、1つのJVMだけがタイマーを実行することを意味します。

persistent = trueは、EJB3.1より前に使用可能な唯一のオプションでした。一部のタイマー操作は、このレベルの信頼性を保証するほど重要ではないため、非永続タイマーを許可するオプションが追加されました。タイマーを非永続として設定すると、タイマーが作成されたJVMで確実に実行されるという副作用もあります。これは、メモリ内キャッシュまたは静的HTMLを更新する場合に役立ちます。

52
Brett Kail