The WSO2 JMS transport can be configured with IBM® WebSphere® MQ. The following topics cover the configuration steps.
Table of Contents | ||||
---|---|---|---|---|
|
...
- WSO2 ESB is installed. To test the samples, you must also have Apache Ant installed. For details, see Installation Prerequisites.
- WebSphere MQ is installed and the latest fix pack applied (see the IBM documentation). The fix pack can be obtained from http://www-01.ibm.com/software/integration/wmq. (These instructions are tested on IBM WebSphere MQ version 8.0.0.4.)
Creating queue manager, queue and channel in IBM WebSphere MQ
...
In
<ESB_HOME>\repository\conf\axis2\axis2.xml
, comment out both the myTopicConnectionFactory parameter and the SQProxyCF parameter. It should look as shown below.Code Block language html/xml <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener"> <!--parameter name="myTopicConnectionFactory" locked="false"> <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.fscontext.RefFSContextFactory</parameter> <parameter name="java.naming.provider.url" locked="false">file:/C:/JNDI-Directory</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MQ_JMS_MANAGER</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter> <parameter name="transport.jms.Destination">JMS_QUEUE</parameter> </parameter--> <!--parameter name="SQProxyCF" locked="false"> <parameter name="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</parameter> <parameter name="java.naming.provider.url">file:/C:/JNDI-Directory</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MQ_JMS_MANAGER</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> <parameter name="transport.jms.Destination">JMS_QUEUE</parameter> </parameter--> <parameter name="default" locked="false"> <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.fscontext.RefFSContextFactory</parameter> <parameter name="java.naming.provider.url" locked="false">file:/C:/JNDI-Directory</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MQ_JMS_MANAGER</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> <parameter name="transport.jms.Destination">JMS_QUEUE</parameter> </parameter> </transportReceiver>
Start the ESB with the Sample 251 configuration using the following command.
wso2esb-samples.bat -sn 251
- Log into the ESB server management console at: https://localhost:9443/carbon/.
- Select Service Bus -> Source view and update the JMS URL as follows.
jms:/JMS_QUEUE?transport.jms.ConnectionFactoryJNDIName=MQ_JMS_MANAGER&java.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory&java.naming.provider.url=file:/C:/JNDI-Directory&transport.jms.DestinationType=queue&transport.jms.ConnectionFactoryType=queue &transport.jms.Destination=JMS_QUEUE
Configure the proxy service as follows.
Code Block language html/xml <definitions xmlns="http://ws.apache.org/ns/synapse"> <proxy name="StockQuoteProxy" transports="https http jms" startOnLoad="true" trace="disable"> <target> <endpoint> <address uri="jms:/JMS_QUEUE?transport.jms.ConnectionFactoryJNDIName=MQ_JMS_MANAGER&java.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory&java.naming.provider.url=file:/C:/JNDI-Directory&transport.jms.DestinationType=queue&transport.jms.ConnectionFactoryType=queue&transport.jms.Destination=JMS_QUEUE"/> </endpoint> <inSequence> <property name="TRANSPORT_HEADERS" scope="axis2" action="remove"/> <property name="OUT_ONLY" value="true"/> </inSequence> <outSequence> <send/> </outSequence> </target> <publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/> </proxy> <sequence name="fault"> <log level="full"> <property name="MESSAGE" value="Executing default "fault" sequence"/> <property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/> <property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/> </log> <drop/> </sequence> <sequence name="main"> <log/> <drop/> </sequence> </definitions>
Comment out
myTopicConnectionFactory
and uncommentSQProxyCF
in the<ESB_HOME>\samples\axis2Server\repository\conf\axis2.xml
file as follows.Code Block language html/xml <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener"> <!--parameter name="myTopicConnectionFactory" locked="false"> <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.fscontext.RefFSContextFactory</parameter> <parameter name="java.naming.provider.url" locked="false">file:/C:/JNDI-Directory</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MQ_JMS_MANAGER</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter> <parameter name="transport.jms.Destination">JMS_QUEUE</parameter> </parameter--> <parameter name="SQProxyCF" locked="false"> <parameter name="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</parameter> <parameter name="java.naming.provider.url">file:/C:/JNDI-Directory</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MQ_JMS_MANAGER</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> <parameter name="transport.jms.Destination">JMS_QUEUE</parameter> </parameter> <parameter name="default" locked="false"> <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.fscontext.RefFSContextFactory</parameter> <parameter name="java.naming.provider.url" locked="false">file:/C:/JNDI-Directory</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MQ_JMS_MANAGER</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> <parameter name="transport.jms.Destination">JMS_QUEUE</parameter> </parameter> </transportReceiver>
Start the axis2 Server with the following command.
axis2Server.bat
Add the following parameters to
service.xml
in<ESB_HOME>\samples\axis2Server\repository\services\SimpleStockQuoteService.aar.
Code Block <parameter name="transport.jms.ConnectionFactory">SQProxyCF</parameter> <parameter name="transport.jms.Destination">JMS_QUEUE</parameter>
Send the request from the JMS client, and the sample Axis2 server console will print a message as follows.
Code Block language none ant stockquote -Daddurl=http://localhost:8280/services/StockQuoteProxy -Dmode=placeorder -Dsymbol=MSFT
Topic Scenario 1: Client to Topic to ESB Anchor TopicScenario1 TopicScenario1
TopicScenario1 | |
TopicScenario1 |
In this scenario, the JMS client places an order on the topic ivtT. The ESB listens to this topic, gets the message, and sends it to the back-end server to process the request.
In
<ESB_HOME>\repository\conf\axis2\axis2.xml
, uncomment themyTopicConnectionFactory
parameter and comment out theSQProxyCF
parameter. It should look as shown below.Code Block language xml <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener"> <parameter name="myTopicConnectionFactory" locked="false"> <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.fscontext.RefFSContextFactory</parameter> <parameter name="java.naming.provider.url" locked="false">file:/C:/JNDI-Directory</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MQ_JMS_MANAGER</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter> <parameter name="transport.jms.Destination">JMS_QUEUE</parameter> </parameter> <!--parameter name="SQProxyCF" locked="false"> <parameter name="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</parameter> <parameter name="java.naming.provider.url">file:/C:/JNDI-Directory</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MQ_JMS_MANAGER</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> <parameter name="transport.jms.Destination">JMS_QUEUE</parameter> </parameter--> <parameter name="default" locked="false"> <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.fscontext.RefFSContextFactory</parameter> <parameter name="java.naming.provider.url" locked="false">file:/C:/JNDI-Directory</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MQ_JMS_MANAGER</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> <parameter name="transport.jms.Destination">JMS_QUEUE</parameter> </parameter> </transportReceiver>
Start the ESB with the Sample 250 configuration by running the following command.
wso2esb-samples.bat -sn 250
Log in to the server management console at: https://localhost:9443/carbon/.
Click web services -> list -> StockQuoteProxy -> edit (Specific Configuration)
Add a service parameter as follows and save it.
name = transport.jms.ConnectionFactory value = myTopicConnectionFactory
Go to the
<ESB_HOME>/samples/axis2Client
directory and build it using theant
command.Go to the
<ESB_HOME>/samples/axis2Client
/src/samples/userguide
directory, open theGenericJMSClient.java
source file, and make the following changes in the code.Set the jms_dest property default value to
ivtT
(line 45)Set the java.naming.provider.url to
file:/C:/JNDI-Directory
" (line 82)Set the java.naming.factory.initial to
com.sun.jndi.fscontext.RefFSContextFactory
(line 85)Set the lookup key to
MQ_JMS_MANAGER
(line 89)
Configure the proxy configuration so that it appears as follows.
Code Block language html/xml <definitions xmlns="http://ws.apache.org/ns/synapse"> <proxy name="StockQuoteProxy" transports="https http jms" startOnLoad="true" trace="disable"> <target> <endpoint> <address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </endpoint> <inSequence> <property name="OUT_ONLY" value="true"/> </inSequence> <outSequence> <send/> </outSequence> </target> <publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/> <parameter name="transport.jms.ContentType"> <rules> <jmsProperty>contentType</jmsProperty> <default>application/xml</default> </rules> </parameter> <parameter name="transport.jms.ConnectionFactory">myTopicConnectionFactory</parameter> </proxy> <sequence name="fault"> <log level="full"> <property name="MESSAGE" value="Executing default "fault" sequence"/> <property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/> <property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/> </log> <drop/> </sequence> <sequence name="main"> <log/> <drop/> </sequence> </definitions>
Comment out the non-default connection factories in the
<ESB_HOME>\samples\axis2Server\repository\conf\axis2.xml
file so that it looks as follows.Code Block language html/xml <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener"> <!--parameter name="myTopicConnectionFactory" locked="false"> <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.fscontext.RefFSContextFactory</parameter> <parameter name="java.naming.provider.url" locked="false">file:/C:/JNDI-Directory</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MQ_JMS_MANAGER</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter> <parameter name="transport.jms.Destination">JMS_QUEUE</parameter> </parameter--> <!--parameter name="SQProxyCF" locked="false"> <parameter name="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</parameter> <parameter name="java.naming.provider.url">file:/C:/JNDI-Directory</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MQ_JMS_MANAGER</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> <parameter name="transport.jms.Destination">JMS_QUEUE</parameter> </parameter--> <parameter name="default" locked="false"> <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.fscontext.RefFSContextFactory</parameter> <parameter name="java.naming.provider.url" locked="false">file:/D/JNDI-Directory</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">MQ_JMS_MANAGER</parameter> <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> <parameter name="transport.jms.Destination">bogusq</parameter> </parameter> </transportReceiver>
Start the axis2 server with the following command.
axis2Server.bat
Send the request from the JMS client, and the sample Axis2 server console will print a message.
...