前段时间我使用JMS监听器(用于接收消息)到标准的webapps中,通常使用JSF(ICEfaces)作为webapp,使用spring,activemq等,用于JMS集成。
现在,我正在尝试对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>
然后,我创建了我的侦听器类(com.comp.app.listeners.MessageReceiver),它实现了JMS MessageListener接口,并且具有处理收到的消息的代码。
此外,我确实将我的OpenXava应用程序的WEB-INF / Lib放入spring和activemq jar中,并且还在每个jar的项目类路径中添加了引用。
最后,我没有收到任何错误。
因此,在所有问题出现之后:Spring上下文没有被添加到OpenXava web.xml中,因为没有创建Spring上下文,因此永远不会创建JMS侦听器。
那么,我在这里缺少什么? ......有更好的方法吗?
提前致谢,
答案 0 :(得分:0)
尝试明确指出WEB-INF:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
Official docs指出将此直接添加到web.xml中。
答案 1 :(得分:0)
好吧,也许这不是我的问题的真正答案,但是没有找到为我的OpenXava应用程序创建弹簧上下文的方法(这里需要ActiveMQ定义和DI使用弹簧容器),我决定退出Spring依赖并按原样继续使用ActiveMQ。因此,我继续创建一个Consumer类,它创建与JMS代理的连接,并使用特定主题来注册和启动我的侦听器,该侦听器准备接收xml编组的消息并将其解组为主进程。
由于OpenXava的Domain Driven设计性质,我试图不用其他东西弄乱配置。看到我无法将弹簧容器配置到我的OX应用程序中,这种新方法无需花费太多精力。我还在通用(应用程序)控制器中创建了一个新的“on-start”操作,它使用单例模式来保持连接与代理的会话以及将等待消息的JMS侦听器。
现在,我正在研究如何集成该监听器以将一些特定的瞬态视图刷新到我的OpenXava应用程序中,这将变得棘手。但这将是一个新的主题。
此致
PS:如果有人想看到代码只是发邮件给我并要求它。答案 2 :(得分:0)
我的建议是创建一个非常简单的OpenXava项目并逐步跟随Spring integration instruction,当它工作时,您可以针对您的真实项目进行尝试。
但是,您选择不使用Spring会更好。