42.4.3. JMS プロパティーの設定
概要
コンシューマーエンドポイントでリクエストコンテキストを使用すると、JMS メッセージヘッダープロパティーの数とコンシューマーエンドポイントのタイムアウト値を設定できます。これらのプロパティーは、1 回の呼び出しで有効です。サービスプロキシーで操作を呼び出すたびに、それらをリセットする必要があります。
サービスにヘッダープロパティーを設定することはできないことに注意してください。
JMS ヘッダーのプロパティー
表42.4「設定可能な JMS ヘッダープロパティー」 は、コンシューマーエンドポイントのリクエストコンテキストを使用して設定できる JMS ヘッダーのプロパティーを一覧表示します。
プロパティー名 | プロパティータイプ | セッターメソッド |
---|---|---|
相関 ID |
|
|
配信モード |
|
|
優先度 |
|
|
有効期間 |
|
|
-
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 を設定します。
エクスパレーションプロパティーを 60 分に設定します。
新しい JMSPropertyType
オブジェクトを作成する。
オプションのプロパティーの値を設定します。
オプションのプロパティーをメッセージヘッダーに追加します。
JMS メッセージヘッダー値をリクエストコンテキストに設定します。
クライアントの受信タイムアウトプロパティーを 1 秒に設定します。