Menu Close
42.4.3. JMS プロパティーの設定
概要
コンシューマーエンドポイントでリクエストコンテキストを使用すると、多くの JMS メッセージヘッダープロパティーとコンシューマーエンドポイントのタイムアウト値を設定できます。これらのプロパティーは、単一の呼び出しに対して有効です。サービスプロキシーで操作を呼び出すたびに、それらをリセットする必要があります。
サービスではヘッダープロパティを設定できないことに注意してください。
JMS ヘッダープロパティー
表42.4「設定可能な JMS ヘッダープロパティー」に、コンシューマーエンドポイントのリクエストコンテキストを使用して設定できる JMS ヘッダーのプロパティーの一覧を示します。
表42.4 設定可能な JMS ヘッダープロパティー
プロパティー名 | プロパティーの型 | セッターメソッド |
---|---|---|
Correlation ID |
|
|
Delivery Mode |
|
|
Priority |
|
|
Time To Live |
|
|
-
org.apache.cxf.transports.jms.context.JMSMessageHeadersType
オブジェクトを作成します。 - 表42.4「設定可能な JMS ヘッダープロパティー」に記載されている適切なセッターメソッドを使用して、設定する値を反映させます。
-
org.apache.cxf.transports.jms.JMSConstants.JMS_CLIENT_REQUEST_HEADERS を第 1 引数として、新しい
JMSMessageHeadersType
オブジェクトを第 2 引数として使用してリクエストコンテキストのput()
メソッドを呼び出すことで、値をリクエストコンテキストに設定します。
オプションの JMS ヘッダープロパティー
任意のプロパティーを JMS ヘッダーに設定することもできます。オプションの JMS ヘッダープロパティーは、他の JMS ヘッダープロパティーを設定するために使用される JMSMessageHeadersType
オブジェクトに保存されます。それらは、org.apache.cxf.transports.jms.context.JMSPropertyType
オブジェクトが含まれる List
オブジェクトとして保存されます。オプションのプロパティーを JMS ヘッダーに追加するには、以下を行います。
-
JMSPropertyType
オブジェクトを作成します。 -
setName()
を使用して、プロパティーの name フィールドを設定します。 -
setValue()
を使用して、プロパティーの value フィールドを設定します。 -
JMSMessageHeadersType.getProperty().add(JMSPropertyType)
を使用して、JMS メッセージヘッダーにプロパティーを追加します。 - すべてのプロパティーがメッセージヘッダーに追加されるまで、この手順を繰り返します。
クライアント受信タイムアウト
JMS ヘッダープロパティーの他に、タイムアウトするまでコンシューマーエンドポイントが応答を待つ時間を設定できます。org.apache.cxf.transports.jms.JMSConstants.JMS_CLIENT_RECEIVE_TIMEOUT を第 1 引数として、コンシューマーが待機するミリ秒単位の時間を表す long
を第 2 引数としてリクエストコンテキストの put()
メソッドを呼び出すことで、値を設定します。
例
例42.15「リクエストコンテキストを使用した JMS プロパティーの設定」に、リクエストコンテキストを使用して JMS プロパティーの一部を設定するコードを示します。
例42.15 リクエストコンテキストを使用した JMS プロパティーの設定
import org.apache.cxf.transports.jms.context.*; // Proxy greeter initialized previously InvocationHandler handler = Proxy.getInvocationHandler(greeter); BindingProvider bp= null; if (handler instanceof BindingProvider) { bp = (BindingProvider)handler; Map<String, Object> requestContext = bp.getRequestContext(); JMSMessageHeadersType requestHdr = new JMSMessageHeadersType(); requestHdr.setJMSCorrelationID("WithBob"); requestHdr.setJMSExpiration(3600000L); JMSPropertyType prop = new JMSPropertyType; prop.setName("MyProperty"); prop.setValue("Bluebird"); requestHdr.getProperty().add(prop); requestContext.put(JMSConstants.CLIENT_REQUEST_HEADERS, requestHdr); requestContext.put(JMSConstants.CLIENT_RECEIVE_TIMEOUT, new Long(1000)); }
例42.15「リクエストコンテキストを使用した JMS プロパティーの設定」のコードは、以下を行います。
JMS プロパティーを変更するプロキシーの InvocationHandler
を取得する。
InvocationHandler
が BindingProvider
であるかどうかを確認する。
返された InvocationHandler
オブジェクトを BindingProvider
オブジェクトにキャストし、リクエストコンテキストを取得する。
リクエストコンテキストを取得する。
JMSMessageHeadersType
オブジェクトを作成し、新しいメッセージヘッダーの値を保持する。
相関 ID を設定する。
Expiration プロパティーを 60 分に設定する。
新しい JMSPropertyType
オブジェクトを作成する。
オプションプロパティーの値を設定する。
オプションプロパティーをメッセージヘッダーに追加する。
JMS メッセージヘッダーの値をリクエストコンテキストに設定する。
クライアントの受信タイムアウトプロパティーを 1 秒に設定する。