1

遅延を伴うさまざまなメソッドを呼び出す必要があるメソッドを持つステートレスEJBがあります。例えば:

EJB 1

public void start()
{
   waitFor3Seconds();
   doSomething1();
   waitFor3Seconds();
   doSomething2();
   waitFor3Seconds();
   doSomething3();
}

waitFor3Seconds()を実装するにはどうすればよいですか?Thread.sleep()はブロックされるため、使用したくありません。

4

3 に答える 3

4

EJBは処理中に待機するべきではありません、それは私には悪いデザインのように聞こえます。多分あなたは非同期処理を検討する必要がありますか?(おそらくMDBを使用します)。そして、EJB開発の制限Thread.sleep()の1つであるを使用する誘惑に抵抗してください(私の強調):

具体的には、エンタープライズBeanはスレッドを作成または管理するべきではありません(...) 。

もう1つの可能性は、ジョブスケジューリングフレームワーク(Quartzなど)を使用して、必要な数のタスクをスケジュールし、プロセスに必要な時間に次々にジョブを開始するように設定することです。あなたの例では、3つのジョブが必要になります:doSomething1()、、、、必要な遅延で開始するように構成されていますdoSomething2()doSomething3()

于 2012-07-18T21:36:05.487 に答える
2

JavaEEが提供するタイマーサービスを使用します。

http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html#bnbpa

「プログラマティックタイマーの作成」というタイトルのセクションを参照する必要があります

于 2012-07-18T21:23:50.470 に答える
0

waitFor3Seconds()を実装するにはどうすればよいですか?Thread.sleep()はブロックされるため、使用したくありません。

実装する待機中のメソッドが何であれ、EJBはブロックされます。設計上、メソッドが戻った後、空きEJBのプールに戻ります。これが、他の人が非同期処理の採用を提案した理由です。

于 2012-07-18T22:13:35.720 に答える