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

概要

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

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

JMS ヘッダーのプロパティー

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

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

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

相関 ID

string

setJMSCorralationID()

配信モード

int

setJMSDeliveryMode()

優先度

int

setJMSPriority()

有効期間

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 を設定します。

エクスパレーションプロパティーを 60 分に設定します。

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

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

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

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

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