Home > Oracle MiddleWare, WebLogic > Java JMS Client

Java JMS Client


Well this code has been taken from sample code from Oracle JMS Sender/Receiver.

Had you followed my previous post on JMS configuration then below the source code should work fine, else you might want to modify connection factory, queue, weblogic server credentials and weblogic server port. Rest all should work fine. Good Luck!

Here is the Source code for JMS Sender. Run this program…
package sample.queue;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Hashtable;
import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/** This example shows how to establish a connection
 * and send messages to the JMS queue. The classes in this
 * package operate on the same JMS queue. Run the classes together to
 * witness messages being sent and received, and to browse the queue
 * for messages. The class is used to send messages to the queue.
 *
 * @author Copyright (c) 1999,2010, Oracle and/or its affiliates. All Rights Reserved.

* @modified Karun Chennuri
 */
public class QueueSend
{
 // Defines the JNDI context factory.
 public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";

// Defines the JMS context factory.
 public final static String JMS_FACTORY="jms/AlertConnectFactory"; //This should match your configuration

// Defines the queue.
 public final static String QUEUE="jms/AlertQueue"; //This should match your configuration

private QueueConnectionFactory qconFactory;
 private QueueConnection qcon;
 private QueueSession qsession;
 private QueueSender qsender;
 private Queue queue;
 private TextMessage msg;

/**
 * Creates all the necessary objects for sending
 * messages to a JMS queue.
 *
 * @param ctx JNDI initial context
 * @param queueName name of queue
 * @exception NamingException if operation cannot be performed
 * @exception JMSException if JMS fails to initialize due to internal error
 */
 public void init(Context ctx, String queueName)
 throws NamingException, JMSException
 {
 qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
 qcon = qconFactory.createQueueConnection();
 qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
 queue = (Queue) ctx.lookup(QUEUE);
 qsender = qsession.createSender(queue);
 msg = qsession.createTextMessage();
 qcon.start();
 }

/**
 * Sends a message to a JMS queue.
 *
 * @param message message to be sent
 * @exception JMSException if JMS fails to send message due to internal error
 */
 public void send(String message) throws JMSException {
 msg.setText(message);
 qsender.send(msg);
 }

/**
 * Closes JMS objects.
 * @exception JMSException if JMS fails to close objects due to internal error
 */
 public void close() throws JMSException {
 qsender.close();
 qsession.close();
 qcon.close();
 }
 /** main() method.
 *
 * @param args WebLogic Server URL
 * @exception Exception if operation fails
 */
 public static void main(String[] args) throws Exception {
 InitialContext ic = getInitialContext("t3://localhost:7001");
 QueueSend qs = new QueueSend();
 qs.init(ic, QUEUE);
 readAndSend(qs);
 qs.close();
 }

private static void readAndSend(QueueSend qs)
 throws IOException, JMSException
 {
 BufferedReader msgStream = new BufferedReader(new InputStreamReader(System.in));
 String line=null;
 boolean quitNow = false;
 do {
 System.out.print("Enter message (\"quit\" to quit): \n");
 line = msgStream.readLine();
 if (line != null && line.trim().length() != 0) {
 qs.send(line);
 System.out.println("JMS Message Sent: "+line+"\n");
 quitNow = line.equalsIgnoreCase("quit");
 }
 } while (! quitNow);

}

private static InitialContext getInitialContext(String url)
 throws NamingException
 {
 Hashtable<String,String> env = new Hashtable<String,String>();
 env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
 env.put(Context.PROVIDER_URL, url);
 env.put(Context.SECURITY_PRINCIPAL, "weblogic");
 env.put(Context.SECURITY_CREDENTIALS, "<mypassword>"); //replace with your password

return new InitialContext(env);
 }

}

Here is the source code for Receiver. Run this program…

package sample.queue;

import java.util.Hashtable;
import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 * This example shows how to establish a connection to
 * and receive messages from a JMS queue. The classes in this
 * package operate on the same JMS queue. Run the classes together to
 * witness messages being sent and received, and to browse the queue
 * for messages. This class is used to receive and remove messages
 * from the queue.
 *
 * @author Copyright (c) 1999,2010, Oracle and/or its affiliates. All Rights Reserved.
 * @modified Karun Chennuri
 */
public class QueueReceive implements MessageListener
{
 // Defines the JNDI context factory.
 public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";

// Defines the JMS connection factory for the queue.
 public final static String JMS_FACTORY="jms/AlertConnectFactory";

// Defines the queue.
 public final static String QUEUE="jms/AlertQueue";

private QueueConnectionFactory qconFactory;
 private QueueConnection qcon;
 private QueueSession qsession;
 private QueueReceiver qreceiver;
 private Queue queue;
 private boolean quit = false;

/**
 * Message listener interface.
 * @param msg message
 */
 public void onMessage(Message msg)
 {
 try {
 String msgText;
 if (msg instanceof TextMessage) {
 msgText = ((TextMessage)msg).getText();
 } else {
 msgText = msg.toString();
 }

System.out.println("Message Received: "+ msgText );

if (msgText.equalsIgnoreCase("quit")) {
 synchronized(this) {
 quit = true;
 this.notifyAll(); // Notify main thread to quit
 }
 }
 } catch (JMSException jmse) {
 System.err.println("An exception occurred: "+jmse.getMessage());
 }
 }

/**
 * Creates all the necessary objects for receiving
 * messages from a JMS queue.
 *
 * @param ctx JNDI initial context
 * @param queueName name of queue
 * @exception NamingException if operation cannot be performed
 * @exception JMSException if JMS fails to initialize due to internal error
 */
 public void init(Context ctx, String queueName)
 throws NamingException, JMSException
 {
 qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);
 qcon = qconFactory.createQueueConnection();
 qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
 queue = (Queue) ctx.lookup(queueName);
 qreceiver = qsession.createReceiver(queue);
 qreceiver.setMessageListener(this);
 qcon.start();
 }

/**
 * Closes JMS objects.
 * @exception JMSException if JMS fails to close objects due to internal error
 */
 public void close()throws JMSException
 {
 qreceiver.close();
 qsession.close();
 qcon.close();
 }
/**
 * main() method.
 *
 * @param args WebLogic Server URL
 * @exception Exception if execution fails
 */

public static void main(String[] args) throws Exception {
 InitialContext ic = getInitialContext("t3://localhost:7001");
 QueueReceive qr = new QueueReceive();
 qr.init(ic, QUEUE);

System.out.println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");

// Wait until a "quit" message has been received.
 synchronized(qr) {
 while (! qr.quit) {
 try {
 qr.wait();
 } catch (InterruptedException ie) {}
 }
 }
 qr.close();
 }

private static InitialContext getInitialContext(String url)
 throws NamingException
 {
 Hashtable<String,String> env = new Hashtable<String,String>();
 env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
 env.put(Context.PROVIDER_URL, url);
 env.put(Context.SECURITY_PRINCIPAL, "weblogic");
 env.put(Context.SECURITY_CREDENTIALS, "<mypassword>");
 return new InitialContext(env);
 }

}
Advertisements
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: