This site contains the documentation that is relevant to older WSO2 product versions and offerings.
For the latest WSO2 documentation, visit https://wso2.com/documentation/.
WSO2 EI as a JMS Consumer
This section describes how to configure WSO2 Enterprise Integrator (WSO2 EI) to listen to a JMS Queue.
Follow the steps below to configure WSO2 EI to listen to a JMS queue, consume messages, and send them to a HTTP back-end service.
Configure WSO2 EI with Apache ActiveMQ and set up the JMS listener. For instructions, see Configure with ActiveMQ.
Create a proxy service with the following configuration.To create a proxy service using Tooling, see Working with Proxy Services via Tooling.
<proxy xmlns="http://ws.apache.org/ns/synapse" name="JMStoHTTPStockQuoteProxy" transports="jms"> <target> <inSequence> <property action="set" name="OUT_ONLY" value="true"/> </inSequence> <endpoint> <address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </endpoint> <outSequence/> </target> </proxy>To test this you will need an HTTP back-end service. Deploy the SimpleStockQuoteService and start the Axis2 server.
Place a message into the ActiveMQ queue by executing the following command from
<EI_HOME>/samples/axis2Clientfolder.ant stockquote -Dmode=placeorder -Dtrpurl="jms:/JMStoHTTPStockQuoteProxy?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.ContentTypeProperty=Content-Type&transport.jms.DestinationType=queue"WSO2 EI will read the message from the ActiveMQ queue and send it to the back-end service. You will see the following response in the Axis2 Server console:
Fri Dec 16 10:21:11 GST 2016 samples.services.SimpleStockQuoteService :: Accepted order #1 for : 7424 stocks of IBM at $ 156.74347214873563
Two-way HTTP Back-end Call
In addition to one-way invocations, WSO2 EI proxy service can listen to the queue, pick up a message and do a two-way HTTP call as well. It allows the response to be delivered to a queue specified by the client. This is done by specifying a ReplyDestination element when placing a request message to a JMS queue. The scenario is depicted in the diagram below.
We can have a proxy service similar to the following to simulate a two-way invocation.
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="Proxy1"
transports="jms"
startOnLoad="true"
trace="disable">
<description/>
<target>
<inSequence>
<send>
<endpoint>
<address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
</endpoint>
</send>
</inSequence>
<outSequence/>
</target>
<parameter name="transport.jms.ContentType">
<rules>
<jmsProperty>contentType</jmsProperty>
<default>text/xml</default>
</rules>
</parameter>
</proxy>
Note that for two-way JMS scenarios the OUT_ONLY property is not used.
Use the following command from <EI_HOME>/samples/axis2Client folder. Note how the transport.jms.ReplyDestination element is specified.
ant stockquote -Dsymbol=WSO2 -Dtrpurl="jms:/JMStoHTTPStockQuoteProxy?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616&transport.jms.ContentTypeProperty=Content-Type&transport.jms.DestinationType=queue&transport.jms.ReplyDestination=ResponseQueue" You can view the responses from the back-end service in ResponseQueue by accessing the ActiveMQ management console using the URL http://0.0.0.0:8161/admin and using admin as both the username and password.
Defining Content Type of Incoming JMS Messages
By default, WSO2 EI considers all messages consumed from a queue as a SOAP message. To consider messages consumed from a queue as a different format, define the transport.jms.ContentType parameter with the respective content type as a proxy service parameter.
To demonstrate this, we have modified the above configuration as follows:
<proxy xmlns="http://ws.apache.org/ns/synapse" name="JMStoHTTPStockQuoteProxy" transports="jms">
<target>
<inSequence>
<property action="set" name="OUT_ONLY" value="true"/>
<send>
<endpoint>
<address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
</endpoint>
</send>
</inSequence>
<outSequence/>
</target>
<parameter name="transport.jms.ContentType">
<rules>
<jmsProperty>contentType</jmsProperty>
<default>application/xml</default>
</rules>
</parameter>
<parameter name="transport.jms.Destination">MyJMSQueue</parameter>
</proxy>Proxy Service Configuration
You can specify a different content type within the transport.jms.ContentType parameter. In the sample configuration above, the content type defined is application/xml.
If you want the proxy service to listen to a queue where the queue name is different from the proxy service name, you can specify the queue name using transport.jms.Destination parameter. In the sample configuration above WSO2 EI listens to a JMS queue named MyJMSQueue.