サンプル 6c:EJB 統合

サンプル 6c では、JRun の JMS の実装と EJB がどのように関係し、またやり取りするのかを示します。クライアントはメッセージのチェーンが開始する最初のメッセージを生成します。このチェーンはサーバ上の Bean によって消費されます。最後のメッセージは元のクライアントによって消費されます。

この仕組みを見るには、まず /sample6c/Client.java ファイルを調べます。コンストラクタでは、接続とセッションが確立すると、クライアントは "1" から "100" の名前が付いた 100 個のキューを作成します。さらに ListenerBean エンティティ Bean のインスタンスを 100 個作成します。最後に、クライアントは "100" という名前が付けられたキューのリスナとして自らを登録します。

Client.run メソッドでは、メッセージがキュー "0" に送信されます。このメソッドは、onMessage メソッドが実行されるまで待機します。ClientMessageListener インターフェイスを実装し、またそのために onMessage メソッドも実装しなければならない点に注意してください。メッセージをキュー "100" に転送するとき、onMessage メソッドが呼び出されます。

チェーンがどのように実装されるかについては、Listener を調べます。まず /sample6c
/ejbeans
/Listener.properties ファイルを開きます。ejipt.maxContexts プロパティが 10 に設定されていることに注意してください。これは、アクティブな Bean インスタンスの数が 10 を超えないことを意味します。このため、サンプルの実行時に、インスタンスが必要に応じて有効または無効な状態になります。持続性を設定するために instance.store を使用します。

次に、ListenerBean.java を確認します。setEntityContext メソッドを使用して、現在の Listener オブジェクトが最初の Listener インスタンスであるかどうかをチェックします。最初のインスタンスであれば、Listener のすべてのインスタンスで同じ接続を使用できるように、メソッドは JNDI コンテキストの接続をバインドします。

Listener オブジェクト (Listener.java) によって MessageListener が拡張されるので、 ListenerBean.javaonMessage メソッドを実装を提供する必要があります。このメソッドはメッセージを次のキューに転送するためのものです。

サンプルを実行します。次のコマンドを入力してサーバを起動します。

bash$ make jars 
bash$ make deploy
bash$ make standalone

次のコマンドを入力してクライアントを起動します。

bash$ make go host=localhost

次のような出力がサーバに表示されます。

>[object:0] forwarding message...
>[object:1] forwarding message...
>[object:2] forwarding message...
        .
.
.
>[object:99] forwarding message...
>

次の出力がクライアントに表示されます。

Received: 100

チェーンが完了すると、Client.run メソッドは instance.store から Listener インスタンスを削除し、ReceiverSenderSession、および Connection を閉じます。