JMS 名前空間のサポート

Spring は、JMS 構成を簡素化するための XML 名前空間を提供します。JMS 名前空間要素を使用するには、次の例に示すように、JMS スキーマを参照する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jms="http://www.springframework.org/schema/jms" (1)
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans
		https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/jms
		https://www.springframework.org/schema/jms/spring-jms.xsd">

	<!-- bean definitions here -->

</beans>
1JMS スキーマの参照。

名前空間は、<annotation-driven/><listener-container/><jca-listener-container/> という 3 つのトップレベル要素で構成されます。<annotation-driven/> により、アノテーション駆動型のリスナーエンドポイントの使用が可能になります。<listener-container/> および <jca-listener-container/> は共有リスナーコンテナー構成を定義し、<listener/> 子要素を含めることができます。次の例は、2 つのリスナーの基本構成を示しています。

<jms:listener-container>

	<jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/>

	<jms:listener destination="queue.confirmations" ref="confirmationLogger" method="log"/>

</jms:listener-container>

上記の例は、MessageListenerAdapter を使用するに示すように、2 つの異なるリスナーコンテナー Bean 定義と 2 つの異なる MessageListenerAdapter Bean 定義を作成することと同等です。前の例に示した属性に加えて、listener 要素にはいくつかのオプションのものを含めることができます。次の表に、使用可能なすべての属性を示します。

表 1: JMS <listener> 要素の属性
属性 説明

id

ホスティングリスナーコンテナーの Bean 名。指定しない場合、Bean 名が自動的に生成されます。

destination (required)

The destination name for this listener, resolved through the DestinationResolver strategy.

ref (required)

The bean name of the handler object.

method

呼び出すハンドラーメソッドの名前。ref 属性が MessageListener または Spring SessionAwareMessageListener を指している場合、この属性は省略できます。

response-destination

レスポンスメッセージを送信するデフォルトのレスポンス宛先の名前。これは、JMSReplyTo フィールドを含まないリクエストメッセージの場合に適用されます。この宛先の型は、リスナーコンテナーの response-destination-type 属性によって決定されます。これは、各結果オブジェクトがレスポンスメッセージに変換される戻り値を持つリスナーメソッドにのみ適用されることに注意してください。

subscription

永続サブスクリプションの名前(ある場合)。

selector

このリスナーのオプションのメッセージセレクター。

concurrency

このリスナーに対して開始する同時セッションまたはコンシューマーの数。この値は、最大数を示す単純な数値(たとえば、5)、下限と上限を示す範囲(たとえば、3-5)のいずれかです。指定された最小値はヒントにすぎず、実行時に無視される場合があることに注意してください。デフォルトは、コンテナーによって提供される値です。

<listener-container/> 要素は、いくつかのオプション属性も受け入れます。これにより、さまざまな戦略(taskExecutor や destinationResolver など)のカスタマイズ、および基本的な JMS 設定とリソース参照が可能になります。これらの属性を使用することにより、名前空間の利便性を活用しながら、高度にカスタマイズされたリスナーコンテナーを定義できます。

次の例に示すように、Bean の id を指定して factory-id 属性を介して公開することにより、そのような設定を JmsListenerContainerFactory として自動的に公開できます。

<jms:listener-container connection-factory="myConnectionFactory"
		task-executor="myTaskExecutor"
		destination-resolver="myDestinationResolver"
		transaction-manager="myTransactionManager"
		concurrency="10">

	<jms:listener destination="queue.orders" ref="orderService" method="placeOrder"/>

	<jms:listener destination="queue.confirmations" ref="confirmationLogger" method="log"/>

</jms:listener-container>

次の表に、使用可能なすべての属性を示します。個々のプロパティの詳細については、AbstractMessageListenerContainer (Javadoc) のクラスレベルの javadoc およびその具象サブクラスを参照してください。javadoc では、トランザクションの選択とメッセージの再配信シナリオについても説明しています。

表 2: JMS <listener-container> 要素の属性
属性 説明

container-type

このリスナーコンテナーの型。使用可能なオプションは defaultsimpledefault102 または simple102 です(デフォルトのオプションは default です)。

container-class

完全修飾クラス名としてのカスタムリスナーコンテナー実装クラス。デフォルトは、container-type 属性に応じて、Spring の標準 DefaultMessageListenerContainer または SimpleMessageListenerContainer です。

factory-id

指定された id を持つ JmsListenerContainerFactory としてこの要素で定義された設定を公開し、他のエンドポイントで再利用できるようにします。

connection-factory

JMS ConnectionFactory Bean への参照(デフォルトの Bean 名は connectionFactory です)。

task-executor

JMS リスナー呼び出し側の Spring TaskExecutor への参照。

destination-resolver

JMS Destination インスタンスを解決するための DestinationResolver 戦略への参照。

message-converter

JMS メッセージをリスナーメソッドの引数に変換するための MessageConverter 戦略への参照。デフォルトは SimpleMessageConverter です。

error-handler

MessageListener の実行中に発生する可能性のあるキャッチされない例外を処理するための ErrorHandler 戦略への参照。

destination-type

このリスナーの JMS 宛先型: queuetopicdurableTopicsharedTopic、または sharedDurableTopic。これにより、コンテナーの pubSubDomainsubscriptionDurablesubscriptionShared プロパティが有効になる可能性があります。デフォルトは queue です(これらの 3 つのプロパティを無効にします)。

response-destination-type

レスポンスの JMS 宛先型: queue または topic。デフォルトは、destination-type 属性の値です。

client-id

