我正在尝试在战争中的weblogic 10.3上部署Spring 3.0.5 messageListener,并且无法使其正常工作。
我在weblogic上创建了一个简单的jms quque,但看起来weblogic认为我正在尝试连接作为外部客户端,即使一切都是本地的?
[WARN] JMS消息侦听器调用程序的设置失败,目的地为“系统模块!测试队列” - 尝试恢复。原因:[JMSClientExceptions:055142]外部目标,系统模块!测试队列
这是我的春天xml
<!-- connection factory -->
<jee:jndi-lookup id="jmsConnectionFactory" jndi-name="weblogic.jms.ConnectionFactory"
expose-access-context="true" />
<!-- weblogic jms queue -->
<jee:jndi-lookup id="testQueue" jndi-name="jms.testQueue" expose-access-context="true"/>
<!-- my onMessage listener bean -->
<bean id="jobNotificationQueueListener" class="com.xxx.component.jms.JobNotificationQueueListener" />
<!-- spring container -->
<bean id="jobNotificationQueueContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory" />
<property name="destination" ref="testQueue" />
<property name="messageListener" ref="jobNotificationQueueListener" />
<property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE" />
<property name="sessionTransacted" value="true" />
</bean>
之前有人见过这个吗?
答案 0 :(得分:1)
此错误消息并不表示您尝试连接为“外部客户端”。 WebLogic认为您正在尝试连接到外部目标,这是不同的。
您要设置什么类型的队列?有些事要尝试: 1)尝试浏览到目的地的JNDI树以确认其存在并确认类型是否正确 2)确认您已创建JMS服务器并将其定位到相关服务器 3)确认您的队列目标正确
更新:我能够重现并解决此问题。在我的ApplicationContext文件中,我曾经有过这样的配置:
<jee:jndi-lookup id="eventQueue" jndi-name="${jms.event.queue.name}" expose-access-context="true"/>
我把它改为:
<jee:jndi-lookup id="eventQueue" jndi-name="${jms.event.queue.name}"/>
现在工作正常,不会不断抛出错误。
答案 1 :(得分:0)
外部JMS在类路径中需要他们的客户端库(即Websphere MQ需要mq.jar和两个),然后应该配置连接工厂类(否则将使用默认的Weblogic),依此类推。
换句话说,这可能是配置问题,而不是编程。