2017-01-30 9 views
0

私は自分のコードからWebサービスを2回ヒットしています。最初のヒットは私にproduct_IDを与えます。これはpathパラメータとして、私に応答を与える2回目のgetコールを行います。Thread.sleep()の代わりにEJBで@Timeoutを使用

問題は、2番目(GET)コールが最初の(POST)コールから2秒後にヒットすることです。私は自分のプロジェクトでEJBを使用していますが、最も簡単な解決策はThread.sleep(2000)です。しかし、EJBはプログラマが独自のスレッドを管理することを推奨していません。

私の研究では、確かな解決策を見出しましたが、私のEJBスキルが不足しているため、それほど理解できません。誰かがこの問題を解決するために私を導くことができますか?

可能性の高いソリューションへのURLは次のとおりです。最初の呼び出しのあなたの方法でUsing the EJB3 timer service instead of Thread.sleep()

答えて

2

は、あなたが最初の呼び出しの後に2秒の遅延で、プログラムの単一のアクションタイマーを作成する必要があります。

Timer timer = timerService.createSingleActionTimer(2000, new TimerConfig(product_ID, true)); 

プログラマティックタイマーが期限切れになる(オフになる)と、コンテナは、Beanの実装クラスで@Timeoutアノテーションを付けたメソッドを呼び出します。 @Timeoutメソッドには、タイムドイベントを処理するビジネスロジックが含まれています。

@Timeout 
public void handleTimerEvent(Timer timer) { 
    String productId = timer.getInfo(); 
    someMethodWithDoSecondCallLogic(productInfo) 
} 

引用文献:

+0

ん@Timeoutは正確のThread.sleepのように動作し、すなわち、それは、現在のスレッドがスリープ状態に行かせるか、それがプロセスを作るん非同期。私は私のプロジェクトを実行しているので、2秒後に2番目のWebサービスが起動しています。しかし、その前にWebサービスが実行された後に実行されるべきメソッド。 – Anant666

+0

@Timeoutはバックグラウンドで動作し、 'timerService.createSingleActionTimer'で作成されたタイマーが終了したときに反応します。このEJBクラスに他のタイマーを作成すると、@ Timeoutメソッドもトリガーされます。 (最初の方法で使用するために2番目の呼び出しの応答を使用したいのですが、もちろんタイマーでは使用できません) – Redlab

+1

最初の呼び出しと同じ方法で応答したい場合は、このようなものに従ってくださいhttp://stackoverflow.com/questions/9100987/is-there-something-that-behaves-like-wait-and-notify-in-ejb-environment – Redlab

関連する問題