を実行しているEJBのスケジュールでタイマーの重複を避ける:は私がWildfly 10.10内で実行されているシングルトンEJBのEJBタイマーのスケジュールを持っているwildfly内部
@Singleton
@Startup
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
public class MySingletonBean {
public method() {
//uses synchronization primitives to fine control the concurrent access
}
@Schedule(hour = "*", minute = "*", second = "*", persistent = false)
public void update() {
//each 120 seconds update method timeouts and the overlapping/log message occurs
}
}
タスクを更新()モデルが1秒未満を費やしてスムーズに実行内主にただし、ビジネスの必要性のために2分ごとに、メソッドのタイムアウトは1秒以上になります。
問題:
各ようなログメッセージを出力wildfly 2分:
を(EJBデフォルト - 1)WFLYEJB0043:タイマの以前の実行[]はスキップ、まだ進行中ですこの重複スケジュールされた実行は:。
メッセージが何を意味するのかはっきりしています。前のタイマーは、次回の実行が開始されてオーバーラップが発生する前に終了しませんでした。
さらに、重複すると、更新中の下位のデータ構造の同時の問題が発生します。
私の質問:
1 - タイマーが遅い重複/同時更新を回避したとき場合には、次のスケジュールを廃棄する方法は?
2 - ログメッセージが表示されない場合は、重複したスケジュールを破棄するにはどうすればよいですか?
ところで、私は更新方法を2つの異なるスケジュール(1秒と120秒)に分割することを考えました。しかし、更新メソッドを破ることは、更新中のデータ構造全体を中断することを意味し、少なくとも今のところは複雑でinvokingです。
ご協力いただきましてありがとうございます。
ありがとうございます。私はコード内のBeanのタイプと他の詳細を使って質問を更新しました – Doleron