2017-10-25 4 views
1

を実行している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です。

ご協力いただきましてありがとうございます。

答えて

0

「タイマー」Beanはどのような種類のBeanですか?私はそれを@Singletonにすることがあなたの事件に十分であると思う。それがシングルトンである場合、メソッドに複数のスレッドでアクセスする方法はありません。

+0

ありがとうございます。私はコード内のBeanのタイプと他の詳細を使って質問を更新しました – Doleron

関連する問題