Showing posts with label IBM MQ. Show all posts
Showing posts with label IBM MQ. Show all posts

Sunday, June 26, 2016

[IBM MQ] Create a topic using IBM MQ

Hi all,

I am configuring integration scenario of IBM MQ with WSO2 ESB. In particular scenario, used IBM MQ 8.0.0.2 and ESB 5.0.0 in the windows environment (Oracle JDK 1.8).

If you need to understand the installation mechanism from the first step, you can follow this blog post. 

Assumption: You have configured ESB with IBM MQ for Queues.

Let's begin creating a topic in IBM MQ.

1. Open IBM MQ UI (Websphere Installation1 window) through administrative mode.

How to do that ?
  • Go to window start button and search for Websphere
  • Right click on icon and  click on "Run as Administrator"
2. Create a Topic under Queue Manger





3. Add Destination




Note: Give the "Topic string" (Which was defined when creating the Topic) as the Topic in next window. (Refer next screen shot)


4. Create Topic Connection Factory if you don't specify previous connection factories as Topic Connection Factory/ Connection Factory (General term for both topics and queues)






You are done with Topic Configuration. When you are going to subscribe to Topic from external clients (Ex: ESB) you can see those subscriptions through "Subscription panel"



Happy Coding ... :)

Saturday, June 25, 2016

[IBM MQ] How to make a remote connection through WSO2 ESB


Hi all,

This blog post about creating a remote connection to the IBM MQ which is located in a remote server. To do that, you have to have IBM MQ installed in remote server. For IBM MQ installation you can refer this blog post.

Let's remotely connect to IBM MQ ...

Environment : IBM MQ Version 8.0.0.2 installed in Windows 2012 R2 server
                        Client is WSO2 ESB 5.0.0 installed in ubuntu 15.10

Steps to connect:
  • First, you have to take .bindings file you used (Which is in jndiDirectory)
  • Add .bindings file in to a local file directory (Ex: /home/dilshani/Dev/jndiDirectory)
  • Edit .bindings file 
** Open .bindings file using text editor and replace all places having "localhost" with relevant IP of the server which is installed IBM MQ.
  • Add client jars into [ESB_HOME]/repository/components/lib folder   
* com.ibm.mq.allclient 
* fscontext
* jms
* providerutil

** You can find these jars inside the java folder in IBM MQ installation file directory (Ex: C:/)
  •  Remove following line from $ESB_HOME/repository/conf/etc/launch.ini. 
                            javax.jms,\
  • Add WSO2 ESB axis2.xml configs related to JMS transport (You may find axis2.xml file in [ESB_HOME]/repository/conf/axis2/)
Sample Configs:

 <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">  
   <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:///home/centos/esb/jndiDirectory</parameter>  
   <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">myTopicConnectionFactory</parameter>  
   <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>  
   <parameter name="transport.jms.Destination" locked="false">testTopic</parameter>  
   <parameter name="transport.jms.DestinationType" locked="false">topic</parameter>  
   <parameter name="transport.jms.UserName" locked="false">administrator</parameter>  
   <parameter name="transport.jms.Password" locked="false">wso2321#qa</parameter>  
  </parameter>  
  <parameter name="myQueueConnectionFactory1" 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:///home/centos/esb/jndiDirectory</parameter>  
   <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">myQueueConnectionFactory</parameter>  
   <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>  
   <parameter name="transport.jms.UserName" locked="false">administrator</parameter>  
   <parameter name="transport.jms.Password" locked="false">wso2321#qa</parameter>  
   <parameter name="transport.jms.Destination">LocalQueue1</parameter>  
  </parameter>  
  <parameter name="myTopicConnectionFactory1" 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:///home/centos/esb/jndiDirectory</parameter>  
   <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">myTopicConnectionFactory</parameter>  
   <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>  
   <parameter name="transport.jms.DestinationType" locked="false">topic</parameter>  
   <parameter name="transport.jms.UserName" locked="false">administrator</parameter>  
   <parameter name="transport.jms.Destination">testTopic</parameter>  
   <parameter name="transport.jms.Password" locked="false">wso2321#qa</parameter>  
  </parameter>  
 </transportReceiver>  

And also you have to add transport sender configurations too.

 <transportSender name="jms" class="org.apache.axis2.transport.jms.JMSSender">  
   <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:///home/centos/esb/jndiDirectory</parameter>  
   <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">myTopicConnectionFactory</parameter>  
   <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>  
   <parameter name="transport.jms.Destination" locked="false">testTopic</parameter>  
   <parameter name="transport.jms.DestinationType" locked="false">topic</parameter>  
   <parameter name="transport.jms.UserName" locked="false">administrator</parameter>  
   <parameter name="transport.jms.Password" locked="false">wso2321#qa</parameter>  
  </parameter>  
  <parameter name="myQueueConnectionFactory1" 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:///home/centos/esb/jndiDirectory</parameter>  
   <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">myQueueConnectionFactory</parameter>  
   <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>  
   <parameter name="transport.jms.UserName" locked="false">administrator</parameter>  
   <parameter name="transport.jms.Password" locked="false">wso2321#qa</parameter>  
   <parameter name="transport.jms.Destination">LocalQueue1</parameter>  
  </parameter>  
  <parameter name="myTopicConnectionFactory1" 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:///home/centos/esb/jndiDirectory</parameter>  
   <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">myTopicConnectionFactory</parameter>  
   <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>  
   <parameter name="transport.jms.DestinationType" locked="false">topic</parameter>  
   <parameter name="transport.jms.UserName" locked="false">administrator</parameter>  
   <parameter name="transport.jms.Destination">testTopic</parameter>  
   <parameter name="transport.jms.Password" locked="false">wso2321#qa</parameter>  
  </parameter>  
 </transportSender>  
  • Start ESB server and it will create JMS connection.

** Note: If you get any error, please take following steps to solve the issue.
  •  Ping the server and see whether it can be reach
Ex:
       ping <serever ip>
  • Telenet the port and see whether it open to connect
Ex:
       telnet <server-ip> <port>
  • Restart the IBM MQ 
** Check whether "channel" is inactive and .bindings file connected. (You can do it via IBM MQ UI)