3

Web サービス (EJB 3.0) で短時間 (1 秒または 2 秒) 待機する必要があります。

EJB の世界で唯一の合法的な解決策と思われる私の問題に関するこの質問を見つけましたが、待機する方法をまだ見つけることができませんでした。いろいろ調べたのですが、EJB 3.0 のツールでは実現できないようです。

本当?それとも解決策はありますか?

4

5 に答える 5

6

スレッド経由で 1 秒または 2 秒待機Thread.sleepすることは問題なく、アプリ サーバーに悪影響を与えることはありません。これと実際の作業を 1 秒または 2 秒実行することとの間にはほとんど違いはありません。1 分から 2 分の話をしているとしたら、それはもっと懸念されることであり、待機するよりも CPU を使用する方が良いという事実だけで、通信を調整するためのより良いオプションを調査する価値があります。

スレッドに関する EJB 仕様の制限の主な動機は、人々がスレッドを開始したり、スレッドを破棄したり ( start()join()、など) 、スレッドの状態を変更したり( stop()、、など) したりするのを防ぐためです。理解しておくべき重要な点は、効率のためにスレッドがプールされ、コンテナーによって再利用されるということです。したがって、プールの状態に影響を与える (スレッド オブジェクト自体を変更してスレッドを汚す) か、そのプールと競合する (スレッドの開始/停止) ことは、非常に大きな禁止事項です。コンテナーは、間接的にスレッドの状態を設定することもできます。suspend()setName(String)setContextClassLoader(ClassLoader)setDaemon(boolean)setPriority(int)ThreadLocalJNDI、トランザクション、セキュリティ、および接続管理の提供などのオブジェクト。これにより、独自のスレッドを開始/停止することは、二重に大きな問題になります。

スレッドでのスリープは、サーバーの時間とリソースの無駄遣いです。非常に少量で恐ろしいことではありません-それはあなたの時間を無駄にすることです. より長い時間は懸念事項です。

ただし、transaction を呼び出さないください。ロックを保持して電話をかけることは大したことではありません。したがって、このメソッドをまたは同様のものとしてマークしてください。Thread.sleep()sleep@TransactionAttribute(NOT_SUPPORTED)

于 2013-01-07T14:59:19.753 に答える
4

Thread.sleep(2000)同じことに対する簡単な解決策であるべきだと思います。なぜうまくいかないと思いますか?

于 2013-01-07T12:31:50.143 に答える
0

EJB は (...) スレッドを作成または管理すべきではありません。

独自のスレッドを生成することは、EJB/アプリケーション コンテナーでは優先されません。特に、それらはコンテナーによって管理されます。1 つのアプローチは、framework/WorkKManager を使用してスレッド関連の操作を実行することです。

WorkManager は commonj.work(commonj-twm.jar) の API です。

また、EJB での停止は設計上悪いと思いますが、機能を 2 つの操作に分割することで、クライアント/サービス層の遅延を制御できます。

于 2013-01-07T13:52:09.470 に答える
0

スレッドとの対話は EJB では推奨されません。それはコンテナーの責任です。

回避策として、createTimer(duration, info)状態を維持するか、さらに実行するために必要な情報を保持する必要がある場合は、シリアライズ可能なオブジェクトを渡すことができる でタイマーを作成してみてください。ロジックを 2 つの部分/メソッドに分割できます。2 番目のメソッドは、前の終了時に特定の間隔の後に実行されます。

したがって、定義された間隔の後、タイムアウトメソッドが呼び出され、必要に応じてシリアル化されたオブジェクトで実行を進めることができます。

于 2013-01-07T14:24:52.310 に答える
0

EJB メソッド内で待機する場合は、有名な を使用しThread.sleepて現在の実行スレッドを一時停止できます。

注意: EJB 内で管理を行うべきではありませんThread。スリープは一種の管理であるため、EJB を一時停止することは良い方法とは見なされません。

あなたの要求はにおいかもしれないので、何か問題がある場合は、デザインを確認することをお勧めします。

于 2013-01-07T12:33:32.930 に答える