サンプル 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
を閉じます。