通过JmsTemplate向ActivemQ发送消息的setExceptionListener中的错误(作为Jboss-eap的外部代理) [英] Error in setExceptionListener in sending message via JmsTemplate to ActivemQ (as external broker of Jboss-eap)

查看:170
本文介绍了通过JmsTemplate向ActivemQ发送消息的setExceptionListener中的错误(作为Jboss-eap的外部代理)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基于本文,我已将Jboss eap 6.2连接到外部ActivemQ 5.9.0.为了发送/接收消息,我使用了spring-jms 4.1.1中的JmsTemplateDefaultMessageListenerContainer.接收消息运行正常,但是在发送消息时出现此错误:

Based on this article, I've connected Jboss eap 6.2 to an external ActivemQ 5.9.0. For sending/receiving message i'm using JmsTemplate and DefaultMessageListenerContainer in spring-jms 4.1.1. Receiving message is working fine, but in sending message i get this error:

11:33:37,059 ERROR [stderr]  java.lang.reflect.InvocationTargetException
11:33:37,060 ERROR [stderr]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
11:33:37,060 ERROR [stderr]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
11:33:37,060 ERROR [stderr]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
11:33:37,061 ERROR [stderr]     at java.lang.reflect.Method.invoke(Method.java:601)
11:33:37,061 ERROR [stderr]     at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:269)
11:33:37,061 ERROR [stderr]     at core.util.timer.MethodInvocationScheduledJob.run(MethodInvocationScheduledJob.java:19)
11:33:37,061 ERROR [stderr]     at core.util.timer.JobScheduler$ScheduledJobThread.run(JobScheduler.java:132)
11:33:37,062 ERROR [stderr]  Caused by: org.springframework.jms.IllegalStateException: setExceptionListener call not supported on proxy for shared Connection. Set the 'exceptionListener' property on the SingleConnectionFactory instead. Alternatively, activate SingleConnectionFactory's 'reconnectOnException' feature, which will allow for registering further ExceptionListeners to the recovery chain.; nested exception is javax.jms.IllegalStateException: setExceptionListener call not supported on proxy for shared Connection. Set the 'exceptionListener' property on the SingleConnectionFactory instead. Alternatively, activate SingleConnectionFactory's 'reconnectOnException' feature, which will allow for registering further ExceptionListeners to the recovery chain.
11:33:37,062 ERROR [stderr]     at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:279)
11:33:37,062 ERROR [stderr]     at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:168)
11:33:37,063 ERROR [stderr]     at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:469)
11:33:37,063 ERROR [stderr]     at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:59)
11:33:37,063 ERROR [stderr]     at core.security.jms.SecurityMessageSender.sendSecuritySetting(SecurityMessageSender.java:19)
11:33:37,064 ERROR [stderr]     at core.security.synchronizer.SecuritySynchronizer.synchronize(SecuritySynchronizer.java:34)
11:33:37,064 ERROR [stderr]     ... 7 more
11:33:37,064 ERROR [stderr]  Caused by: javax.jms.IllegalStateException: setExceptionListener call not supported on proxy for shared Connection. Set the 'exceptionListener' property on the SingleConnectionFactory instead. Alternatively, activate SingleConnectionFactory's 'reconnectOnException' feature, which will allow for registering further ExceptionListeners to the recovery chain.
11:33:37,065 ERROR [stderr]     at org.springframework.jms.connection.SingleConnectionFactory$SharedConnectionInvocationHandler.invoke(SingleConnectionFactory.java:504)
11:33:37,065 ERROR [stderr]     at $Proxy147.setExceptionListener(Unknown Source)
11:33:37,065 ERROR [stderr]     at org.springframework.jms.connection.SingleConnectionFactory.prepareConnection(SingleConnectionFactory.java:364)
11:33:37,065 ERROR [stderr]     at org.springframework.jms.connection.SingleConnectionFactory.initConnection(SingleConnectionFactory.java:289)
11:33:37,065 ERROR [stderr]     at org.springframework.jms.connection.SingleConnectionFactory.createConnection(SingleConnectionFactory.java:225)
11:33:37,066 ERROR [stderr]     at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:184)
11:33:37,066 ERROR [stderr]     at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:456)
11:33:37,066 ERROR [stderr]     ... 11 more

这是我的spring/jms配置(SingleConnectionFactoryreconnectOnException属性和CachingConnectionFactory已激活):

Here is my spring/jms configurations (reconnectOnException property of SingleConnectionFactory and CachingConnectionFactory is activated):

<bean name="defaultJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="cachingConnectionFactory" />
    <property name="sessionTransacted" value="true" />
</bean>

<bean id="abstractMessageListenerContainer" abstract="true"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="singleConncetionFactory" />
    <property name="concurrentConsumers" value="1" />
    <property name="maxConcurrentConsumers" value="1" />
    <property name="idleConsumerLimit" value="1" />
    <property name="idleTaskExecutionLimit" value="5" />
    <property name="receiveTimeout" value="5000" />
    <property name="recoveryInterval" value="7000" />
    <property name="sessionTransacted" value="true" />
</bean>


<bean id="cachingConnectionFactory"
    class="org.springframework.jms.connection.CachingConnectionFactory">
    <property name="targetConnectionFactory" ref="singleConncetionFactory" />
    <property name="reconnectOnException" value="true" />
    <property name="sessionCacheSize" value="10" />
</bean>

<bean id="singleConncetionFactory"
    class="org.springframework.jms.connection.SingleConnectionFactory">
    <property name="targetConnectionFactory" ref="userCredentialsConnectionFactoryAdapter" />
    <property name="reconnectOnException" value="true" />
</bean>

<bean id="userCredentialsConnectionFactoryAdapter"
    class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
    <property name="targetConnectionFactory" ref="jmsConnectionFactory" />
    <property name="username" value="${jms.connectionfactory.username}" />
    <property name="password" value="${jms.connectionfactory.password}" />
</bean>

<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="${jms.connectionfactory.jndi}" />
    <property name="lookupOnStartup" value="false"/>
    <property name="proxyInterface" value="javax.jms.ConnectionFactory"/>
</bean>

和用于ActivemQ的Jboss resource-adapter(在standalone.xml中):

And Jboss resource-adapter for ActivemQ (in standalone.xml):

<resource-adapter id="activemq-rar.ra">
    <module slot="main" id="org.apache.activemq"/>
    <transaction-support>LocalTransaction</transaction-support>
    <config-property name="ServerUrl">tcp://localhost:61616</config-property>
    <connection-definitions>
        <connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name="java:/activemq/ConnectionFactory"enabled="true" use-java-context="true" pool-name="ActiveMQConnectionFactoryPool">
        </connection-definition>
    </connection-definitions>
</resource-adapter>

更新:

当我在我的defaultJmsTemplate bean中注入singleConnectionFactory而不是cachingConnectionFactory时,错误消失了!

When i inject singleConnectionFactory instead of cachingConnectionFactory in my defaultJmsTemplate bean, the error disappears!!

推荐答案

您的cachingConnectionFactorytargetConnectionFactory不应是另一个SingleConnectionFactory(因为它是一个子类,所以已经是一个)了.

Your cachingConnectionFactory's targetConnectionFactory should not be another SingleConnectionFactory (it's already one because it's a subclass).

相反,将cachingConnectionFactorytargetConnectionFactory设置为userCredentialsConnectionFactoryAdapter.

这篇关于通过JmsTemplate向ActivemQ发送消息的setExceptionListener中的错误(作为Jboss-eap的外部代理)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