étapes API JMS standard:
1. Créez un javax.naming.Context avec les données d'accès du serveur
context = new InitialContext(environment)
2. Levez les yeux vers javax.jms.QueueConnectionFactory dans le contexte. Nom de l'usine est spécifique au serveur JMS
factory = (QueueConnectionFactory)context.lookup(factoryName)
3. Créer un javax.jms.QueueConnection
connection = factory.createQueueConnection(...)
4. Créer un javax.jms.QueueSession
session = connection.createQueueSession(...)
5. Recherchez votre javax.jms.Queue dans le contexte
queue = (Queue) context.lookup(qJndiName)
Jusqu'à présent, il est le même que l'envoi ....
6. Créer une javax.jms.QueueReceiver avec la session
receiver = session.createReceiver(queue)
7. API JMS offre 2 façons de récupérer un message:
7 .a Attendre un message avec l'une des méthodes receiver.receive()
7.b Implémenter javax.jms.MessageListener dans votre classe et l'enregistrer comme l'auditeur
receiver.setMessageListener(this)
API JMS appellera votre méthode onMessage()
chaque fois qu'un nouveau message arrive
8. Ne pas oublier de commencer l'auditeur:
connection.start()
9 Fermer le contexte (très important, lorsque vous accédez à plusieurs serveurs JMS à partir du même programme):
context.close()
Ce qui précède est un solution typique d'une application autonome. Dans l'environnement EJB, vous devez utiliser des beans pilotés par message. Vous pouvez trouver ino sur eux sur http://java.sun.com/javaee/6/docs/tutorial/doc/gipko.html et un tutoriel sur http://schuchert.wikispaces.com/EJB3+Tutorial+5+-+Message+Driven+Beans
Voici l'exemple de travail que vous avez demandé:
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();
}
}
}
@Gandalf StormCrow: Comme il n'y a pas de réponses à propos de MDB, j'ai ajouté quelque chose à ma réponse .. –