如何使用activemq实施JMS侦听器并跳入我的OpenXava应用程序中

问题描述 投票:1回答:3

一段时间以前,我已经与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 jars放入了OpenXava应用程序的WEB-INF / Lib中,并且我还在每个项目的jar文件的类路径中添加了引用。

最后,我没有任何错误。

所以,毕竟问题是:没有像应该那样将spring上下文添加到OpenXava web.xml中,因为未创建spring上下文,因此从不创建JMS侦听器。

所以,我在这里想念的是什么? ...还有更好的方法吗?

谢谢,

spring jms activemq openxava
3个回答
0
投票
我的建议是创建一个非常简单的OpenXava项目并逐步遵循Spring integration instruction,当它起作用时,您可以在实际项目中尝试它。

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


0
投票
尝试明确指出WEB-INF:

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

[Official docs指出不过将此直接添加到web.xml。

0
投票
[嗯,也许这不是我问题的真正答案,但是还没有找到为我的OpenXava应用程序创建spring上下文的方法(这里需要使用spring容器的ActiveMQ定义和DI),所以我决定退出弹簧依赖性,并按原样继续使用ActiveMQ。因此,我着手创建一个Consumer类,该类创建到JMS代理的连接,并使用特定主题注册并启动我的侦听器,该侦听器准备接收xml编组的消息并将其解编为主要过程。

由于OpenXava的域驱动设计性质,我试图将配置与其他内容混为一谈。看到我无法将弹簧容器配置到我的OX应用程序中,那么这种新方法就可以轻松完成。我还在通用(应用程序)控制器中创建了一个新的“启动”操作,该操作使用单例模式来保持与正在等待消息的代理和JMS侦听器的连接会话。

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

© www.soinside.com 2019 - 2024. All rights reserved.