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 のキューをコンフィグレーションする管理者は、配信保証ポリシーを決定します。

このシナリオを実装するには

  1. JMS コントロールで、JMS コントロールの @jws:jms プロパティの send-jndi-name 属性の値として対象の JMS のキューの名前を指定します。JMS コントロールの作成方法については、新しい JMS コントロールを作成するを参照してください。

  2. Web サービスから、JMS コントロールのデフォルト メソッド(コントロールの作成時に選択したメッセージ タイプに応じて sendTextMessagesendMessagesendObjectMessage、または 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 属性の説明を参照してください。

このシナリオを実装するには

  1. JMS コントロールで、JMS コントロールの @jws:jms タグsend-jndi-name 属性の値として、メッセージの送信先の JMS のキューの名前を指定します。

  2. JMS コントロールの @jws:jms タグreceive-jndi-name 属性の値として、メッセージの受信元の JMS のキューの名前を指定します。

  3. Web サービスからメッセージを送信するには、JMS コントロールのデフォルト メソッド(コントロールの作成時に選択したメッセージ タイプに応じて sendTextMessagesendMessagesendObjectMessage、または sendJMSMessage)、または JMS コントロールに定義したカスタム メソッドを呼び出します。

  4. 受信キューでメッセージを受信した場合に通知を受けるには、JMS コントロールのコールバック(コントロールの作成時に選択したメッセージ タイプに応じて receiveTextMessagereceiveMessagereceiveObjectMessage、または 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 レジストリに登録されている必要があります。

このシナリオを実装するには

  1. JMS コントロールで、JMS コントロールの @jws:jms プロパティの send-jndi-name 属性の値として対象の JMS のトピックの名前を指定します。

  2. Web サービスから、JMS コントロールのデフォルト メソッド(コントロールの作成時に選択したメッセージ タイプに応じて sendTextMessagesendMessagesendObjectMessage、または 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 サービスがトピックにサブスクライブした後に送信されたメッセージのみを受信できます。

このシナリオを実装するには

  1. JMS コントロールで、JMS コントロールの @jws:jms タグの receive-jndi-name 属性の値として対象の JMS のトピックの名前を指定します。

  2. Web サービスから、JMS コントロールの subscribe メソッドを呼び出します。

  3. 受信トピックでメッセージを受信した場合に通知を受けるには、JMS コントロールのコールバック(コントロールの作成時に選択したメッセージ タイプに応じて receiveTextMessagereceiveMessagereceiveObjectMessage、またはreceiveJMSMessage)用のコールバック ハンドラ、または JMS コントロールに定義したカスタム コールバックを実装します。

  4. 受信トピックでメッセージを受信した場合の通知の受け取りを停止するには、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    }    }

関連トピック

概要 : メッセージング システムと JMS

JMS コントロールでサポートされないメッセージングのシナリオ

@jws:jms タグ

@jws:jms-header タグ

@jws:jms-message タグ

@jws:jms-property タグ