新しい JMS コントロールを作成する

このトピックでは、新しい JMS コントロールを作成する方法について説明します。

JMS コントロールについては、JMS コントロール : Web サービスから Java Message Service のキューとトピックを使用するを参照してください。

WebLogic Workshop のコントロールの詳細については、コントロール : Web サービスからリソースを使用するを参照してください。

新しい JMS コントロールを作成する

新しい JMS コントロールを作成し、Web サービスに追加するには、[JMS コントロールの追加] ダイアログを使用します。[JMS コントロールの追加] ダイアログにアクセスするには、メニュー バーの [サービス] メニュー、デザイン ビューのサービスの上で右クリックしたときのコンテキスト メニュー、またはデザイン ビューの右上隅の [コントロールの追加] オプション メニューを使用します。

[JMS コントロールの追加] ダイアログの詳細については、[JMS コントロールの追加] ダイアログを参照してください。

JMS コントロールの CTRL ファイルを手動で作成するという方法もあります。たとえば、既存の JMS コントロールの CTRL ファイルをコピーしてから変更することができます。

JMS コントロールの CTRL ファイル

[JMS コントロールの追加] ダイアログで上記の設定を使用して JMS コントロールの CTRL ファイルを作成した場合、新しい CTRL ファイルは次のようになります。

import weblogic.jws.control.JMSControl;
import java.io.Serializable;
/** 
 *   @jws:jms type="queue" send-jndi-name="jms.SimpleJmsQ" receive-jndi-name="jms.SimpleJmsQ"
 *   connection-factory-jndi-name="weblogic.jws.jms.QueueConnectionFactory" 
 */ 
public interface SimpleQueueControl extends JMSControl 
{
    /**
     * this method will send a javax.jms.TextMessage to send-jndi-name
     */
    public void sendTextMessage(String payload);
    /**
     * If your control specifies receive-jndi-name, that is your JWS expects to receive messages 
     * from this control, you will need to implement callback handlers.
     */
    interface Callback extends JMSControl.Callback
    {
        /**
         * Define only 1 callback method here.
         * 
         * This method defines a callback that can handle text messages from receive-jndi-name
         */
         public void receiveTextMessage(String payload);
    }
}

CTRL ファイルには、ダイアログで指定した名前の Java インタフェースの宣言が含まれています。このインタフェースは、JMSControl 基本インタフェースを拡張します。

JMS コントロールの CTRL ファイルの内容は、[JMS コントロールの追加] ダイアログで選択した設定によって異なります。上記のファイルの例は、[メッセージ タイプ] ドロップダウン リストで選択した [テキスト] を反映しています。

JMS コントロールのプロパティをコンフィグレーションする

JMS コントロールのほとんどの側面は、デザイン ビューのプロパティ ペインからコンフィグレーションできます。デザイン ビューで JMS コントロールのインスタンスを選択すると、プロパティ ペインに次のプロパティが表示されます。

これらのプロパティは、JMS コントロールの CTRL ファイルで @jws:jms Javadoc タグの属性としてコード化されます。

@jws:jms タグとその属性の詳細については、@jws:jms タグを参照してください。

JMS のキューを作成、コンフィグレーション、および登録する方法については、WebLogic Server のドキュメントの『WebLogic JMS プログラマーズ ガイド』を参照してください。

WebLogic Workshop をインストールすると、JMS コントロールのサンプルをサポートするための 2 つのキューがコンフィグレーションされます。キューの名前は、SimpleJmsQCustomJmsCtlQ です。これらのキューとの接続を提供する接続ファクトリは、weblogic.jws.jms.QueueConnectionFactory という JNDI 名を持ちます。操作を試すには、これらのリソースを使用します。

注意 : サーバ上にデプロイされた各 JMS コントロールは、ユニークなキューでリスンする必要があります。同じサーバ上の複数の JMS コントロールが同じキューで同時にリスンすると、予期しない結果を招く可能性があります。詳細については、後述の「JMS コントロールに関する注意」を参照してください。

デザイン ビューでメソッドまたはコールバックを追加する

