私はので、私はEJB環境での正しい方法を、次のことを行う方法がわからない、EJBコンテナにスレッドをいじくりてはいけない知っている:関与EJB環境で.wait()や.notify()のように動作するものはありますか?
はです:
- ステートレスセッション豆 "クライアント" "キュー" からのメッセージを処理
- ステートレスSession Bean "サーバー"
- メッセージキュー "キュー"
- メッセージドリブンBeanの "MDB" Wnはスルー
- NステートレスセッションBean W1を
シナリオある:次にキューにいくつかのメッセージを送信サーバのメソッドを呼び出し
クライアント。その後、サーバは他にもいくつかあります。その間に、Mdbがメッセージを消費し、かなり遅い計算を行うWiを呼び出し、結果を取得します。今すぐMdb結果はサーバになります。 サーバが送信したすべてのメッセージのすべての「結果」が得られた場合、Wの結果をさらに計算し、その結果をクライアントに返します。
私の問題:
のJava SEでは、私は単にサーバーを送った後、作業をした後、W秒の結果をサーバー待機を持っている)(.WAITを行うだろうメッセージ。その後、mdbは結果を設定したときに.notify()になります。私はEJBコンテナでスレッド化する必要はありません。仕様通り、EJB環境で同じ動作を実現するための適切な方法が見つからなかったため、失われてしまいました。
この問題に関するお手伝いは、事前に感謝します。
P .: JBoss 5.1.0でこの問題に取り組むベンダー固有の対策がある場合に備えています。
それは私が考えたものに似ていますが、私の最大の問題は「応答メッセージを待つ」という部分です。それは私がSEで待機通知を使用する場所です。だから私はMDBsと実際の待機のメカニズムを探しています。あなたはそれについてヒントを持っていますか? – Daniel
@Daniel - あなたはMessageConsumerをセットアップし、それに 'receive()'を呼び出すでしょう。これは方程式の「待機」部分です。最終的な処理にはMDBを使用せず、分散作業のみを使用しています。 – jtahlborn
サーバーがreceive()を呼び出す前に完了したMDBからのメッセージをサーバーが見逃す可能性のある競合状態はありますか? –