【问题标题】:WSO2 ESB 5.0.0 + ActiveMQ 5.10.0WSO2 ESB 5.0.0 + ActiveMQ 5.10.0
【发布时间】:2016-10-18 20:09:17
【问题描述】:

我正在尝试在 WSO2 ESB 5.0.0 中使用 ActiveMQ 配置 JMS 传输。我已按照https://docs.wso2.com/display/ESB500/Configure+with+ActiveMQ 中的说明进行操作,但没有成功。

我的 ActiveMQ 版本是 5.10。

当我通过 JMS Endpoit 发送消息时,我收到此错误:

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 事务的时候抛出的。否则它可以正常工作。

有什么帮助吗?

【问题讨论】:

  • 请分享代理和文件配置。

标签: wso2 activemq wso2esb


【解决方案1】:

如果你使用 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

不是https://docs.wso2.com/display/ESB500/Configure+with+ActiveMQ中列出的文件

【讨论】:

    【解决方案2】:

    ActiveMQ 有一个 XA 连接工厂:

    指定:org.apache.activemq.ActiveMQXAConnectionFactory

    【讨论】:

    • 我猜你一针见血。它在没有事务的情况下工作,但在使用它们时会失败。我们应该在哪里指定连接工厂?我们已经尝试过这个端点“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=queue" 无效。
    【解决方案3】:

    当您使用 Active MQ 5.10 版时,您必须将以下 5.8 版的 jar 添加到 $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>
    

    <transportSender name="jms" class="org.apache.axis2.transport.jms.JMSSender"/>
    

    然后启动服务器。

    您必须根据您的场景[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]https://docs.wso2.com/display/ESB500/JMS+Usecases

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 2015-03-15
      • 2018-12-20
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 2017-11-19
      相关资源
      最近更新 更多