サンプル 6c では、JRun の JMS の実装と EJB がどのように関係し、またやり取りするのかを示します。クライアントはメッセージのチェーンが開始する最初のメッセージを生成します。このチェーンはサーバ上の Bean によって消費されます。最後のメッセージは元のクライアントによって消費されます。
この仕組みを見るには、まず /sample6c/Client.java ファイルを調べます。コンストラクタでは、接続とセッションが確立すると、クライアントは "1" から "100" の名前が付いた 100 個のキューを作成します。さらに ListenerBean エンティティ Bean のインスタンスを 100 個作成します。最後に、クライアントは "100" という名前が付けられたキューのリスナとして自らを登録します。
Client.run メソッドでは、メッセージがキュー "0" に送信されます。このメソッドは、onMessage メソッドが実行されるまで待機します。Client は MessageListener インターフェイスを実装し、またそのために onMessage メソッドも実装しなければならない点に注意してください。メッセージをキュー "100" に転送するとき、onMessage メソッドが呼び出されます。
チェーンがどのように実装されるかについては、Listener を調べます。まず /sample6c/
/ejbeansListener.properties ファイルを開きます。ejipt.maxContexts プロパティが 10 に設定されていることに注意してください。これは、アクティブな Bean インスタンスの数が 10 を超えないことを意味します。このため、サンプルの実行時に、インスタンスが必要に応じて有効または無効な状態になります。持続性を設定するために instance.store を使用します。
次に、ListenerBean.java を確認します。setEntityContext メソッドを使用して、現在の Listener オブジェクトが最初の Listener インスタンスであるかどうかをチェックします。最初のインスタンスであれば、Listener のすべてのインスタンスで同じ接続を使用できるように、メソッドは JNDI コンテキストの接続をバインドします。
Listener オブジェクト (Listener.java) によって MessageListener が拡張されるので、 ListenerBean.java で onMessage メソッドを実装を提供する必要があります。このメソッドはメッセージを次のキューに転送するためのものです。
サンプルを実行します。次のコマンドを入力してサーバを起動します。
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 インスタンスを削除し、Receiver、Sender、Session、および Connection を閉じます。