14.2. JMS 設定 Bean の使用

概要

JMS 設定を簡素化し、より強力にするために、Apache CXF は単一の JMS 設定 Bean を使用して JMS エンドポイントを設定します。Bean は org.apache.cxf.transport.jms.JMSConfiguration クラスによって実装されます。エンドポイントを直接設定したり、JMS コンジットと宛先を設定するために使用できます。

設定名前空間

JMS 設定 Bean は、Spring p-namespace を使用して、設定を可能な限り単純にします。この名前空間を使用するには、例14.1「Spring p-namespace の宣言」 のように設定のルート要素で宣言する必要があります。

例14.1 Spring p-namespace の宣言

<beans ...
  xmlns:p="http://www.springframework.org/schema/p"
  ... >
  ...
</beans>

設定の指定

クラス org.apache.cxf.transport.jms.JMSConfiguration の Bean を定義して JMS 設定を指定します。Bean のプロパティーによってトランスポートの設定が提供されます。

重要

CXF 3.0 では、JMS トランスポートは Spring JMS に依存しなくなったため、SpringJMS 関連のオプションの一部が削除されました。

表14.1「一般的な JMS 設定プロパティー」 プロバイダーとコンシューマーの両方に共通するプロパティーを一覧表示します。

表14.1 一般的な JMS 設定プロパティー

プロパティーデフォルト説明

connectionFactory

 

[必須] JMSConnectionFactory を定義する Bean への参照を指定します。

wrapInSingleConnectionFactory

true [pre v3.0]

CXF3.0 で削除

pre CXF 3.0 では、ConnectionFactory を Spring SingleConnectionFactory でラップするかどうかを指定します。

JMS トランスポートのパフォーマンスを向上するため、接続をプールしない ConnectionFactory を使用する場合は、このプロパティーを有効にします。これは、JMS トランスポートが各メッセージの新しい接続を作成し、SingleConnectionFactory が接続のキャッシュに必要なため、再利用できるためです。

reconnectOnException

false

CXF 3.0 で非推奨 CXF は、例外が発生したときに常に再接続します。

以前の CXF3.0 例外が発生したときに新しい接続を作成するかどうかを指定します。

ConnectionFactory を Spring SingleConnectionFactory でラップする場合:

  • true - 例外で、新しいコネクションを作成します。

    PooledConnectionFactory を使用する場合は、このオプションを有効にしないでください。このオプションは、プールされた接続のみを返し、再接続は返しません。

  • false - 例外で、再接続を試みないでください。

targetDestination

 

宛先の JNDI 名またはプロバイダー固有の名前を指定します。

replyDestination

 

応答の送信先となる JMS 宛先の JMS 名を指定します。このプロパティーでは、応答にユーザー定義の宛先を使用できます。詳細は 「名前付き応答宛先の使用」 を参照してください。

destinationResolver

DynamicDestinationResolver

Spring DestinationResolver への参照を指定します。

このプロパティーにより、宛先名を JMS 宛先に解決する方法を定義できます。有効な値は以下のとおりです。

  • DynamicDestinationResolver - JMS プロバイダーの機能を使用して宛先名を解決します。
  • JndiDestinationResolver - JNDI を使用して宛先名を解決します。

transactionManager

 

Spring トランザクションマネージャーへの参照を指定します。これにより、サービスは JTA トランザクションに参加できます。

taskExecutor

SimpleAsyncTaskExecutor

CXF3.0 で削除

CXF3.0 より前 の SpringTaskExecutor への参照を指定します。これは、受信メッセージの処理方法を決定するためにリスナーで使用されます。

useJms11

false

CXF3.0 で削除 CXF3.0 は JMS1.1 機能のみをサポートします。

CXF 3.0 より前 JMS 1.1 機能が使用されるかどうかを指定します。有効な値は以下のとおりです。

  • true - JMS 1.1 機能
  • false - JMS 1.0.2 機能

messageIdEnabled

true

CXF3.0 で削除

