Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use Java JMS with MQseries

Tags:

java

jms

ibm-mq

I am trying to develop a JMS standalone application to read and write to a Queue on MQSeries. My boss asked me to use pure java JMS (not ibm.mq lib) to do that.

Here is the information that need to make the jms connection:

  mq.hostname=10.10.10.10   mq.channel=API.CLIENTCHL   mq.queueManager=MQPETAPI   mq.port=1422 

Do you know how to do that Or do you have any link that teach me to do that.

like image 426
David Avatar asked Aug 04 '11 02:08

David


People also ask

How does IBM MQ Connect to JMS?

An IBM® MQ classes for JMS application can connect to a queue manager in either client or bindings mode. In client mode, IBM MQ classes for JMS connects to the queue manager over TCP/IP. In bindings mode, IBM MQ classes for JMS connects directly to the queue manager using the Java Native Interface (JNI).

Does IBM MQ use JMS?

From IBM MQ 8.0, the product supports the JMS 2.0 version of the JMS standard. This implementation offers all the features of the classic API but requires fewer interfaces and is simpler to use.

What is difference between MQ and JMS?

MQ can act as a native queue mechanism or a transport for JMS messages. The difference being that JMS messages have some standard header fields at the begining of the message buffer and "native" mq messages contain just the data your program sent to the buffer.

Does IBM MQ use Java?

From IBM MQ 8.0, the IBM MQ classes for Java are built with Java 7. The Java 7 runtime environment supports running earlier class file versions.


1 Answers

The issue here is the requirement that "My boss asked me to use pure java JMS (not ibm.mq lib) to do that." JMS is a specification and each implementation must comply with the API and the semantics, but is free to do whatever they want at a low level. It is always necessary to use the implementation classes provided by the transport vendor. Therefore if you use WebSphere MQ as the transport, you will need to use the IBM MQ JMS classes to write a JMS application.

That said, if you stick with pure JMS API calls you would be able to plug in any transport vendor's classes. This is what is usually intended when you are given requirements such as that mentioned in the original post.

There's an article describing exactly what you are looking to do called Running a standalone Java application on WebSphere MQ V6.0 It uses only the JMS API and it uses JNDI in a local file system (a .bindings file). By swapping out the IBM JMS classes for another vendor and using their JNDI tools you would be able to plug in any JMS transport without changing your code using this approach.

If you want to do the same thing without JNDI, look at the sample programs provided with the MQ client install where you obtained your Java classes. In a UNIX/Linux system these are in /opt/mqm/samp and on Windows they are in install_dir/tools/jms/samples. The SimpleRequestor.java sample has the following code for initializing your connection factory without JNDI:

try {   // Create a connection factory   JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);   JmsConnectionFactory cf = ff.createConnectionFactory();    // Set the properties   cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, "localhost");   cf.setIntProperty(WMQConstants.WMQ_PORT, 1414);   cf.setStringProperty(WMQConstants.WMQ_CHANNEL, "SYSTEM.DEF.SVRCONN");   cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);   cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, "QM1"); 

Because this approach does not use JNDI, you are required to write code that is not transportable across transport vendors. It is IBM WebSphere MQ specific.

If you grabbed the MQ jars from somewhere and do not have the full install (and thus do not have the samples) you can download it as SupportPac MQC7. The download is free. In general you should use the latest client, even with a back-level queue manager. Obviously you do not get V7 functionality from a V6 QMgr but the JMS implementation in the V7 client is much improved, even for V6 functionality. If for some reason you really must use the V6 client, you can download it as SupportPacMQC6. Whichever client version you use, make sure to use the corresponding Infocenter.

V6 Infocenter
V7 Infocenter

Finally, the landing page with an index for all the SupportPacs is here.

like image 186
T.Rob Avatar answered Sep 24 '22 17:09

T.Rob