Integrating WebSphere MQ with JBoss Enterprise Application Server

Once I worked on a project where in the existing environment I needed to configure the JBoss Enterprise Application Server to communicate with WebSphere MQ where the WebSphere MQ was supposed to be communicating with Mainframe system using cluster queue of WebSphere.  Initially I was blind, as I was not able to understand how I could configure JBoss to communicate with MQ. But after some research, I came to learn that it is possible to integrate JBoss with WebSphere MQ and an application deployed in JBoss can directly put the message in WebSphere MQ.

If you're very familiar with JBoss and it's architecture, you can complete this task by creating new subsystem and corresponding extension. Before you start configuring JBoss, you need to install the adaptor of WebSphere MQ in JBoss. One can find the JBoss adaptor from WebSphere MQ library, the file name is wmq.jmsra.rar.

Here are the steps for configuring an application to put the message in WebSphere MQ via JBoss Enterprise Application Server.

1) First we need to create connection factory to bind the application where in the connection factory will be binding with WebSphere MQ using Server Connection Channel. This can be created from the management console.

Note: Make sure that server connection channel is configured in the WebSphere MQ level properly,

2) Bind the JBoss Queue destination to WebSphere MQ

Note: While mapping JBoss Destination to WebSphere MQ make sure that you are mapping to proper queue and that queue should have the correspondence permission.

           Please have a reference of  Jboss configuration below:

 <subsystem>
      <resource-adapters><resource-adapter id="wmq.jmsra.rar">
      <archive>wmq.jmsra.rar</archive>
      <transaction-support>NoTransaction</transaction-support>
  <connection-definitions>
    <connection-definition class-name="com.ibm.mq.connector.outbound.ManagedQueueConnectionFactoryImpl" jndi-name="java:jboss/DEMO" pool-name="DEMO">
      <config-property name="port">1414</config-property>
      <config-property name="username">sid</config-property>
      <config-property name="queueManager">TestMQ</config-property>
      <config-property name="hostName">127.0.0.1</config-property>
      <config-property name="channel">JBOSS.CONNECT</config-property>
      <config-property name="password">mq@1234</config-property>
      <config-property name="transportType">CLIENT</config-property>
    </connection-definition>
  </connection-definitions>

  <admin-objects>
   <admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/Q_demo" pool-name="Q_demo">
    <config-property name="baseQueueName">QUEUEA</config-property>
    <config-property name="baseQueueManagerName">TestMQ</config-property>
   </admin-object>
 </admin-objects>
</subsystem>
Note: Please note that WebSphere MQ configurations are not mentioned here.

Now a simple application which has producer and consumer can perform get/put operation in WebSphereMQ through JBoss. This is entirely my own experience, which one I have mentioned here all together.

Last updated: June 16, 2017