CXF 3.0 より前は、JMS トランスポートが JMS ブローカーにメッセージ ID を提供するかどうかを指定します。有効な値は以下のとおりです。

  • true - ブローカーはメッセージ ID を提供する必要があります。
  • false - ブローカーはメッセージ ID を提供する必要がありません。

    この場合、エンドポイントはメッセージプロデューサーの setDisableMessageID() メソッドを true の値で呼び出します。その後、ブローカーはメッセージ ID を生成したりエンドポイントのメッセージに追加したりする必要がないヒントを提供します。ブローカーはヒントを受け入れるか、無視します。

messageTimestampEnabled

true

CXF3.0 で削除

CXF 3.0 JMS トランスポートが JMS ブローカーにメッセージタイムスタンプを提供するかどうかを指定します。有効な値は以下のとおりです。

  • true - ブローカーはメッセージのタイムスタンプを提供する必要があります。
  • false - ブローカーはメッセージのタイムスタンプを提供する必要はありません。

    この場合、エンドポイントはメッセージプロデューサーの setDisableMessageTimestamp() メソッドを true の値で呼び出します。その後、ブローカーはタイムスタンプを生成したり、エンドポイントのメッセージに追加したりする必要がないヒントを提供します。ブローカーはヒントを受け入れるか、無視します。

cacheLevel

-1 (機能の無効化)

CXF3.0 で削除

CXF 3.0 より前 JMS リスナーコンテナーが適用されるキャッシングのレベルを指定します。有効な値は以下のとおりです。

  • 0 - CACHE_NONE
  • 1 - CACHE_CONNECTION
  • 2 - CACHE_SESSION
  • 3 - CACHE_CONSUMER
  • 4 — CACHE_AUTO

詳細は、ClassDefaultMessageListenerContainer を参照してください。

pubSubNoLocal

false

トピックの使用時に独自のメッセージを受信するかどうかを指定します。

  • true - 独自のメッセージを受け取りません。
  • false - 独自のメッセージを受け取ります。

receiveTimeout

60000

応答メッセージを待機する時間 (ミリ秒単位) を指定します。

explicitQosEnabled

false

QoS 設定 (優先度、永続性、ライブ時間など) が各メッセージに対して明示的に設定するか (true)、デフォルト値 (false) を使用するかどうかを指定します。

deliveryMode

2

メッセージが永続化されるかどうかを指定します。有効な値は以下のとおりです。

  • 1 (NON_PERSISTENT) - メッセージはメモリーのみを保持します。
  • 2 (PERSISTENT) - メッセージははディスクに永続化されます。

priority

4

メッセージの優先度を指定します。JMS 優先度の値の範囲は、0 (最低) から 9 (最高) までです。詳細は、JMS プロバイダーのドキュメントを参照してください。

timeToLive

0 (無期限)

送信されたメッセージが破棄されるまでの時間をミリ秒単位で指定します。

sessionTransacted

false

JMS トランザクションが使用されるかどうかを指定します。

concurrentConsumers

1

CXF3.0 で削除

CXF 3.0 より前 リスナーの同時コンシューマーの最小数を指定します。

maxConcurrentConsumers

1

CXF3.0 で削除

CXF 3.0 より前 リスナーの同時コンシューマーの最大数を指定します。

messageSelector

 

受信メッセージのフィルターに使用するセレクターの文字列値を指定します。このプロパティーにより、複数の接続でキューを共有できます。メッセージセレクターを指定するために使用される構文の詳細については、JMS1.1 仕様 を参照してください。

subscriptionDurable

false

サーバーが永続サブスクリプションを使用するかどうかを指定します。

durableSubscriptionName

 

永続サブスクリプションの登録に使用される名前 (文字列) を指定します。

messageType

text

メッセージデータを JMS メッセージとしてパッケージ化する方法を指定します。有効な値は以下のとおりです。

  • text - データが TextMessage としてパッケージ化されることを指定します。
  • byte AsyncResult-AsyncResultspecifies は、データがバイトの配列 (byte[]) としてパッケージ化されるように指定します。
  • binary AsyncResult-AsyncResultspecifies は、データが ByteMessage としてパッケージ化されることを示します。