このリスナーコンテナーの JMS クライアント ID。永続サブスクリプションを使用する場合は、指定する必要があります。

cache

JMS リソースのキャッシュレベル: noneconnectionsessionconsumer、または auto。デフォルト(auto)では、外部トランザクションマネージャーが指定されていない限り、キャッシュレベルは事実上 consumer です。この場合、効果的なデフォルトは none になります(Jakarta EE スタイルのトランザクション管理を想定しています。特定の ConnectionFactory は XA 対応です)。プール)。

acknowledge

ネイティブ JMS 確認モード: autoclientdups-ok または transactedtransacted の値は、ローカルに処理された Session をアクティブにします。別の方法として、後の表で説明する transaction-manager 属性を指定できます。デフォルトは auto です。

transaction-manager

外部 PlatformTransactionManager (通常は Spring の JtaTransactionManager などの XA ベースのトランザクションコーディネーター)への参照。指定しない場合、ネイティブの確認応答が使用されます(acknowledge 属性を参照)。

concurrency

リスナーごとに開始する同時セッションまたはコンシューマーの数。最大数を示す単純な数値(たとえば、5)、下限と上限を示す範囲(たとえば、3-5)のいずれかです。指定された最小値は単なるヒントであり、実行時に無視される場合があることに注意してください。デフォルトは 1 です。トピックリスナーの場合、またはキューの順序が重要な場合は、同時実行性を 1 に制限する必要があります。一般的なキュー用に上げることを検討してください。

prefetch

単一セッションにロードするメッセージの最大数。この数を増やすと、同時コンシューマーが枯渇する可能性があることに注意してください。

receive-timeout

受信呼び出しに使用するタイムアウト(ミリ秒)。デフォルトは 1000 (1 秒)です。-1 はタイムアウトがないことを示します。

back-off

回復試行の間隔を計算するために使用する BackOff インスタンスを指定します。BackOffExecution 実装が BackOffExecution#STOP を返す場合、リスナーコンテナーはそれ以上回復を試みません。このプロパティが設定されている場合、recovery-interval 値は無視されます。デフォルトは、間隔が 5000 ミリ秒(つまり、5 秒)の FixedBackOff です。

recovery-interval

回復試行の間隔をミリ秒単位で指定します。指定した間隔で FixedBackOff を作成する便利な方法を提供します。より多くの回復オプションについては、代わりに BackOff インスタンスを指定することを検討してください。デフォルトは 5000 ミリ秒(つまり、5 秒)です。

phase

このコンテナーが開始および停止するライフサイクルフェーズ。値が低いほど、このコンテナーは早く起動し、遅く停止します。デフォルトは Integer.MAX_VALUE です。これは、コンテナーが可能な限り遅く起動し、できるだけ早く停止することを意味します。

次の例に示すように、jms スキーマサポートを使用した JCA ベースのリスナーコンテナーの構成は非常に似ています。

<jms:jca-listener-container resource-adapter="myResourceAdapter"
		destination-resolver="myDestinationResolver"
		transaction-manager="myTransactionManager"
		concurrency="10">

	<jms:listener destination="queue.orders" ref="myMessageListener"/>

</jms:jca-listener-container>

次の表は、JCA バリアントで使用可能な構成オプションを示しています。

表 3: JMS <jca-listener-container/> 要素の属性
属性 説明

factory-id

指定された id を持つ JmsListenerContainerFactory としてこの要素で定義された設定を公開し、他のエンドポイントで再利用できるようにします。

resource-adapter

JCA ResourceAdapter Bean への参照(デフォルトの Bean 名は resourceAdapter です)。

activation-spec-factory

JmsActivationSpecFactory への参照。デフォルトでは、JMS プロバイダーとその ActivationSpec クラスを自動検出します(DefaultJmsActivationSpecFactory (Javadoc) を参照)。

destination-resolver

JMS Destinations を解決するための DestinationResolver 戦略への参照。

message-converter

JMS メッセージをリスナーメソッドの引数に変換するための MessageConverter 戦略への参照。デフォルトは SimpleMessageConverter です。

destination-type

このリスナーの JMS 宛先型: queuetopicdurableTopicsharedTopic。または sharedDurableTopic。これにより、コンテナーの pubSubDomainsubscriptionDurablesubscriptionShared プロパティが有効になる可能性があります。デフォルトは queue です(これらの 3 つのプロパティを無効にします)。

response-destination-type

レスポンスの JMS 宛先型: queue または topic。デフォルトは、destination-type 属性の値です。

client-id

このリスナーコンテナーの JMS クライアント ID。永続サブスクリプションを使用する場合は指定する必要があります。

acknowledge

ネイティブ JMS 確認モード: autoclientdups-ok または transactedtransacted の値は、ローカルに処理された Session をアクティブにします。別の方法として、後で説明する transaction-manager 属性を指定できます。デフォルトは auto です。

transaction-manager

受信メッセージごとに XA トランザクションを開始するための Spring JtaTransactionManager または jakarta.transaction.TransactionManager への参照。指定しない場合、ネイティブの確認応答が使用されます(acknowledge 属性を参照)。

concurrency

リスナーごとに開始する同時セッションまたはコンシューマーの数。最大数を示す単純な数値(たとえば 5)、または下限と上限を示す範囲(たとえば 3-5)のいずれかです。指定された最小値は単なるヒントであり、JCA リスナーコンテナーを使用する場合、実行時に通常無視されることに注意してください。デフォルトは 1 です。

prefetch

単一セッションにロードするメッセージの最大数。この数を増やすと、同時コンシューマーが枯渇する可能性があることに注意してください。