lundi 3 mai 2010

J2EE : envoyer message file JMS

Voici, une exemple de code standard d'envoi dans une file JMS :

Tout d'abord l'initialisation :
1) recuperation du contexte JNDI :
jndiContext = InitialContextManager.getInitialContext(
urlAnnuaireJndiDestination);


2) recuperation du contexte JNDI de la ressources par JNDI :
connectionFactory = (QueueConnectionFactory)
jndiContext.lookup(PropertiesManager.getInstance().getString(
"jndi.jms.connectionfactory"));


3) recuperation d'une de la queue :
destQueue = (Queue) jndiContext.lookup(nomJndiFileDestination);


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);
}


Puis l'envoie proprement dit :
4) recuperation d'une connexion, d'une session, d'un sender :


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