1

メッセージがキューに到着するたびにクラスターノードでインスタンス化されるメッセージ駆動型 Bean があります。

メッセージ駆動型 Bean で実行されているプロセスをクラスタ全体で監視およびキャンセルできるようにしたいのですが、これは少し問題です。

それはどのように達成できますか?各クラスタ ノードから現在処理されている MDB のリストを何らかの方法で取得し、必要に応じてそれらのプロセスを強制終了することはできますか? ある種のシングルトンを使用して、すべてのクラスターノード上のすべての MDB の参照を保持できますか (そうは思いません:()

私が使用できるレジストリサービスはありますか、それともそのようなものを書くことは可能ですか?

最後の手段は、データベースを介して監視とキャンセルのプロセスを実行することです。これは、キャンセルを検出するために MDB 内のデータベースをポーリングする必要があるため、私は嫌いです。

サーバー環境は BEA Weblogic 10.02 で、EJB 3.0 を使用しています。

4

1 に答える 1

1

私はMDBの経験があまりありませんが、解決策は、各MDBがリンクしてIDを登録するクラスター化されたシングルトンBeanを持つことです。次に、キャンセルを検出するために登録した ID を使用して、同じ Bean でチェックバックできます。本質的に、DB ベースのソリューションですが、DB のポーリングはありません。

MDB は非常に長時間実行されるとは考えられず、おそらくより管理しやすいスレッドに委譲する必要があります。

http://my.safaribooksonline.com/book/web-development/websphere/0738426091/message-driven-beans/ch06lev1sec7

上記では、EJB2 の MDB について説明しています (オンラインで EJB3 リファレンスが見つかりませんでした)。関連セクション:

"実際の長期実行トランザクションには使用しないでください— MDB クライアントが待機するには要求の実行時間が長すぎる場合は、非同期の要求/応答が適切である可能性があることを示しましたが、MDB 自体を長時間使用する必要があると言っているわけではありません。これは、バッチ サイクル、または作業をより小さな実行可能なコンポーネントに分割するその他のアクティビティに任せた方がよい場合があります。MDB は、完全な長時間実行トランザクションのアクティビティを調整するための開始点になる可能性があります。

お役に立てれば。

于 2012-10-26T14:18:59.327 に答える