1

前段时间,我使用 JMS 侦听器(用于接收消息)到标准 web 应用程序中,通常使用 JSF (ICEfaces) 用于 web 应用程序和 spring、activemq 等,用于 JMS 集成。

现在,我正在尝试在 OpenXava 应用程序中做同样的事情。所以,这就是我目前所做的:

  • 我已将 listeners.xml 创建到 WEB-INF(与 web.xml 相同的位置,因为 OpenXava 我无法修改),其中包含以下内容(内容将由 OpenXava 自动添加到 web.xml):

<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 和 activemq jar 放入我的 OpenXava 应用程序的 WEB-INF/Lib 中,并且我在项目的类路径中为每个 jar 添加了引用。

最后,我没有收到任何错误。

所以,毕竟问题是:弹簧上下文没有像应该做的那样被添加到 OpenXava web.xml 中......因为没有创建弹簧上下文,因此永远不会创建 JMS 侦听器。

那么,我在这里缺少什么?... 有一个更好的方法吗?

提前致谢,

4

3 回答 3

0

尝试明确指出 WEB-INF:

<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

官方文档指出将其直接添加到 web.xml。

于 2012-12-17T06:04:19.490 回答
0

好吧,也许这不是我问题的真正答案,但是没有找到为我的 OpenXava 应用程序创建 spring 上下文的方法(此处需要 ActiveMQ 定义和使用 spring 容器的 DI),我决定退出 spring 依赖项并按原样继续使用 ActiveMQ。因此,我继续创建一个 Consumer 类,该类创建与 JMS 代理的连接并使用特定主题来注册和启动我的侦听器,该侦听器准备接收 xml 编组消息并将其解组用于主进程。

由于 OpenXava 的领域驱动设计性质,我尽量不将配置与其他东西混淆。并且看到我无法将 spring 容器配置到我的 OX 应用程序中,那么这种新方法就可以毫不费力地工作。我还在通用(应用程序)控制器中创建了一个新的“启动”操作,它使用单例模式来保持与代理的连接会话以及将等待消息的 JMS 侦听器。

现在,我正在寻找如何将监听器集成到我的 OpenXava 应用程序中以刷新一些特定的瞬态视图的方法,这变得很棘手。但这将是一个新线程。

于 2012-12-17T19:38:40.177 回答
0

我的建议是创建一个非常简单的 OpenXava 项目并按照Spring 集成说明一步一步地进行操作,当它起作用时,您可以针对您的实际项目进行尝试。

但是,您选择不使用 Spring 会更好。

于 2012-12-19T12:53:36.600 回答