您好,我在应用程序日志中收到以下异常堆栈跟踪。
<p></p>
<p>20/09/2013 22.26.49 - Caught exception in Exception Strategy: Connection and domain type do not match
java.lang.IllegalArgumentException: Connection and domain type do not match
at org.mule.transport.jms.Jms102bSupport.createSession(Jms102bSupport.java:108)
at org.mule.transport.jms.JmsConnector.getSession(JmsConnector.java:579)
at org.mule.transport.jms.JmsConnector.getSession(JmsConnector.java:558)
at org.mule.transport.jms.JmsMessageDispatcher.dispatchMessage(JmsMessageDispatcher.java:141)
at org.mule.transport.jms.JmsMessageDispatcher.doDispatch(JmsMessageDispatcher.java:73)
at org.mule.transport.AbstractMessageDispatcher$Worker.run(AbstractMessageDispatcher.java:262)
at org.mule.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy.rejectedExecution(ThreadPoolExecutor.java:1895)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:765)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1288)
at org.mule.work.ScheduleWorkExecutor.doExecute(ScheduleWorkExecutor.java:41)</p>
<p></p>
我不太明白它的实际含义,
有人可以解释一下连接和域类型不匹配是什么意思
以及可能发生这种情况的示例场景。
数据是使用配置的 mule 出站发送出去的
<multicasting-router>
<jms:outbound-endpoint topic="SAMPLEMESSAGES" transformer-refs="DomToXml ObjectToJms" connector-ref="jmsConnector" />
</multicasting-router>
连接器配置可以找到here由于某种原因无法在此处粘贴 xml
就像 archer 提到的,我确实查看了 activeMQ 源代码,只是将其粘贴到此处
@Override
public Session createSession(Connection connection, boolean topic, boolean transacted,
int ackMode, boolean noLocal) throws JMSException
{
if (connection == null)
{
throw new IllegalArgumentException("Connection is null");
}
if (topic && connection instanceof TopicConnection)
{
return ((TopicConnection) connection).createTopicSession(noLocal, ackMode);
}
else if (connection instanceof QueueConnection)
{
// for transacted sessions the ackMode is always ignored, but
// set it for readability (SESSION_TRANSACTION is recommented
// for this case).
return ((QueueConnection) connection).createQueueSession(
transacted, (transacted ? Session.SESSION_TRANSACTED : ackMode));
}
else
{
throw new IllegalArgumentException("Connection and domain type do not match, connection is of type " + connection.getClass().getName());
}
}
我想了解在什么情况下传入的客户端连接不能是 topicConnection 或queueConnection ,我可以编写哪些客户端代码来导致异常发生
谢谢
最佳答案
您没有指定在 ActiveMQ 连接器中使用的 JMS 版本,因此 Mule 默认情况下使用旧的且已弃用的规范版本 1.0.2b。
将您的连接器配置为使用 1.1,然后查看问题是否仍然存在。此外,如果您指定代理 URL,则无需提供连接工厂。
所以尝试:
<jms:activemq-connector name="jmsConnector" specification="1.1"
brokerURL="tcp://10.209.130.10:61616">
<spring:property name="retryPolicyTemplate" ref="ThreadingPolicyTemplate" />
</jms:activemq-connector>
关于java - ActiveMQ异常连接和域类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18931812/