しばらく前に、JMS リスナー (メッセージを受信するため) を標準の webapps に使用しました。通常は、webapp には JSF (ICEfaces) を使用し、JMS 統合には spring、activemq などを使用します。
今、私は OpenXava アプリケーションに同じことをしようとしています。だから、これは私が現時点で行ったことです:
- このコンテンツ (OpenXava によって web.xml に自動追加されるコンテンツ) を使用して、listeners.xml を WEB-INF (web.xml と同じ場所、OpenXava のために変更できません) に作成しました。
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>
次の内容で、applicationContext.xml を作成しました (OpenXava アプリケーションの src フォルダーと WEB-INF に配置することをテストしました)。
<!-- Create the topic to connect to --> <bean id="TTCTopic" class="org.apache.activemq.command.ActiveMQTopic"> <property name="physicalName" value="com.comp.app.message.tags"/> </bean> <!-- JMS Connection Factory --> <bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://127.0.0.1:1100"/> </bean> <!-- Spring Helper to listen to a JMS Destination --> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="TTCTopic" /> <property name="messageListener" ref="messageReceiver" /> </bean>
次に、JMS MessageListener インターフェイスを実装し、受信したメッセージを処理するコードを含むリスナー クラス (com.comp.app.listeners.MessageReceiver) を作成しました。
また、OpenXava アプリケーションの WEB-INF/Lib に spring および activemq jar を配置し、各 jar のプロジェクトのクラスパスに参照を追加しました。
最後に、エラーは発生しません。
結局、問題は次のとおりです。Springコンテキストが想定どおりにOpenXava web.xmlに追加されていません...Springコンテキストが作成されていないため、JMSリスナーが作成されません。
それで、私はここで何が欠けていますか?...これを行うより良い方法はありますか?
前もって感謝します、