Java Messaging Service
Java Messaging Service is an API which is part of J2EE. This Includes the following tree structure
1.JMS Server
2. JMS Module
3. Connection Factories
4. Queues, Distributed Queues.
5. Topics , Distributed Topics1.JMS Server Setup Using Admin Console :
Step 1: Login to your Weblogic Admin Console no matter which version you use.
Step 2: Click on the JMS Servers under Messaging in Services section. In the below picture the default WebLogic JMS servers are displayed. Click New to configure a new JMS server.
Step 3 : Create New JMS Server
Create New JMS Server |
Step 4: Mapping of the JMS server to one of the WebLogic server instance
Select persistence Store |
Step 5: Select the created Persistence store for the JMS server name JMSServer1
Step 5 : Activate the above changes .
Similarly you can Create JMS Servers with Cluster Option by choosing Cluster in the Target option.
2. JMS Module
Create a JMS module which holds the JMS system resources like queues, topics, connection factories etc.
Step1 : Click New.
Provide a name to the System module
Step2 : Select the WebLogic
server instance where this JMS system module will be deployed.
Click on Finish |
JMS System module successfully created.
3. Connection Factories
Configure a JMS Connection factory through Admin console
Step1 : Click on the New button to create them.
Step2 :Select Connection Factory resource
Step3 : Provide a name and JNDI name to the connection factory resource. This
JNDI name will be used in the client code to talk to the connection factory
object
Step 4 : Select the Target resource
Step5 : Connection factory resource will be created successfully and activated.
4. Queues, Distributed Queues.
Queues, Distributed Queues : Point-to-Point Messaging
The receiver acknowledges the successful processing of a message.
Steps to Configure a Queue
Step 1 : Create a JMS Queue resource. Click New under the configuration tab as shown in the previous screenshot.
Step 2 : Select the type of resource as Queue.
Step3 : Provide a Queue name and JNDI name to this new resource.
Step 4: Click on the "Create a New Subdeployment"
Step 6: Select the Target JMS Server :
Step 7: Save the changes and activate.
Now lets experiment with sample QueueSend, QueueReceiver JMS client programs.
Step 9: Run the program
Queues, Distributed Queues : Point-to-Point Messaging
When there is JMS Client that sends a message through WebLogic JMS destination there would be each message has only
one consumer at a time.
A sender and a receiver
of a message have to be online on timing dependencies. The receiver can fetch the message at any point of time The receiver acknowledges the successful processing of a message.
Steps to Configure a Queue
Step 1 : Create a JMS Queue resource. Click New under the configuration tab as shown in the previous screenshot.
Step3 : Provide a Queue name and JNDI name to this new resource.
Step 4: Click on the "Create a New Subdeployment"
Give the Subdeployment Name |
Step 6: Select the Target JMS Server :
Step 7: Save the changes and activate.
Now lets experiment with sample QueueSend, QueueReceiver JMS client programs.
QueueSend.java
package jms.test; import java.io.*; import java.util.Hashtable; import javax.jms.JMSException; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSender; import javax.jms.QueueSession; import javax.jms.Session; import javax.jms.TextMessage; 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="jms.test.QCF"; public final static String QUEUE="jms.test.TestQ"; 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 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 { String line="Test Message Body with counter = "; BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); boolean readFlag=true; System.out.println("\n\tStart Sending Messages (Enter QUIT to Stop):\n"); while(readFlag) { System.out.print(""); String msg=br.readLine(); if(msg.equals("QUIT") || msg.equals("quit")) { qs.send(msg); System.exit(0); } qs.send(msg); System.out.println(); } br.close(); } private static InitialContext getInitialContext(String url) throws NamingException { Hashtable env= new Hashtable (); env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY); env.put(Context.PROVIDER_URL, url); return new InitialContext(env); } }
QueueReceive.java
package jms.test; 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="jms.test.QCF"; public final static String QUEUE="jms.test.TestQ"; 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 { HashtableStep 8: Compile the above two java programs.env= new Hashtable (); env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY); env.put(Context.PROVIDER_URL, url); return new InitialContext(env); } }
javac -d . Queue*.java
Step 9: Run the program
java jms.test.QueueSend t3://192.168.33.100:7011 java jms.test.QueueReceieve t3://192.168.33.100:7011
Sample QueueSend, QueueReceive execution to test Point-to-Point Messaging. |
Note: In the program if you are unable to compile change the HashTable line...
Hashtable<String,String> env= new Hashtable<String,String>();
No comments:
Post a Comment