Menu Close

42.4.3. JMS プロパティーの設定

概要

コンシューマーエンドポイントでリクエストコンテキストを使用すると、多くの JMS メッセージヘッダープロパティーとコンシューマーエンドポイントのタイムアウト値を設定できます。これらのプロパティーは、単一の呼び出しに対して有効です。サービスプロキシーで操作を呼び出すたびに、それらをリセットする必要があります。

サービスではヘッダープロパティを設定できないことに注意してください。

JMS ヘッダープロパティー

表42.4「設定可能な JMS ヘッダープロパティー」に、コンシューマーエンドポイントのリクエストコンテキストを使用して設定できる JMS ヘッダーのプロパティーの一覧を示します。

表42.4 設定可能な JMS ヘッダープロパティー

プロパティー名プロパティーの型セッターメソッド

Correlation ID

string

setJMSCorralationID()

Delivery Mode

int

setJMSDeliveryMode()

Priority

int

setJMSPriority()

Time To Live

long

setTimeToLive()

これらのプロパティーを設定するには、以下を行います。

  1. org.apache.cxf.transports.jms.context.JMSMessageHeadersType オブジェクトを作成します。
  2. 表42.4「設定可能な JMS ヘッダープロパティー」に記載されている適切なセッターメソッドを使用して、設定する値を反映させます。
  3. 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 ヘッダーに追加するには、以下を行います。

  1. JMSPropertyType オブジェクトを作成します。
  2. setName() を使用して、プロパティーの name フィールドを設定します。
  3. setValue() を使用して、プロパティーの value フィールドを設定します。
  4. JMSMessageHeadersType.getProperty().add(JMSPropertyType) を使用して、JMS メッセージヘッダーにプロパティーを追加します。
  5. すべてのプロパティーがメッセージヘッダーに追加されるまで、この手順を繰り返します。

クライアント受信タイムアウト

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 を取得する。

InvocationHandlerBindingProvider であるかどうかを確認する。

返された InvocationHandler オブジェクトを BindingProvider オブジェクトにキャストし、リクエストコンテキストを取得する。

リクエストコンテキストを取得する。

JMSMessageHeadersType オブジェクトを作成し、新しいメッセージヘッダーの値を保持する。

相関 ID を設定する。

Expiration プロパティーを 60 分に設定する。

新しい JMSPropertyType オブジェクトを作成する。

オプションプロパティーの値を設定する。

オプションプロパティーをメッセージヘッダーに追加する。

JMS メッセージヘッダーの値をリクエストコンテキストに設定する。

クライアントの受信タイムアウトプロパティーを 1 秒に設定する。