mardi 12 octobre 2010

J2EE : envoyer un message JMS

Voici la marche à suivre :

1) récuperer le contexte JNDI
(ex: de valeurs:
- pour weblo l'url de t3://orchestre.si.fr:11133
- jndi.jms.fileretourvaloClassique=jms/retourValorisationQueue


jndiContext = InitialContextManager.getInitialContext(urlAnnuaireJndiDestination);


2) récupérer la "connexion factory" et la queue :

connectionFactory = (QueueConnectionFactory)
jndiContext.lookup(PropertiesManager.getInstance().getString(
"jndi.jms.connectionfactory"));

destQueue = (Queue) jndiContext.lookup(nomJndiFileDestination);


3) Une fois la connexion factory, recupérer la queue Session, et un sender, message

connection = connectionFactory.createQueueConnection();
session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

qSender = session.createSender(destQueue);

ObjectMessage message = session.createObjectMessage();
message.setJMSCorrelationID(idMessage);
message.setObject(objetAEnvoyer);




Voici un exemple complet:


/**
*
* @param urlAnnuaireJndiDestination String serveur (jndi)
* @param nomJndiFileDestination String file JMS (jndi)
* @throws ServiceJMSException
*/
public void init(String urlAnnuaireJndiDestination,
String nomJndiFileDestination) throws ServiceJMSException {
try {
//On garde ces 2 paramètres pour faire un réinit si besoin
urlAnnuaireJndiDestinationReinit=urlAnnuaireJndiDestination;
nomJndiFileDestinationReinit=nomJndiFileDestination;

jndiContext = InitialContextManager.getInitialContext(
urlAnnuaireJndiDestination);
connectionFactory = (QueueConnectionFactory)
jndiContext.lookup(PropertiesManager.getInstance().getString(
"jndi.jms.connectionfactory"));

destQueue = (Queue) jndiContext.lookup(nomJndiFileDestination);
logger.info("JMS Initialisation terminée");
}
catch (Exception e) {
logger.fatal("JMS Initialisation en erreur",e);
throw new ServiceJMSException(e);
}

private synchronized void essayerEnvoyerMessage(Serializable objetAEnvoyer, String idMessage,String replyServerName, String replyQueueName) throws JMSException, ServiceJMSException {
if(connectionFactory==null ){
logger.error("JMS Connection Factory null, tentative de réinitialisation.");
init(urlAnnuaireJndiDestinationReinit, nomJndiFileDestinationReinit);
}

connection = connectionFactory.createQueueConnection();
session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

qSender = session.createSender(destQueue);

ObjectMessage message = session.createObjectMessage();
message.setJMSCorrelationID(idMessage);
message.setObject(objetAEnvoyer);

//message.setJMSExpiration(30000);

if(replyServerName!=null){
message.setStringProperty(REPLY_SERVER_NAME,replyServerName);
}
if(replyQueueName!=null){
message.setStringProperty(REPLY_QUEUE_NAME,replyQueueName);
}

qSender.send(message);

// Release Sender
if (qSender != null) {
try {
qSender.close();
} catch (JMSException vJMSException) {
logger.error("Error close QueueSender " + vJMSException.getStackTrace());
}
}

//Release QueueSession
if (session != null) {
try {
session.close();
} catch (JMSException vJMSException) {
logger.error("Error close QueueSession " + vJMSException.getStackTrace());
}
}

//Release QueueConnection
if (connection != null) {
try {
connection.close();
} catch (JMSException vJMSException) {
logger.error("Error close QueueConnection " + vJMSException.getStackTrace());
}
}
}

Aucun commentaire:

Enregistrer un commentaire