標準のJMSAPIステップ:
1。サーバーのアクセス詳細を使用してjavax.naming.Contextを作成します
context = new InitialContext(environment)
2.コンテキストでjavax.jms.QueueConnectionFactoryを検索します。工場名はJMSサーバーに固有です
factory = (QueueConnectionFactory)context.lookup(factoryName)
3.javax.jms.QueueConnectionを作成します
connection = factory.createQueueConnection(...)
4.javax.jms.QueueSessionを作成します
session = connection.createQueueSession(...)
5.コンテキストでjavax.jms.Queueを検索します
queue = (Queue) context.lookup(qJndiName)
今までは送信と同じです...
6。セッションでjavax.jms.QueueReceiverを作成します
receiver = session.createReceiver(queue)
7. JMS APIは、メッセージを取得する2つの方法を提供します。7.aいずれかのメソッド
でメッセージを待機します
。7.bクラスにjavax.jms.MessageListenerを実装し、リスナーとして登録します。receiver.receive()
receiver.setMessageListener(this)
JMS APIはonMessage()
、新しいメッセージが到着するたびにメソッドを呼び出します。8
.リスナーを開始することを忘れないでください。
connection.start()
9.コンテキストを閉じます(同じプログラムから複数のJMSサーバーにアクセスする場合は非常に重要です)。
context.close()
上記は、スタンドアロンアプリケーションの典型的なソリューションです。EJB環境では、メッセージ駆動型Beanを使用する必要があります。それらのinoはhttp://java.sun.com/javaee/6/docs/tutorial/doc/gipko.htmlにあり、チュートリアルはhttp://schuchert.wikispaces.com/EJB3+Tutorial+5+にあります。 -+ Message + Driven + Beans
これがあなたが求めた実際の例です:
import java.util.Hashtable;
import javax.naming.*;
import javax.jms.*;
public class JMSJNDISample implements MessageListener {
public static final String JNDI_URL = "jnp://localhost:1099";
public static final String JNDI_CONTEXT_FACTORY = "org.jnp.interfaces.NamingContextFactory";
public static final String JMS_USER = null;
public static final String JMS_PASSWORD = null;
public static final String JMS_CONNECTION_FACTORY = "MyConnectionFactory";
public static final String QUEUE_JNDI_NAME = "ReceiverQueue";
QueueConnection qConn = null;
QueueSession qSession = null;
QueueSender qSender = null;
QueueReceiver qReceiver = null;
public JMSJNDISample () {
}
public void init() throws JMSException, NamingException {
// Set up JNDI Context
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_CONTEXT_FACTORY);
env.put(Context.PROVIDER_URL, JNDI_URL);
if (JMS_USER != null)
env.put(Context.SECURITY_PRINCIPAL, JMS_USER);
if (JMS_PASSWORD != null)
env.put(Context.SECURITY_CREDENTIALS, JMS_PASSWORD);
Context jndiContext = new InitialContext(env);
// Lookup queue connection factory
QueueConnectionFactory cFactory = (QueueConnectionFactory)jndiContext.lookup(JMS_CONNECTION_FACTORY);
// Create Connection
if (JMS_USER == null || JMS_PASSWORD == null)
qConn = cFactory.createQueueConnection();
else {
qConn = cFactory.createQueueConnection(JMS_USER, JMS_PASSWORD);
}
// Create Session
qSession = qConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
// Lookup Queue
Queue queue = (Queue) jndiContext.lookup(QUEUE_JNDI_NAME);
// Create Queue Sender
qSender = qSession.createSender(queue);
// Create Queue Receiver
qReceiver = qSession.createReceiver(queue);
qReceiver.setMessageListener(this);
// Start receiving messages
qConn.start();
// Close JNDI context
jndiContext.close();
}
public void sendMessage (String str) throws JMSException {
TextMessage msg = qSession.createTextMessage(str);
qSender.send(msg);
}
public void onMessage (Message message) {
try {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage)message;
System.out.println("Text Message Received: "+textMessage.getText());
} else {
System.out.println(message.getJMSType()+" Message Received");
}
} catch (JMSException je) {
je.printStackTrace();
}
}
public void destroy() throws JMSException {
if (qSender != null) qSender.close();
if (qReceiver != null) qReceiver.close();
if (qSession != null) qSession.close();
if (qConn != null) qConn.close();
}
public static void main(String args[]) {
try {
JMSJNDISample sample = new JMSJNDISample();
// Initialize connetion
sample.init();
// Send Message
sample.sendMessage("Hello World");
// Wait 2 sec for answer
Thread.sleep(2000);
// Disconnect
sample.destroy();
} catch (Exception e) {
e.printStackTrace();
}
}
}