Начиная с версии 2.5, Spring также обеспечивает поддержку контейнера MessageListener
на базе JCA. JmsMessageEndpointManager
предпринимает попытки автоматического определения имени класса ActivationSpec
из имени класса ResourceAdapter
поставщика. Поэтому, как правило, можно указать общий JmsActivationSpecConfig
из Spring, как показано в следующем примере:
<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>
Как вариант, можно установить JmsMessageEndpointManager
с заданным объектом ActivationSpec
. Объект ActivationSpec
также можно получить из поискового запроса через JNDI (с помощью <jee:jndi-lookup>
). В следующем примере показано, как это сделать:
<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="javax.jms.Queue"/>
</bean>
</property>
<property name="messageListener" ref="myMessageListener"/>
</bean>
Используя 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
может также указывать на специфический для окружения пул потоков – обычно через свойство asyncTaskExecutor
экземпляра SimpleTaskWorkManager
. Рассмотрите возможность определения общего пула потоков для всех экземпляров ResourceAdapter
, если используется несколько адаптеров.
В некоторых окружениях (например, версия WebLogic 9 или выше) можно вместо этого получить весь объект ResourceAdapter
из JNDI (используя <jee:jndi-lookup>
). Слушатели сообщений на базе Spring могут затем взаимодействовать с размещенными на сервере ResourceAdapter
, которые также используют встроенный WorkManager
сервера.
Более подробную информацию смотрите в javadoc по JmsMessageEndpointManager
, JmsActivationSpecConfig
и ResourceAdapterFactoryBean
.
Spring также предусматривает типизированный диспетчер конечных точек сообщений JCA, который не привязан к JMS: org.springframework.jca.endpoint.GenericMessageEndpointManager
. Этот компонент позволяет использовать любой тип слушателя сообщений (например, MessageListener
из JMS) и любой специфический для поставщика объект ActivationSpec
. Обратитесь к документации поставщика JCA, чтобы узнать о реальных возможностях вашего коннектора, а также ознакомьтесь с javadoc по GenericMessageEndpointManager
для получения подробной информации о конфигурации, специфичной для Spring.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