デザイン ビューで Web サービスを編集し、Web サービスで使用するデータベース コントロールにメソッドまたはコールバックを追加する場合、デザイン ビューにある JMS コントロールのインスタンスを右クリックすると、メソッドまたはコールバックを直接追加できます。

上の例では、CustomJMSClient Web サービスは myCustomQ というインスタンス名を持つ JMS コントロールを使用します。myCustomQ オブジェクトを右クリックすると、[メソッドの追加] と [コールバックの追加] オプションが含まれるメニューが表示されます。[メソッドの追加] オプションを選択すると、myCustomQ がインスタンスとなっている JMS コントロールにメソッドを追加できます。[コールバックの追加] オプションを選択すると、myCustomQ がインスタンスとなっている JMS コントロールにコールバックを追加できます。

注意 : Web サービスの JWS ファイルで宣言する JMS コントロールの変数は、JMS コントロールのインスタンスです。実際のコントロールは CTRL ファイルで定義します。デザイン ビューでメソッドまたはコールバックを JMS コントロールに追加すると、メソッドまたはコールバックは CTRL ファイルに追加されます。追加された後に、メソッドまたはコールバックはその JMS コントロールを使用するすべての Web サービスで使用可能になります。

注意 : JMS コントロールのデフォルトのメソッドまたはコールバックは、削除しても問題はありません。

注意 : JMS コントロールには 1 つのコールバックのみを定義できます。

追加された直後のメソッドまたはコールバックは、パラメータを持たず、XML マップにも関連付けられていません。

メッセージ本体のフォーマットを指定する

JMS コントロールには、複数のメソッドと 1 つのコールバックを定義することができます。すべてのメソッドは、send-jndi-name(存在する場合)という名前のキューまたはトピックに送信またはパブリッシュされます。

JMS では、送信またはパブリッシュ可能な複数のメッセージ タイプを定義しています。JMS コントロールは、TextMessage、ObjectMessage、および Message という JMS メッセージを送信できます。JMS コントロールは、呼び出された JMS コントロール メソッドのコンフィグレーションに基づいてメッセージのタイプを動的に判別します。

JMS コントロール メソッドが XML マップ(@jws:jms-message@jws:jms-header、または @jws:jms-property)を取る場合、XML マップで指定されたペイロード、ヘッダ、およびプロパティを格納した TextMessage が送信されます。メッセージ ペイロードを管理するための XML マップの使用方法については、JMS コントロールで XML メッセージを送信および受信するを参照してください。

JMS コントロール メソッドが 1 つの String 引数を取り、XML マップを取らない場合、TextMessage が送信されます。

JMS コントロール メソッドが String または javax.jms.Message 型以外の 1 つの文字列引数を取り、XML マップを取らない場合、ObjectMessage が送信されます。

JMS コントロール メソッドが javax.jms.Message 型の 1 つの文字列引数を取り、XML マップを取らない場合、Message オブジェクトがそのまま送信されます。

メッセージのヘッダとプロパティを指定する

メッセージ ヘッダとメッセージ プロパティを制御するパラメータ リストと関連付けられる XML マップの編集については、JMS コントロールで JMS メッセージ ヘッダとメッセージ プロパティを処理するを参照してください。

リモートの JMS リソースにアクセスする

send-jndi-namereceive-jndi-name、および connection-factory に指定された JNDI 名は、リモートの JMS リソースを参照している場合があります。JMS リソース名の指定形式は次のとおりです。

jms:{provider-host}/{factory-resource}/{dest-resource}?{provider-parameters}

次に例を示します。

jms://host:7001/cg.jms.QueueConnectionFactory/jws.MyQueue?URI=/drt/Bank.jws

または

jms://host:7001/MyProviderConnFactory/MyQueue?SECURITY_PRINCIPAL=foo&SECURITY_CREDENTIALS=bar

JMS コントロールに関する注意

JMS コントロールを操作する場合には、次の点に注意してください。

注意 : 再試行回数として大きな値を設定し、エラーの送り先を設定していないコンフィグレーションの送り先の場合、JMS コントロールのインフラストラクチャでは、メッセージ処理の試行と失敗を半永久的に繰り返すことになります。

関連トピック

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

@jws:jms-header タグ

@jws:jms-property タグ

@jws:jms-message タグ

JMSControl インタフェース