A Basic .NET and J2EE Interoperability using WebSphere MQ


Introduction

Interoperability is the ability for different applications to work together, even though they are running on different operating systems, on different hardware architectures, and using different application infrastructure. Programmable web sites that directly link organizations, application, and services would better meet their business needs. This direct linking of applications can be done easily using WebSphere MQ.

Creating Queue Manager, Queue and Channel

  • Open the Websphere MQ Explorer: Click start->Programs->Websphere MQ



  • Creating Queue Manager:
      Right click on the Queue manager option
      New->Queue manager...



  • Creating Queue:
      Expand the Queue manager
      Right click on the Queue option
      New->Local Queue...



  • Creating Channel:
      Expand the Queue manager
      Right click on the Channels option
      New->Server-connection Channel...

The environment setup:

  1. One Queue Manager - QM_TEST (Choose a free port number in my case it is  1421)
  2. One Queue - QM_TEST.LOCAL.ONE
  3. Create a Server connection channel - QM_TEST.SVRCONN

Reading message from Java application by .NET Client.

Let us start our interoperability by sending a message from Java application and consuming it by a .NET Client.

The Java Application:

1. Create a java application MQPUT.java and past the following code.

import com.ibm.mq.*; //Include the WebSphere MQ classes for Java package

 

public class MQPUT {  

 

          private static final String qManager = "QM_TEST";

          private static final String qName = "QM_TEST.LOCAL.ONE";

   

          public static void main(String args[]) {

        new MQPUT().runSample();

    }

 

          public void runSample()

          {

                   try

                   {                                             

                             MQEnvironment.hostname    = "172.20.21.152";

                             MQEnvironment.channel       = "QM_TEST.SVRCONN";

                             MQEnvironment.port  = Integer.parseInt("1421");

 

                    MQQueueManager qMgr = new MQQueueManager(qManager);

                             int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

                             MQQueue queue = qMgr.accessQueue(qName, openOptions);

                             MQMessage msg = new MQMessage();

                            

                             //msg.writeUTF("TESTING MESSAGE");

                             msg.writeString("TESTING MESSAGE");

                             MQPutMessageOptions pmo = new MQPutMessageOptions();

 

                             // Put the message to the queue                      

                             queue.put(msg, pmo);                           

                             queue.close();

 

                             // Disconnect from the QueueManager                         

                             qMgr.disconnect();

                             System.out.println("Message Sent!");

                   }

                   catch (MQException ex)

                   {

                             System.out.println("An Error occured : Completion Code "

                                      + ex.completionCode + " Reason Code " + ex.reasonCode);

                   }

                   catch (java.io.IOException ex)

                   {

                             System.out.println("Exception Occured:"    + ex);

                   }

          }

}

2. Now compile and run the application.

The .NET Client:

1. Create a csharp MQGET.cs file and past the following codes.

using System;

using IBM.WMQ;

 

namespace MQGET

{       

          class MQGET

          {                 

                   [STAThread]

                   static int Main(String[] args)

                   {

                             MQQueueManager      mqQMgr;        

                             MQQueue             mqQueue;        

                             MQMessage           queueMessage;  

                             MQGetMessageOptions mqGetMsgOpts;   

                                                         

                             String qManager = "QM_TEST";

                             String qName = "QM_TEST.LOCAL.ONE";

                             String channelName = "QM_TEST.SVRCONN";

                             String connectionName = "psingh(1421)";                     

                            

                             try

                             {                                    

                                      mqQMgr = new MQQueueManager( qManager, channelName,   

                           connectionName );                                 

                                      mqQueue = mqQMgr.AccessQueue( qName,

                           MQC.MQOO_INPUT_AS_Q_DEF

                           + MQC.MQOO_FAIL_IF_QUIESCING );

                            

                                      queueMessage = new MQMessage();        

                                      mqGetMsgOpts = new MQGetMessageOptions();  

                                      mqGetMsgOpts.WaitInterval = 15000;  // 15 second limit

                           for waiting

                                      mqGetMsgOpts.Options |= MQC.MQGMO_WAIT;

                                      mqQueue.Get( queueMessage, mqGetMsgOpts );

                                      System.Console.WriteLine( "Get : " + 

                           queueMessage.ReadString(queueMessage.MessageLength) );                                             

                             }

                             catch (MQException mqe)

                             {                                    

                                      System.Console.WriteLine( "Process ended with " +

                           mqe.Message

                           );

                                      return( (int)mqe.Reason );

                             }

                             return (0);

                   }

          }

}

2. Now compile and run the application.
(Make sure that the amqmdnet.dll is copied in the same folder or give full path for the reference)

Reading message of .NET application by a java Client.

Now, in this section we are going to create a .NET Web Services and consuming it by a java Client.

The .NET Application:

1. Create a csharp MQPUT.cs file and past the following codes.

using System;

using IBM.WMQ;

 

namespace MQPUT

{       

          class MQPUT

          {                 

                   [STAThread]

                   static int Main(String[] args)

                   {

                             MQQueueManager      mqQMgr;         

                             MQQueue             mqQueue;        

                             MQMessage           queueMessage;  

                             MQPutMessageOptions mqPutMsgOpts;   

                                                         

                             String qManager = "QM_TEST";

                             String qName = "QM_TEST.LOCAL.ONE";

                             String channelName = "QM_TEST.SVRCONN";

                             String connectionName = "psingh(1421)";

                             String message = "test message from DotNet";                       

                  

                             try

                             {                                    

                                      mqQMgr = new MQQueueManager( qManager,

                        channelName, connectionName );                                    

                                      mqQueue = mqQMgr.AccessQueue( qName,

                        MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING );

                                                                  

                                      queueMessage = new MQMessage();                                     

                                      queueMessage.WriteUTF( message );

                                      queueMessage.Format = MQC.MQFMT_STRING;

                                      mqPutMsgOpts = new MQPutMessageOptions();                                

                                      mqQueue.Put( queueMessage, mqPutMsgOpts );                               

                             }

                             catch (MQException mqe)

                             {                                    

                                      System.Console.WriteLine( "Process ended with " +

                        mqe.Message );

                                      return( (int)mqe.Reason );

                             }

                             System.Console.WriteLine( "The message sent" );

                             return (0);

                   }

          }

}

2. Now compile and run the application

 

The java client:

1. Create a java file MQGET.java and past the following codes

import com.ibm.mq.*;

 

public class MQGET {         

   

          public static void main(String args[]) {

                   String qManager = "QM_TEST";

                   String qName = "QM_TEST.LOCAL.ONE";

 

        try {

          

            MQEnvironment.hostname  = "172.20.21.152";

               MQEnvironment.channel  = "QM_TEST.SVRCONN";

               MQEnvironment.port       = Integer.parseInt("1421");

 

               MQQueueManager qMgr = new MQQueueManager(qManager);          

            int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;        

          

            MQQueue queue = qMgr.accessQueue(qName, openOptions);                              

            MQMessage rcvMessage = new MQMessage();           

            MQGetMessageOptions gmo = new MQGetMessageOptions();           

           

            queue.get(rcvMessage, gmo);         

            String msgText = rcvMessage.readUTF();                            

               System.out.println("The message is: " + msgText);

        

            queue.close();          

            qMgr.disconnect();         

        }

        catch (MQException ex) {

            System.out.println("Process ended with : " + ex.reasonCode);

        }

        catch (java.io.IOException ex) {

            System.out.println("An IOException occured while writing to the

            message buffer: " + ex);

        }

    }

}

2. Now compile and run the application

OK enjoy the Queuing !!


Similar Articles