Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The WSO2 JMS transport can be configured with IBM® WebSphere® MQ. The following topics cover the configuration steps.

Table of Contents
maxLevel3
minLevel3
 

...

  1. Create a new directory named wmq-client, and then create another new directory named lib inside it.
  2. Copy the following JAR files from the <IBM_MQ_HOME>/java/lib/ directory to the wmq-client/lib/ directory.

    Info

    <IBM_MQ_HOME> refers to the IBM WebSphere MQ installation directory.

    • com.ibm.mq.allclient.jar

    • fscontext.jar

    • jms.jar

    • providerutil.jar

  3. Navigate to the wmq-client directory using your Command Line Interface (CLI), and execute the following command, to build the project: mvn clean install

  4. Stop the WSO2 ESB 5.0.0 server, if it is already running. 

  5. Remove any existing IBM MQ client JAR files from the <ESB_HOME>/repository/components/dropinsdirectory and the <ESB_HOME>/repository/components/lib/ directory.

  6. Copy the <wmq-client>/target/wmq-client-8.0.0.4.jar file to the <ESB_Home>/repository/components/dropins/ directory.

  7. Copy the <wmq-client>/target/jta.jar file to the <ESB_HOME>/repository/components/lib/ directory.

  8. Remove following line from the <ESB_HOME>/repository/conf/etc/launch.ini file: javax.jms,\
  9. Regenerate .bindings file with the Provider Version : 8 property (if you already generated one before), and replace the existing .bindings file (if you have one) with the new .bindings file you generated.

  10. Start the WSO2 ESB server.

...

  1. 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
    languagehtml/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>
  2. Start the ESB with the Sample 251 configuration using the following command. 
    wso2esb-samples.bat -sn 251

  3. Log into the ESB server management console at: https://localhost:9443/carbon/.
  4. 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
  5. Configure the proxy service as follows.

    Code Block
    languagehtml/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>
  6. Comment out myTopicConnectionFactory and uncomment SQProxyCF in the <ESB_HOME>\samples\axis2Server\repository\conf\axis2.xml file as follows. 

    Code Block
    languagehtml/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>
  7. Start the axis2 Server with the following command.
    axis2Server.bat  

  8. 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>
  9. Send the request from the JMS client, and the sample Axis2 server console will print a message as follows.

    Code Block
    languagenone
    ant stockquote -Daddurl=http://localhost:8280/services/StockQuoteProxy -Dmode=placeorder -Dsymbol=MSFT 

Topic Scenario 1: Client to Topic to ESB
Anchor
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.  

  1. In <ESB_HOME>\repository\conf\axis2\axis2.xml , uncomment the myTopicConnectionFactory parameter and comment out the SQProxyCF parameter. It should look as shown below.

    Code Block
    languagexml
      <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>
  2. Start the ESB with the  Sample 250 configuration  by running the following command. 
    wso2esb-samples.bat -sn 250  
     

  3. Log in to the server management console at: https://localhost:9443/carbon/.

  4. Click web services -> list -> StockQuoteProxy -> edit (Specific Configuration)  

  5. Add a service parameter as follows and save it. 
    name = transport.jms.ConnectionFactory value = myTopicConnectionFactory

  6. Go to the <ESB_HOME>/samples/axis2Client directory and build it using the ant command.  

  7. Go to the <ESB_HOME>/samples/axis2Client /src/samples/userguide directory, open the GenericJMSClient.java source file, and make the following changes in the code.

    1. Set the jms_dest property default value to ivtT (line 45)

    2. Set the java.naming.provider.url to file:/C:/JNDI-Directory" (line 82)

    3. Set the java.naming.factory.initial to com.sun.jndi.fscontext.RefFSContextFactory (line 85)

    4. Set the lookup key to MQ_JMS_MANAGER (line 89)

  8. Configure the proxy configuration so that it appears as follows.

    Code Block
    languagehtml/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>
  9. 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
    languagehtml/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>
  10. Start the axis2 server with the following command. 
    axis2Server.bat 

  11. Send the request from the JMS client, and the sample Axis2 server console will print a message.

...