В моем проекте Spring у меня есть прослушиватель сообщений JMS, которым управляет spring:
<bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory" p:brokerURL="tcp://localhost:61616"/>
<bean id="simpleExampleListener" class="my.package.ExampleListener" />
<jms:listener-container container-type="default" connection-factory="jmsFactory" acknowledge="auto" concurrency="1-3">
<jms:listener destination="TEST.FOO" ref="simpleExampleListener" method="onMessage"/>
</jms:listener-container>
В одном конкретном сообщении мне нужно вызвать контроллер Spring MVC, который находится в области запроса (на самом деле цель состоит в том, чтобы вызвать службу, которая также находится в области запроса и вызывается контроллером). Поэтому я не могу сделать это напрямую из слушателя, так как Spring управляет ими по мере необходимости, и они не привязаны к области запроса (из-за этого я не могу получить доступ к контроллеру через @Autowire
или ApplicationContext
). Одним из решений может быть HTTP-вызов с Rest Template для URL-адреса, сопоставленного моим контроллером. Но, я думаю, это своего рода накладные расходы, так что, может быть, есть какой-то другой способ избежать накладных расходов протокола HTTP и сделать вызов Controller в рамках Spring MVC?
@Scope("request")
, поэтому я не могу получить к нему доступ из моего Listener... :) - person Laimoncijus   schedule 11.05.2012