Implementing Point to Point communication in Oracle9iAS Containers for J2EE

Date: 22-Jul-2002

This article explains how to implement point to point communication in Oracle9iAS Containers for J2EE (OC4J). The component writing to the queue and the component reading from the queue can be any one of the following: a java application, a servlet, a JSP or an EJB. For implementing asychronous communication, Message Driven Beans(MDBs) are used. Following are the sections covered.

Introduction

Java Message Service (JMS) allows Java programs to exchange messages with other Java programs sharing a messaging system. A  messaging system accepts messages from programs called "producers" and delivers them to programs called "consumers". Messaging systems enable Java clients to use their services by supplying a Java layer called a JMS Provider, which implements JMS for the specific product.

Point to Point Communication Model

The point-to-point messaging model is based on message Queues. A QueueSender (producer) sends a message to a specified Queue. A QueueReceiver (consumer) receives messages from the Queue. A Queue can have multiple QueueSenders and QueueReceivers, but an individual message can only be delivered to one QueueReceiver.

Setting Up XML Files

This needs to be set in case you are running J2EE applications. For MDBs, this needs to be set. The file jms.xml which is located in <OC4J_HOME>/config directory needs to be configured to set up a JMS queue and queue connection factory.

       <queue name="Simple Queue" location="jms/simpleQueue"> 
         <description>A simple queue</description>
       </queue> 
       <queue-connection-factory name="Simple Queue Connection Factory" 
          location="jms/simpleQueueConnectionFactory">
         <description>A simple queue connection factory</description> 
       </queue-connection-factory>

Writing Messages to a Queue

The following snippet writes message to a queue. The packages javax.jms.*, javax.naming.* and  java.util.* should be imported in the Java source. 
       // Get the connection factory 
       QueueConnectionFactory connectionFactory = 
       (QueueConnectionFactory)new InitialContext().
             lookup("java:comp/env/jms/simpleQueueConnectionFactory");

       QueueConnection connection = connectionFactory.
                              createQueueConnection();        
       connection.start();        
       // Create a session and lookup the JNDI tree for the queue 
       QueueSession queueSession = connection.createQueueSession
                                   (false, Session.AUTO_ACKNOWLEDGE);          
       Queue queue = (Queue)new InitialContext().
                     lookup("java:comp/env/jms/simpleQueue"); 
       // Create a sender, create message, set properties and send
       // message to the queue 

       QueueSender sender = queueSession.createSender(queue); 
       Message message = queueSession.createMessage(); 
       message.setJMSType("theMessage"); 
       message.setLongProperty("time", System.currentTimeMillis()); 
       message.setStringProperty("subject", "Test Message Now"); 
       message.setStringProperty("message", "Hi"); 
       sender.send(message); 
       // Close resources 
       sender.close(); 
       queueSession.close(); 
       connection.close();

Reading Messages from a Queue

       // Get the connection factory 
       QueueConnectionFactory connectionFactory = 
       (QueueConnectionFactory)new InitialContext().lookup
           ("java:comp/env/jms/simpleQueueConnectionFactory");        
       QueueConnection connection = connectionFactory.
                               createQueueConnection();        
       connection.start();        
       // Create a session and lookup the JNDI tree for the queue 
       QueueSession queueSession = connection.createQueueSession
                                  (false, Session.AUTO_ACKNOWLEDGE);          
       Queue queue = (Queue)new InitialContext().lookup

                                  ("java:comp/env/jms/demoQueue"); 
       // Create a receiver, read the message and print it
       QueueReceiver receiver = queueSession.createReceiver(queue); 
       Message message = receiver.receive(); 
       System.out.println(message.toString()); 
       // Close resources 
       receiver.close(); 
       queueSession.close(); 
       connection.close(); 

E-mail this page
Printer View Printer View
Oracle Is The Information Company About Oracle | Oracle RSS Feeds | Careers | Contact Us | Site Maps | Legal Notices | Terms of Use | Privacy