一段时间以前,我已经与JMS侦听器(用于接收消息)一起进入标准Web应用程序,通常将JSF(ICEfaces)用于Web应用程序,并将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接口,并且具有处理收到的消息的代码。
最后,我没有任何错误。
所以,毕竟问题是:没有像应该那样将spring上下文添加到OpenXava web.xml中,因为未创建spring上下文,因此从不创建JMS侦听器。
所以,我在这里想念的是什么? ...还有更好的方法吗?
谢谢,
但是,您最好选择不使用Spring。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
[Official docs指出不过将此直接添加到web.xml。
由于OpenXava的域驱动设计性质,我试图将配置与其他内容混为一谈。看到我无法将弹簧容器配置到我的OX应用程序中,那么这种新方法就可以轻松完成。我还在通用(应用程序)控制器中创建了一个新的“启动”操作,该操作使用单例模式来保持与正在等待消息的代理和JMS侦听器的连接会话。
现在,我正在寻找一种方法,如何集成该侦听器以将一些特定的瞬态视图刷新到我的OpenXava应用程序中,这变得有些棘手。但这将用于新线程。