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:
- One Queue Manager - QM_TEST (Choose a free port number in my case it is 1421)
- One Queue - QM_TEST.LOCAL.ONE
- 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 !!