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