2012-03-16 16 views
2

私は架空のタイマーサービスを以下の安全性と正確性に関するいくつかの質問があります:私はここでやりたいすべてが、できるだけ早く何かをチェックすることですEJB自動タイマー、ロック、タイムアウトや長時間実行方法

@Singleton 
public class MyTimerService { 

    @Schedule(second = "*", minute = "*", hour = "*", persistent = false) 
    public void checkTakingOneMinute() { 
    // code below takes a minute or so 
    } 
} 

を可能(この場合毎秒)。私がそれを理解しているので、メソッドcheckTakingOneMinute()は前の呼び出しが終了するまで新しいチェックを開始しません。それは私が欲しいものですが、私はコンテナの内部について心配しています:ビジー状態のときにメソッドの実行をスキップするか、ロックされ、後続のロックタイムアウトを伴う一種のキューに入れられますか?

答えて

3

EJB仕様では、コンテナスケジュールがすでに実行されているためにタイマーを起動できない場合、タイマーイベントを「追い越し」する必要があります。実際には、コンテナはおそらく、メソッドが完了した後の次の射撃時間を再計算し、次の射撃時間が現在の時間の前であれば直ちに再実行するでしょう。私はこれがWebSphere Application Serverのしくみであることを知っています。

beanのデフォルトのConcurrencyManagement(ConcurrencyManagemementType.CONTAINER)とtimerメソッドのLock(LockType.WRITE)は、他のどのメソッドも実行されないことに注意してください。そのBean上に他のメソッドが必要な場合は、ConcurrencyManagementType.BEANを使用することを検討してください。

+0

私の質問は、コード、ほとんどhttp://stackoverflow.com/questions/2691835/timer-service-in-ejb-3-1-schedule-calling-timeout-problemと同じであるように見えます書き直すと、あなたのソリューションはすごくうれしく思います。 – Osw

+0

あなたはおそらく正しいでしょう。私はdups(私が答えて忘れてしまったものさえ)を検索するのではなく、パーソナライズされた/カスタマイズされた答えを書く傾向があります。 –

1

私たちはアプリケーションではなくWeblogicの内部でTimersを使用します。私が知る限り、タイマスレッドが何かを処理していて、次のスケジュールのために目覚めている場合、起床処理は次のスケジュールが再実行されるのを待つが、これはいくつかのパラメータに基づいて制御することができる。私は以下のWebsphereでどのように行われているかについていくつかの文書を見つけました(これらの設定可能なパラメータがWebsphereのものであるかどうかはわかりません) - このリンクが疑問を明確にするのに役立つかもしれません。彼らはあなたが心配している不足しているタイマー(再試行と欠落タイムアウトのセクション)について言及しています。

EJB timers in Websphere

+0

いい記事、ありがとう。あなたは@bkailソリューションにも興味があるかもしれませんが、彼の答えの下で私のコメントを見てください。 – Osw

関連する問題