JCA メッセージエンドポイントのサポート
バージョン 2.5 から、Spring は JCA ベースの MessageListener
コンテナーのサポートも提供します。JmsMessageEndpointManager
は、プロバイダーの ResourceAdapter
クラス名から ActivationSpec
クラス名を自動的に決定しようとします。次の例に示すように、通常 Spring の汎用 JmsActivationSpecConfig
を提供することができます。
<bean class="org.springframework.jms.listener.endpoint.JmsMessageEndpointManager">
<property name="resourceAdapter" ref="resourceAdapter"/>
<property name="activationSpecConfig">
<bean class="org.springframework.jms.listener.endpoint.JmsActivationSpecConfig">
<property name="destinationName" value="myQueue"/>
</bean>
</property>
<property name="messageListener" ref="myMessageListener"/>
</bean>
または、特定の ActivationSpec
オブジェクトで JmsMessageEndpointManager
をセットアップできます。ActivationSpec
オブジェクトは、(<jee:jndi-lookup>
を使用して)JNDI ルックアップから取得することもできます。次の例は、その方法を示しています。
<bean class="org.springframework.jms.listener.endpoint.JmsMessageEndpointManager">
<property name="resourceAdapter" ref="resourceAdapter"/>
<property name="activationSpec">
<bean class="org.apache.activemq.ra.ActiveMQActivationSpec">
<property name="destination" value="myQueue"/>
<property name="destinationType" value="jakarta.jms.Queue"/>
</bean>
</property>
<property name="messageListener" ref="myMessageListener"/>
</bean>
Spring の ResourceAdapterFactoryBean
を使用して、次の例に示すように、ターゲット ResourceAdapter
をローカルに構成できます。
<bean id="resourceAdapter" class="org.springframework.jca.support.ResourceAdapterFactoryBean">
<property name="resourceAdapter">
<bean class="org.apache.activemq.ra.ActiveMQResourceAdapter">
<property name="serverUrl" value="tcp://localhost:61616"/>
</bean>
</property>
<property name="workManager">
<bean class="org.springframework.jca.work.SimpleTaskWorkManager"/>
</property>
</bean>
指定された WorkManager
は、通常は SimpleTaskWorkManager
インスタンスの asyncTaskExecutor
プロパティを介して、環境固有のスレッドプールを指すこともできます。複数のアダプターを使用する場合は、すべての ResourceAdapter
インスタンスに共有スレッドプールを定義することを検討してください。
一部の環境では、代わりに ( <jee:jndi-lookup>
を使用して) JNDI から ResourceAdapter
オブジェクト全体を取得できます。Spring ベースのメッセージリスナーは、サーバーでホストされる ResourceAdapter
と対話できるようになり、サーバーの組み込み WorkManager
も使用されます。
詳細については、JmsMessageEndpointManager
(Javadoc) 、JmsActivationSpecConfig
(Javadoc) 、ResourceAdapterFactoryBean
(Javadoc) の javadoc を参照してください。
Spring は、JMS に関連付けられていない汎用 JCA メッセージエンドポイントマネージャー org.springframework.jca.endpoint.GenericMessageEndpointManager
も提供します。このコンポーネントを使用すると、任意のメッセージリスナー型(JMS MessageListener
など)および任意のプロバイダー固有の ActivationSpec
オブジェクトを使用できます。コネクターの実際の機能については、JCA プロバイダーのドキュメントを参照してください。また、Spring 固有の構成の詳細については、GenericMessageEndpointManager
javadoc を参照してください。
JCA ベースのメッセージエンドポイント管理は、EJB 2.1 メッセージ駆動型 Bean に非常に似ています。同じ基になるリソースプロバイダー契約を使用します。EJB 2.1 MDB と同様に、Spring コンテキストでも JCA プロバイダーでサポートされている任意のメッセージリスナーインターフェースを使用できます。それでも、Spring は、JMS の明示的な「便利な」サポートを提供します。これは、JMS が JCA エンドポイント管理契約で使用される最も一般的なエンドポイント API であるためです。 |