WSO2 ESB 5.0.0+ActiveMQ 5.10.0

WSO2 ESB 5.0.0+ActiveMQ 5.10.0,wso2,activemq,wso2esb,Wso2,Activemq,Wso2esb,我正在尝试在WSO2 ESB 5.0.0中使用ActiveMQ配置JMS传输。我按照中的说明做了,但没有成功 我的ActiveMQ版本是5.10 当我通过JMS端点发送消息时,会出现以下错误: TID: [-1234] [] [2016-10-11 17:42:15,618] ERROR {org.apache.synapse.core.axis2.Axis2Sender} - Unexpected error during sending message out {org.apache.syn

我正在尝试在WSO2 ESB 5.0.0中使用ActiveMQ配置JMS传输。我按照中的说明做了,但没有成功

我的ActiveMQ版本是5.10

当我通过JMS端点发送消息时,会出现以下错误:

TID: [-1234] [] [2016-10-11 17:42:15,618] ERROR {org.apache.synapse.core.axis2.Axis2Sender} - Unexpected error during sending message out {org.apache.synapse.core.axis2.Axis2Sender}
    java.lang.ClassCastException: org.apache.activemq.ActiveMQConnectionFactory cannot be cast to javax.jms.XAConnectionFactory
    at org.apache.axis2.transport.jms.JMSOutTransportInfo.createJMSSender(JMSOutTransportInfo.java:377)
    at org.apache.axis2.transport.jms.JMSSender.sendMessage(JMSSender.java:135)
    at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)
    at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
    at org.apache.axis2.description.OutOnlyAxisOperationClient.executeImpl(OutOnlyAxisOperation.java:297)
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
    at org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:581)
    at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:78)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:512)
    at org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:382)
    at org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65)
    at org.apache.synapse.endpoints.TemplateEndpoint.sendMessage(TemplateEndpoint.java:74)
    at org.apache.synapse.endpoints.TemplateEndpoint.send(TemplateEndpoint.java:66)
    at org.apache.synapse.endpoints.ResolvingEndpoint.sendMessage(ResolvingEndpoint.java:74)
    at org.apache.synapse.endpoints.ResolvingEndpoint.send(ResolvingEndpoint.java:58)
    at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:121)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:330)
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:554)
    at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:188)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:261)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
仅当我们使用XA事务时,才会引发此异常。否则它会正常工作


有什么帮助吗?

如果您使用ActiveMQ 5.10,您需要将/lib目录放入 /repository/components/lib目录包含以下文件:

activemq-broker-5.10.0.jar
activemq-client-5.10.0.jar
geronimo-j2ee-management_1.1_spec-1.0.1.jar
geronimo-jms_1.1_spec-1.1.1.jar
hawtbuf-1.10.jar

不是

中列出的文件如果使用ActiveMQ 5.10,则需要将/lib目录放入 /repository/components/lib目录包含以下文件:

activemq-broker-5.10.0.jar
activemq-client-5.10.0.jar
geronimo-j2ee-management_1.1_spec-1.0.1.jar
geronimo-jms_1.1_spec-1.1.1.jar
hawtbuf-1.10.jar

ActiveMQ中列出的文件没有XA连接工厂:


指定:org.apache.activemq.ActiveMQXAConnectionFactory

activemq具有XA连接工厂:


指定:org.apache.activemq.ActiveMQXAConnectionFactory

当您使用Active MQ版本5.10时,必须将以下JAR从版本5.8添加到$ESB_HOME/repository/components/lib中

activemq-broker-5.8.0.jar activemq-client-5.8.0.jar geronimo-jms_1.1_spec-1.1.1.jar geronimo-j2ee-management_1.1_spec-1.0.1.jar 并取消注释/repository/conf/axis2/axis2.xml中的JMS传输侦听器和JMS传输接收器

<transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
   <parameter name="myTopicConnectionFactory" locked="false">
       <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
       <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
       <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>
   </parameter>

   <parameter name="myQueueConnectionFactory" locked="false">
       <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
       <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
       <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
   </parameter>

   <parameter name="default" locked="false">
       <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
       <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
       <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
   </parameter>
然后启动服务器

您必须根据场景[1]检查配置

当ESB发送到jms端点时,示例代码如下所示:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="StockQuoteProxy" transports="http">
 <target>
    <inSequence>
        <property action="set" name="OUT_ONLY" value="true"/>
        <send>
            <endpoint>
                <address uri="jms:/SimpleStockQuoteService?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;                 java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:61616&amp;transport.jms.DestinationType=queue"/> 
            </endpoint>
        </send>
    </inSequence>
    <outSequence>
        <send/>
    </outSequence>
    </target>
    <publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/>
   </proxy>
您的错误指示有关JMS发件人的问题。特别检查axis2中的配置以及您定义jms端点的代理配置


[1]

当您使用Active MQ 5.10版时,必须将以下JAR从5.8版添加到$ESB_HOME/repository/components/lib中

activemq-broker-5.8.0.jar activemq-client-5.8.0.jar geronimo-jms_1.1_spec-1.1.1.jar geronimo-j2ee-management_1.1_spec-1.0.1.jar 并取消注释/repository/conf/axis2/axis2.xml中的JMS传输侦听器和JMS传输接收器

<transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
   <parameter name="myTopicConnectionFactory" locked="false">
       <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
       <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
       <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>
   </parameter>

   <parameter name="myQueueConnectionFactory" locked="false">
       <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
       <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
       <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
   </parameter>

   <parameter name="default" locked="false">
       <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
       <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
       <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
   </parameter>
然后启动服务器

您必须根据场景[1]检查配置

当ESB发送到jms端点时,示例代码如下所示:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="StockQuoteProxy" transports="http">
 <target>
    <inSequence>
        <property action="set" name="OUT_ONLY" value="true"/>
        <send>
            <endpoint>
                <address uri="jms:/SimpleStockQuoteService?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;                 java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:61616&amp;transport.jms.DestinationType=queue"/> 
            </endpoint>
        </send>
    </inSequence>
    <outSequence>
        <send/>
    </outSequence>
    </target>
    <publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/>
   </proxy>
您的错误指示有关JMS发件人的问题。特别检查axis2中的配置以及您定义jms端点的代理配置


[1]

请共享代理和文件配置。请共享代理和文件配置。我想你说得对。它在没有事务的情况下工作,但在使用事务时失败。我们应该在哪里指定连接工厂?我们已经尝试了这个端点jms:/SimpleStockQuoteService?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&;java.naming.factory.initial=org.apache.activemq.ActiveMQXAConnectionFactory&;java.naming.provider.url=tcp://127.0.0.1:61616&transport.jms.DestinationType=队列没有效果。我想你说的一针见血。它在没有事务的情况下工作,但在使用事务时失败。我们应该在哪里指定连接工厂?我们已经尝试了这个端点jms:/SimpleStockQuoteService?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&;java.naming.factory.initial=org.apache.activemq.ActiveMQXAConnectionFactory&;java.naming.provider.url=tcp://127.0.0.1:61616&transport.jms.DestinationType=无效果的队列。