私のSpringプロジェクトには、Springによって管理されるJMSメッセージリスナーがあります。
<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
)。解決策の1つは、コントローラーによってマップされたRESTテンプレートからURLへのHTTP呼び出しである可能性があります。しかし、私はその種のオーバーヘッドだと思います。それで、HTTPプロトコルのオーバーヘッドを回避し、Spring MVCフレームワーク内でControllerを呼び出す他の方法があるのではないでしょうか?