pubSubDomain

false

ターゲットの宛先がトピックであるかキューであるかを指定します。有効な値は以下のとおりです。

  • true - トピック
  • false - キュー

jmsProviderTibcoEms

false

JMS プロバイダーが TibcoEMS であるかどうかを指定します。

true に設定すると、セキュリティーコンテキストのプリンシパルが JMS_TIBCO_SENDER ヘッダーから入力されます。

useMessageIDAsCorrelationID

false

CXF3.0 で削除

JMS がメッセージ ID を使用してメッセージを関連付けるかどうかを指定します。

true に設定すると、クライアントは生成された相関 ID を設定します。

maxSuspendedContinuations

-1 (機能の無効化)

CXF 3.0 JMS 宛先が持つ可能性のある一時停止継続の最大数を指定します。現在の数が指定された最大数を超えると、JMSListenerContainer は停止します。

reconnectPercentOfMax

70

CXF 3.0 は、maxSuspendedContinuations を超過するために JMSListenerContainer を再起動するタイミングを指定します。

リスナーコンテナーは、現在の一時停止された継続回数が (maxSuspendedContinuations * reconnectPercentOfMax/100) の値を下回ると再起動されます。

例14.2「JMS 設定 Bean」 で示されているように、Bean のプロパティーは bean 要素の属性として指定されます。これらはすべて Spring p namespace で宣言されます。

例14.2 JMS 設定 Bean

<bean id="jmsConfig"
      class="org.apache.cxf.transport.jms.JMSConfiguration"
      p:connectionFactory="jmsConnectionFactory"
      p:targetDestination="dynamicQueues/greeter.request.queue"
      p:pubSubDomain="false" />

設定をエンドポイントに適用する

JMSConfiguration Bean は、Apache CXF 機能メカニズムを使用してサーバーとクライアントエンドポイントの両方に直接適用できます。これを行うには、以下を行います。

  1. エンドポイントの address 属性を jms:// に設定します。
  2. jaxws:feature 要素をエンドポイントの設定に追加します。
  3. org.apache.cxf.transport.jms.JMSConfigFeature タイプの Bean を機能に追加します。
  4. bean 要素の p:jmsConfig-ref 属性を JMSConfiguration Bean の ID に設定します。

例14.3「JAX-WS クライアントに JMS 設定を追加」 は、例14.2「JMS 設定 Bean」 からの JMS 設定を使用する JAX-WS クライアントを示しています。

例14.3 JAX-WS クライアントに JMS 設定を追加

<jaxws:client id="CustomerService"
              xmlns:customer="http://customerservice.example.com/"
              serviceName="customer:CustomerServiceService"
              endpointName="customer:CustomerServiceEndpoint"
              address="jms://"
              serviceClass="com.example.customerservice.CustomerService">
  <jaxws:features>
    <bean xmlns="http://www.springframework.org/schema/beans"
          class="org.apache.cxf.transport.jms.JMSConfigFeature"
          p:jmsConfig-ref="jmsConfig"/>
  </jaxws:features>
</jaxws:client>

設定のトランスポートへの適用

JMSConfiguration Bean は、jmsConfig-ref 要素を使用して JMS コンジェクトおよび JMS 宛先に適用できます。jms:jmsConfig-ref 要素の値は JMSConfiguration Bean の ID です。

例14.4「JMS コンジットへの JMS 設定の追加」 は、例14.2「JMS 設定 Bean」 の JMS 設定を使用する JMS 輻輳を示しています。

例14.4 JMS コンジットへの JMS 設定の追加

<jms:conduit name="{http://cxf.apache.org/jms_conf_test}HelloWorldQueueBinMsgPort.jms-conduit">
  ...
  <jms:jmsConfig-ref>jmsConf</jms:jmsConfig-ref>
</jms:conduit>