lpastor
lpastor

Reputation: 179

Correct configuration for transport Sender & Receiver JMS?

I have some questions because documentation is not clear..

How should I setup WSO2 ESB environment to be able to read and write messages form WSO2 MessageBroker.

I followed ConfigurewithWSO2MessageBroker

  1. I have ESB and MB on same server (MB has Offset=2) /repository/conf/axis2/axis2.xml

....

<transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
        <parameter name="JMSTopic" locked="false">
           <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter>
            <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>
        </parameter>

        <parameter name="JMSQueue" locked="false">
            <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</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.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
            <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
        </parameter>
    </transportReceiver>

...

and sender part

<transportSender name="jms" class="org.apache.axis2.transport.jms.JMSSender">    
      <parameter name="default" locked="false">
                 <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter>
                 <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter>
                 <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">ConnectionFactory</parameter>
          </parameter>        
     </transportSender>

jndi.properties files

connectionfactory.QueueConnectionFactory = amqp://admin:admin@clientID/carbon?brokerlist='tcp://gst-esb-qa-01:5674'
connectionfactory.TopicConnectionFactory = amqp://admin:admin@clientID/carbon?brokerlist='tcp://gst-esb-qa-01:5674'
connectionfactory.ConnectionFactory      = amqp://admin:admin@clientID/carbon?brokerlist='tcp://gst-esb-qa-01:5674'

queue.myQueue = myQueue
queue.testQueue= testQueue

topic.MyTopic = MyTopic

My proxy

<proxy name="SendMessagetoJMSProxy" transports="http" startOnLoad="true">
                  <target>
                     <endpoint>
                        <address uri="jms:/myQueue?&amp;transport.jms.DestinationType=queue"/>
                     </endpoint>
                     <inSequence>
                        <log level="custom">
                           <property name="STATE" value="message is sent to queue"/>
                        </log>
                        <property name="OUT_ONLY" value="true"/>
                        <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
                     </inSequence>
                     <outSequence/>
                  </target>
               </proxy>

my SOAP UI call

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.samples" xmlns:xsd="http://services.samples/xsd">
                   <soapenv:Header/>
                   <soapenv:Body>
                      <ser:dummy>
                            <xsd:symbol>IBM</xsd:symbol>
                      </ser:dummy>
                   </soapenv:Body>
                </soapenv:Envelope>

According to doc I should see the message in JMS Message Broker BUT I get

Error while building Passthrough stream

TID[-1234] [ESB] [2017-05-16 12:52:47,137] ERROR {org.apache.synapse.transport.passthru.util.RelayUtils} - Error while building Passthrough stream org.apache.axiom.om.impl.builder.StAXOMBuilder.lookahead(StAXOMBuilder.java:711) org.apache.axiom.soap.impl.llom.SOAPBodyImpl.hasLookahead(SOAPBodyImpl.java:191) org.apache.axiom.soap.impl.llom.SOAPBodyImpl.getFirstElementLocalName(SOAPBodyImpl.java:217) org.apache.axiom.soap.impl.llom.SOAPBodyImpl.hasFault(SOAPBodyImpl.java:99) org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.hasFault(SOAPEnvelopeImpl.java:305) org.apache.synapse.transport.passthru.util.DeferredMessageBuilder.getDocument(DeferredMessageBuilder.java:189) org.apache.synapse.transport.passthru.util.RelayUtils.builldMessage(RelayUtils.java:137) org.apache.synapse.transport.passthru.util.RelayUtils.buildMessage(RelayUtils.java:100) org.apache.synapse.mediators.AbstractListMediator.buildMessage(AbstractListMediator.java:140) org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:83) org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59) org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:210) org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:403) org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:151) org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) java.lang.Thread.run(Thread.java:745)

AND

Endpoint : AnonymousEndpoint with address jms:/myQueue?&transport.jms.DestinationType=queue will be marked SUSPENDED as it failed

First question : java.naming.provider.url param in axis2.xml is it relative to [ESB Home] location ?

Im my case server folder structure looks like ...enter image description here

maybe that should look like ....????

<parameter name="java.naming.provider.url" locked="false">file:/home/wso2admin/wso2esb-5.0.0/repository/conf/jndi.properties</parameter>

SECOND : is this error related to Message Builder and Formater ????

any help would be nice ...couse Im stuck for days ...

Upvotes: 1

Views: 879

Answers (3)

lpastor
lpastor

Reputation: 179

Thanks to Rajjaz and Jan ...

I created a proxy

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="SendMessagetoJMSProxy"
       startOnLoad="true"
       statistics="disable"
       trace="disable"
       transports="http,https">
   <target>
      <inSequence>
         <log level="custom">
            <property name="STATE" value="message is sent to myQueue"/>
         </log>
         <property name="OUT_ONLY" value="true"/>
         <property name="FORCE_SC_ACCEPTED" scope="axis2" value="true"/>
      </inSequence>
      <outSequence/>
      <endpoint>
         <address uri="jms:/myQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.wso2.andes.jndi.PropertiesFileInitialContextFactory&amp;java.naming.provider.url=repository/conf/jndi.properties"/>
      </endpoint>
   </target>
   <description/>
</proxy>

also I figure out that if you have define default JMS configuration part in axis2.xml for transportReceiver it is enough to put name of Queue

so this is also working

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="SendMessagetoJMSProxy2"
       startOnLoad="true"
       statistics="disable"
       trace="disable"
       transports="http,https">
   <target>
      <inSequence>
         <log level="custom">
            <property name="STATE" value="message is sent to GST_TMS_ASSOCIATE_LEASE Queue"/>
         </log>
         <property name="OUT_ONLY" value="true"/>
         <property name="FORCE_SC_ACCEPTED" scope="axis2" value="true"/>
      </inSequence>
      <outSequence/>
      <endpoint>
         <address uri="jms:/myQueue"/>
      </endpoint>
   </target>
   <description/>
</proxy>

and now I can publish a message to JMS queue with proxy ...

Im little confused (still) where all this log in System logs coming from and why ?!?![enter image description here]1

Upvotes: 1

Dilshani Subasinghe
Dilshani Subasinghe

Reputation: 1952

First Question:java.naming.provider.url param in axis2.xml is it relative to [ESB Home] location ?

No, you dont need to add ESB home location.

Second Question: is this error related to Message Builder and Formater ????

Yes, you are getting an error with message builders.

Just verify whether you added client jars and verify your proxy. Please create a proxy as follow and try it.

Sample Proxy:

<proxy name="QueueProxy" startOnLoad="true" transports="jms">
    <target>
        <inSequence>
             <property name="OUT_ONLY" value="true"/>
             <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
            <send>
                <endpoint>
                    <address uri="jms:/MyQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.wso2.andes.jndi.PropertiesFileInitialContextFactory&amp;java.naming.provider.url=repository/conf/jndi.properties"/>
                </endpoint>
            </send>
        </inSequence>
    </target>
</proxy>

Reference: https://docs.wso2.com/display/ESB500/ESB+as+a+JMS+Producer

Upvotes: 2

HM.Rajjaz
HM.Rajjaz

Reputation: 389

Please try the below proxy and check the URL format you are using

<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:/myQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.DestinationType=queue"/>
            </endpoint>
        </send>
    </inSequence>
    <outSequence>
        <send/>
    </outSequence>
</target>
<publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/>

for more

Upvotes: 1

Related Questions