WebLogic JMS (Point to Point) feature using a Queue

The following article shows a simple usage of WebLogic JMS  Point to Point feature using a Queue.

JMS supports two messaging models: point-to-point (PTP) and publish/subscribe (pub/sub). The messaging models are very similar, except for the following differences:

  • PTP messaging model enables the delivery of a message to exactly one recipient.
  • Pub/sub messaging model enables the delivery of a message to multiple recipients.

The point-to-point (PTP) messaging model enables one application to send a message to another. PTP messaging applications send and receive messages using named Queues. A queue sender (producer) sends a message to a specific queue. A queue receiver (consumer) receives messages from a specific queue.

The following figure illustrates PTP messaging.

Steps to configure JMS Point to Point Feature (JMS  Queue)

1.  Configure JMS Server

a.  Login into the WebLogic Admin Console, navigate to Services –> Messaging –> JMS Servers.

JMS Server acts as a management containers for the queues and topics.

b. Create a JMS Server as below.

c. Target the JMS Server to any one of the WebLogic Servers.

2. Create JMS System Module to hold the Queues / Topics.

a. Navigate to Services  –> Messaging –> JMS Modules from the left panel.

b.  Target the JMS System Module to the server on which the JMS Server is targeted.

3. Create a Sub Deployment.

a. Click on the newly created JMS SystemModule and navigate to the SubDeployments tab

b. Target the Sub Deployment to the created JMS Server.

4.  Create JMS Connection Factory.

a. Under the configuration tab of the JMS SystemModule, click New to add resources like Connection Factories, Queues,Topics.

b. Create a JMS Connection Factory, specify a JNDI name.

c. Target the Connection Factory to the Sub Deployment.

5. Create a JMS Queue (Point to Point Messaging Model)

a. Create a Queue from the configuration tab of the JMS SystemModule.

b. Target the  Queue  to the Sub Deployment.

c . Navigate to the JMS Resources page and you would see the Connection Factory and the JMS Queue created.

6. Testing the setup

a. Open  command prompt, and set the class path.

Note: You can run the setDomainEnv script present under the  <Domain>/bin folder

b. Compile and execute the below, QueueSend.java program to send a message to the 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;

public class QueueSend

{

public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";

public final static String JMS_FACTORY="CF1";

public final static String QUEUE="Queue1";

private QueueConnectionFactory qconFactory;

private QueueConnection qcon;

private QueueSession qsession;

private QueueSender qsender;

private Queue queue;

private TextMessage msg;

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);

qsender = qsession.createSender(queue);

msg = qsession.createTextMessage();

qcon.start();

}

public void send(String message) throws JMSException {

msg.setText(message);

qsender.send(msg);

}

public void close() throws JMSException {

qsender.close();

qsession.close();

qcon.close();

}

public static void main(String[] args) throws Exception {

if (args.length != 1) {

System.out.println("Usage: java examples.jms.queue.QueueSend WebLogicURL");

return;

}

InitialContext ic = getInitialContext(args[0]);

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);

return new InitialContext(env);

}

}

 

********************************************************

java QueueSend t3://localhost:7001

c.  Compile and execute the below QueueReceive.java program to retrieve the message from the queue.

***********************************************************

 

import java.util.Hashtable;

import javax.jms.*;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

public class QueueReceive implements MessageListener

{

public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";

public final static String JMS_FACTORY="CF1";

public final static String QUEUE="Queue1";

private QueueConnectionFactory qconFactory;

private QueueConnection qcon;

private QueueSession qsession;

private QueueReceiver qreceiver;

private Queue queue;

private boolean quit = false;

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());

}

}

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();

}

public void close()throws JMSException

{

qreceiver.close();

qsession.close();

qcon.close();

}

public static void main(String[] args) throws Exception {

if (args.length != 1) {

System.out.println("Usage: java examples.jms.queue.QueueReceive WebLogicURL");

return;

}

InitialContext ic = getInitialContext(args[0]);

QueueReceive qr = new QueueReceive();

qr.init(ic, QUEUE);

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

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);

return new InitialContext(env);

}}

 

***********************************************************

java QueueReceive t3://localhost:7001

Further Reading :

http://download.oracle.com/docs/cd/E12840_01/wls/docs103/jms/fund.html#wp1071729

Cheers,

Wonders Team. 🙂

Latest Comments

  1. Mainak March 2, 2011
    • Administrator March 3, 2011
  2. Louise June 7, 2011
    • Administrator June 8, 2011
  3. Mithu July 21, 2011
    • divya August 4, 2011
  4. Gaurav July 21, 2011
    • anandraj July 22, 2011
  5. sudhakar September 22, 2011
    • Administrator September 27, 2011
  6. Saravanan January 11, 2012
  7. jasheer June 12, 2012
    • anandraj June 12, 2012
  8. Bijay Yerra July 16, 2012
    • Administrator August 21, 2012
  9. Shanker November 2, 2012
    • Administrator November 4, 2012
  10. Rajiv November 30, 2012
    • anandraj December 13, 2012
  11. ramesh December 28, 2012
    • anandraj December 30, 2012
  12. shishupal February 4, 2013
  13. xianhua June 15, 2014
    • Administrator June 18, 2014
  14. Ana April 16, 2015
    • Administrator April 17, 2015
      • Ana April 17, 2015
        • Administrator April 19, 2015
  15. purushotham August 12, 2015
    • Administrator August 19, 2015
  16. Rahul Sohal October 1, 2015
    • Administrator March 16, 2016
  17. ramya March 20, 2016
  18. Sabari May 10, 2017
    • Administrator June 6, 2017

Leave a Reply