JMS コントロールでサポートされるメッセージングのシナリオ
このトピックでは、JMS コントロールでサポートされる具体的なメッセージングのシナリオについて説明します。
WebLogic Workshop のコントロールの詳細については、コントロール : Web サービスからリソースを使用するを参照してください。
JMS(Java Message Service)の詳細については、概要 : メッセージング システムと JMSを参照してください。
JMS コントロールの詳細については、JMS コントロール : Web サービスから Java Message Service のキューとトピックを使用するを参照してください。
JMS 仕様では、さまざまなメッセージングのシナリオがサポートされています。シナリオの中には、Web サービスの性質のため、スタンドアロン アプリケーションでは可能でも WebLogic Workshop 環境では可能ではないものがあります。
以下の節で取り上げるメッセージングのシナリオは、JMS コントロールでサポートされます。JMS コントロールでサポートされないメッセージングのシナリオについては、JMS コントロールでサポートされないメッセージングのシナリオを参照してください。
Web サービスは、JMS コントロールを使用して、メッセージを JMS のキューに送信できます。Web サービスは応答を受信しません。キューが存在しており、JNDI レジストリに登録されている必要があります。対象の JMS のキューをコンフィグレーションする管理者は、配信保証ポリシーを決定します。
このシナリオを実装するには
JMS コントロールで、JMS コントロールの @jws:jms プロパティの send-jndi-name 属性の値として対象の JMS のキューの名前を指定します。JMS コントロールの作成方法については、新しい JMS コントロールを作成するを参照してください。
Web サービスから、JMS コントロールのデフォルト メソッド(コントロールの作成時に選択したメッセージ タイプに応じて sendTextMessage、sendMessage、sendObjectMessage、または sendJMSMessage)、または JMS コントロールに定義したカスタム メソッドを呼び出します。
このシナリオの例を以下に示します。この例では、上記の手順に従っていることを前提にしています。
public class MyService { /** * @jws:control */ private MyQueueControl myQueue; /** * @jws:operation */ public void sendID(String personID) { myQueue.sendTextMessage( personID ); } }
Web サービスは、JMS コントロールを使用して、メッセージを JMS の 1 つのキューに送信し、別のキューの応答メッセージを受信することができます。1 つの JMS コントロールがコンフィグレーション済みのキューとの間で送信と受信の両方を行えるので、Web サービスは同じコントロールを使用して送信と受信を行えます。
注意 :双方向のメッセージングには、受信した各メッセージと、元のメッセージを送信した Web サービスのインスタンスを対応させる必要があります。通常、この相関は JMS コントロールによって管理されるので、ユーザ側のアクションは不要です。メッセージの相関の詳細については、@jws:jms タグの send-correlation-property および receive-correlation-property 属性の説明を参照してください。
このシナリオを実装するには
JMS コントロールで、JMS コントロールの @jws:jms タグの send-jndi-name 属性の値として、メッセージの送信先の JMS のキューの名前を指定します。
JMS コントロールの @jws:jms タグの receive-jndi-name 属性の値として、メッセージの受信元の JMS のキューの名前を指定します。
Web サービスからメッセージを送信するには、JMS コントロールのデフォルト メソッド(コントロールの作成時に選択したメッセージ タイプに応じて sendTextMessage、sendMessage、sendObjectMessage、または sendJMSMessage)、または JMS コントロールに定義したカスタム メソッドを呼び出します。
受信キューでメッセージを受信した場合に通知を受けるには、JMS コントロールのコールバック(コントロールの作成時に選択したメッセージ タイプに応じて receiveTextMessage、receiveMessage、receiveObjectMessage、または receiveJMSMessage)用のコールバック ハンドラ、または JMS コントロールに定義したカスタム コールバックを実装します。
このシナリオの例を以下に示します。
public class MyService { /** * @jws:control */ private MyQueueControl myQueue; /** * @jws:operation */ public void sendID(String personID) throws Exception { myQueue.sendTextMessage( personID ); }
myQueue_receiveTextMessage(String message) { // message has arrived from queue, perform desired operations } }
Web サービスは、JMS コントロールを使用して、メッセージを JMS のトピックにパブリッシュできます。Web サービスは応答を受信しません。トピックが存在しており、JNDI レジストリに登録されている必要があります。
このシナリオを実装するには
JMS コントロールで、JMS コントロールの @jws:jms プロパティの send-jndi-name 属性の値として対象の JMS のトピックの名前を指定します。
Web サービスから、JMS コントロールのデフォルト メソッド(コントロールの作成時に選択したメッセージ タイプに応じて sendTextMessage、sendMessage、sendObjectMessage、または sendJMSMessage)、または JMS コントロールに定義したカスタム メソッドを呼び出します。
このシナリオの例を以下に示します。
public class MyService { /** * @jws:control */ private MyTopicControl myTopic; /** * @jws:operation */ public void sendID(String personID) throws Exception { myTopic.sendTextMessage( personID ); } }
Web サービスは、JMS コントロールを使用して、メッセージを JMS のトピックにサブスクライブできます。トピックが存在しており、JNDI レジストリに登録されている必要があります。Web サービスがトピックにサブスクライブした後に送信されたメッセージのみを受信できます。
このシナリオを実装するには
JMS コントロールで、JMS コントロールの @jws:jms タグの receive-jndi-name 属性の値として対象の JMS のトピックの名前を指定します。
Web サービスから、JMS コントロールの subscribe メソッドを呼び出します。
受信トピックでメッセージを受信した場合に通知を受けるには、JMS コントロールのコールバック(コントロールの作成時に選択したメッセージ タイプに応じて receiveTextMessage、receiveMessage、receiveObjectMessage、またはreceiveJMSMessage)用のコールバック ハンドラ、または JMS コントロールに定義したカスタム コールバックを実装します。
受信トピックでメッセージを受信した場合の通知の受け取りを停止するには、JMS コントロールの unsubscribe メソッドを呼び出します。
このシナリオの例を以下に示します。
public class TopicForwardingService {
/** * @jws:control
*/ private MyTopicControl myTopic;
/** * @jws:operation * @jws:conversation phase=start */ public void registerListener() { myTopic.subscribe(); }
/** * @jws:operation * @jws:conversation phase="finish" */ public void unregisterListener() { // This isn't strictly necessary, the JWS will always // be unsubscribed on conversation finish. myTopic.unsubscribe(); }
myTopic_receiveTextMessage(String message) { // message has arrived from queue, perform desired operations } }