An updated simple WebLogic JMS client

Introduction

A little while ago, we posted a simple JMS client for WebLogic here.   That post demonstrated how to create a simple JMS client program that could send messages to a WebLogic JMS queue.  It also showed how to set up the necessary definitions on the WebLogic Server in the first place, and how to see the details of the messages after they had been sent.

In that post we mentioned that there are often times when we want to be able to send messages to a JMS queue.  One such time was recently when we wanted Oracle Universal Content Management (UCM) to send a JMS message every time a new piece of content was checked in to the content management system.  In order to do that, we reused this code, but it needed a small update to allow us to pass in details of the server, queue name, etc.

This post presents an updated simple JMS client, in Java.  Here it is still general purpose.  In a future post, we will show how it is used to satisfy the use case described above.  We will also present this updated simple client in C# in a separate post.  This post will be updated with links when these new posts are published.

Main Article

Update: You can grab this code from our Subversion repository:
svn checkout https://www.samplecode.oracle.com/svn/jmsclients/trunk

The C# version is here and a Scala version here.

Please refer to the earlier post for details of how to use this code.

# Copyright 2012 Oracle Corporation. 
# All Rights Reserved. 
# 
# Provided on an 'as is' basis, without warranties or conditions of any kind, 
# either express or implied, including, without limitation, any warranties or 
# conditions of title, non-infringement, merchantability, or fitness for a 
# particular purpose. You are solely responsible for determining the 
# appropriateness of using and assume any risks. You may not redistribute. 

package jmsclient;

import java.util.Hashtable;
import javax.naming.*;
import javax.jms.*;

public class SimpleJMSClient {

	private static InitialContext ctx = null;
	private static QueueConnectionFactory qcf = null;
	private static QueueConnection qc = null;
	private static QueueSession qsess = null;
	private static Queue q = null;
	private static QueueSender qsndr = null;
	private static TextMessage message = null;
	private static final String DEFAULT_QCF_NAME = "jms/MarksConnectionFactory";
	private static final String DEFAULT_QUEUE_NAME = "jms/MarksQueue";
	private static final String DEFAULT_URL = "t3://localhost:7101";
	private static final String DEFAULT_USER = "weblogic";
	private static final String DEFAULT_PASSWORD = "weblogic1";

	public SimpleJMSClient() {
		super();
	}

	public static void sendMessage(String messageText) {
		sendMessage(DEFAULT_URL, DEFAULT_USER, DEFAULT_PASSWORD,
				DEFAULT_QCF_NAME, DEFAULT_QUEUE_NAME, messageText);
	}

	public static void sendMessage(String url, String user, String password,
			String cf, String queue, String messageText) {
		// create InitialContext
		Hashtable properties = new Hashtable();
		properties.put(Context.INITIAL_CONTEXT_FACTORY,
				"weblogic.jndi.WLInitialContextFactory");
		properties.put(Context.PROVIDER_URL, url);
		properties.put(Context.SECURITY_PRINCIPAL, user);
		properties.put(Context.SECURITY_CREDENTIALS, password);

		try {
			ctx = new InitialContext(properties);
		} catch (NamingException ne) {
			ne.printStackTrace(System.err);
			System.exit(0);
		}
		System.out.println("Got InitialContext " + ctx.toString());

		// create QueueConnectionFactory
		try {
			qcf = (QueueConnectionFactory) ctx.lookup(cf);
		} catch (NamingException ne) {
			ne.printStackTrace(System.err);
			System.exit(0);
		}
		System.out.println("Got QueueConnectionFactory " + qcf.toString());

		// create QueueConnection
		try {
			qc = qcf.createQueueConnection();
		} catch (JMSException jmse) {
			jmse.printStackTrace(System.err);
			System.exit(0);
		}
		System.out.println("Got QueueConnection " + qc.toString());

		// create QueueSession
		try {
			qsess = qc.createQueueSession(false, 0);
		} catch (JMSException jmse) {
			jmse.printStackTrace(System.err);
			System.exit(0);
		}
		System.out.println("Got QueueSession " + qsess.toString());

		// lookup Queue
		try {
			q = (Queue) ctx.lookup(queue);
		} catch (NamingException ne) {
			ne.printStackTrace(System.err);
			System.exit(0);
		}
		System.out.println("Got Queue " + q.toString());

		// create QueueSender
		try {
			qsndr = qsess.createSender(q);
		} catch (JMSException jmse) {
			jmse.printStackTrace(System.err);
			System.exit(0);
		}
		System.out.println("Got QueueSender " + qsndr.toString());

		// create TextMessage
		try {
			message = qsess.createTextMessage();
		} catch (JMSException jmse) {
			jmse.printStackTrace(System.err);
			System.exit(0);
		}
		System.out.println("Got TextMessage " + message.toString());

		// set message text in TextMessage
		try {
			message.setText(messageText);
		} catch (JMSException jmse) {
			jmse.printStackTrace(System.err);
			System.exit(0);
		}
		System.out.println("Set text in TextMessage " + message.toString());

		// send message
		try {
			qsndr.send(message);
		} catch (JMSException jmse) {
			jmse.printStackTrace(System.err);
			System.exit(0);
		}
		System.out.println("Sent message ");

		// clean up
		try {
			message = null;
			qsndr.close();
			qsndr = null;
			q = null;
			qsess.close();
			qsess = null;
			qc.close();
			qc = null;
			qcf = null;
			ctx = null;
		} catch (JMSException jmse) {
			jmse.printStackTrace(System.err);
		}
		System.out.println("Cleaned up and done.");
	}

	public static void main(String[] args) {
		sendMessage("hello from sendMessage() with 1 arg");
		sendMessage("t3://localhost:7101", "weblogic", "weblogic1",
				"jms/MarksConnectionFactory", "jms/MarksQueue",
				"hello from sendMessage() with 6 args");
	}

}

Add Your Comment