Requestor.java -- EAI를 사용할 때 필요합니다.
package com.jboss.jms.client;
import java.util.Hashtable;
import java.util.UUID;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Requestor {
private String requestQueueName = "/queue/A";
private String replyQueueName = "/queue/B";
private MessageConsumer replyConsumer;
Context ic = null;
public void send() throws Exception {
ConnectionFactory cf = null;
Connection connection = null;
try {
// ic = new InitialContext();
ic = getInitialContext();
cf = (ConnectionFactory) ic.lookup("/ConnectionFactory");
// Request Queue Setting
Queue queue = (Queue) ic.lookup(requestQueueName);
System.out.println("Queue " + requestQueueName + " exists");
// ReplyQueue Lookup
Destination replyQueue = (Destination) ic.lookup(replyQueueName);
// Connect Create
connection = cf.createConnection();
connection.start();
// Session Create
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer sender = session.createProducer(queue);
TextMessage message = session.createTextMessage("Choi Ji-Woong");
// Message property setting for reply
message.setJMSReplyTo(replyQueue);
String uuid = (UUID.randomUUID()).toString();/*
* generate a unique
* id
*/
message.setJMSCorrelationID(uuid);
// Send message
sender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// sender.setTimeToLive(10000);
sender.send(message);
System.out.println("The message was successfully sent to the "
+ queue.getQueueName() + " queue");
System.out.println("Sent request");
System.out.println("\tTime: " + System.currentTimeMillis()
+ " ms");
System.out.println("\tMessage ID: " + message.getJMSMessageID());
System.out
.println("\tCorrel. ID: " + message.getJMSCorrelationID());
System.out.println("\tReply to: " + message.getJMSReplyTo());
System.out.println("\tContents: " + message.getText());
// Wait Reply Message from Reply Queue
replyConsumer = session.createConsumer(replyQueue, "JMSCorrelationID = '" + uuid + "'");
System.out.println("\tMessage Selector : " + replyConsumer.getMessageSelector());
Message msg = replyConsumer.receive(10000); // wait reply message for 5 seconds
if (msg instanceof TextMessage) {
TextMessage replyMessage = (TextMessage) msg;
System.out.println("Received reply ");
System.out.println("\tTime: "
+ System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: "
+ replyMessage.getJMSMessageID());
System.out.println("\tCorrel. ID: "
+ replyMessage.getJMSCorrelationID());
System.out.println("\tReply to: "
+ replyMessage.getJMSReplyTo());
System.out.println("\tContents: " + replyMessage.getText());
}
} finally {
if (ic != null) {
try {
ic.close();
} catch (Exception e) {
throw e;
}
}
// ALWAYS close your connection in a finally block to avoid leaks.
// Closing connection also takes care of closing its related objects
// e.g. sessions.
closeConnection(connection);
}
}
private Context getInitialContext() {
try {
Hashtable<Object, String> env = new Hashtable<Object, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, "localhost:1199");
Context ctx = new InitialContext(env);
return ctx;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private void closeConnection(Connection con) {
try {
if (con != null) {
con.close();
}
} catch (JMSException jmse) {
System.out.println("Could not close connection " + con
+ " exception was " + jmse);
}
}
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
new Requestor().send();
}
}
Replier.java
package com.jboss.jms.client;
import java.util.Hashtable;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Replier implements MessageListener {
private String requestQueueName = "/queue/A";
private Session session;
private boolean quit = false;
Context ic = null;
public void waitMessage() throws Exception {
ConnectionFactory cf = null;
Connection connection = null;
try {
// ic = new InitialContext();
ic = getInitialContext();
cf = (ConnectionFactory) ic.lookup("/ConnectionFactory");
// Connect Create
connection = cf.createConnection();
// Session Create
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Request Queue Setting
Queue queue = (Queue) ic.lookup(requestQueueName);
System.out.println("Queue " + requestQueueName + " exists");
MessageConsumer consumer = session.createConsumer(queue);
consumer.setMessageListener(this);
connection.start();
} catch (Exception ex) {
if (ic != null) {
try {
ic.close();
} catch (Exception e) {
throw e;
}
}
// ALWAYS close your connection in a finally block to avoid leaks.
// Closing connection also takes care of closing its related objects
// e.g. sessions.
closeConnection(connection);
}
}
public void onMessage(Message message) {
try {
if ((message instanceof TextMessage)
&& (message.getJMSReplyTo() != null)) {
TextMessage requestMessage = (TextMessage) message;
System.out.println("Received request");
System.out.println("\tTime: "
+ System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: "
+ requestMessage.getJMSMessageID());
System.out.println("\tCorrel. ID: "
+ requestMessage.getJMSCorrelationID());
System.out.println("\tReply to: "
+ requestMessage.getJMSReplyTo());
System.out.println("\tRecv Contents: "
+ requestMessage.getText());
String contents = requestMessage.getText() + ", Nice to meet you! ";
Destination replyDestination = message.getJMSReplyTo();
System.out.println("\tDestination : " + ((Queue)replyDestination).getQueueName());
Queue replyQueue = (Queue) ic.lookup("/queue/B");
MessageProducer replyProducer = session.createProducer(replyQueue);
TextMessage replyMessage = session.createTextMessage();
replyMessage.setText(contents);
replyMessage.setJMSCorrelationID(requestMessage
.getJMSCorrelationID());
replyProducer.send(replyMessage);
System.out.println("Sent reply");
System.out.println("\tTime: "
+ System.currentTimeMillis() + " ms");
System.out.println("\tMessage ID: "
+ replyMessage.getJMSMessageID());
System.out.println("\tCorrel. ID: "
+ replyMessage.getJMSCorrelationID());
System.out.println("\tReply to: "
+ replyMessage.getJMSReplyTo());
System.out.println("\tContents: " + replyMessage.getText());
if (contents.equalsIgnoreCase("quit")) {
synchronized (this) {
quit = true;
this.notifyAll(); // Notify main thread to quit
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private Context getInitialContext() {
try {
Hashtable<Object, String> env = new Hashtable<Object, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, "localhost:1199");
Context ctx = new InitialContext(env);
return ctx;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private void closeConnection(Connection con) {
try {
if (con != null) {
con.close();
}
} catch (JMSException jmse) {
System.out.println("Could not close connection " + con
+ " exception was " + jmse);
}
}
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Replier replier = new Replier();
replier.waitMessage();
System.out
.println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");
// Wait until a "quit" message has been received.
synchronized (replier) {
while (!replier.quit) {
try {
replier.wait();
} catch (InterruptedException ie) {
}
}
}
}
}


Replier.java


