All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.leadware.messaging.jms.tools.JmsTemplate Maven / Gradle / Ivy

The newest version!
package net.leadware.messaging.jms.tools;

/*
 * #%L
 * messaging-tools
 * $Id:$
 * $HeadURL:$
 * %%
 * Copyright (C) 2013 - 2014 Leadware
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */

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.Session;

import net.leadware.messaging.jms.tools.message.creator.MessageCreator;

import org.apache.log4j.Logger;


/**
 * Classe representant le template d'envoie/reception de message via JMS 
 * @author Jean-Jacques ETUNE NGI
 * @since 8 d?c. 2013 - 15:22:14
 */
public class JmsTemplate {
	
	/**
	 * Un logger
	 */
	private Logger log = Logger.getLogger(getClass());
	
	/**
	 * Constante de reception sans attente
	 */
	public static final long RECEIVE_TIMEOUT_NO_WAIT = -1;
	
	/**
	 * Constante de reception en attente bloquante et infinie
	 */
	public static final long RECEIVE_TIMEOUT_INDEFINITE_WAIT = 0;
	
	/**
	 * Fabrique de connection
	 */
	private ConnectionFactory connectionFactory = null;
	
	/**
	 * Etat transactionnel de la session
	 */
	private boolean sessionTransacted = false;
	
	/**
	 * Mode de validation de la session
	 */
	private int acknowledgeMode = Session.AUTO_ACKNOWLEDGE;
	
	/**
	 * Etat d'activation des ID de messages
	 */
	private boolean messageIdEnabled = true;
	
	/**
	 * Etat d'activation des timestamps de messages
	 */
	private boolean messageTimestampEnabled = true;
	
	/**
	 * Mode de livraison du message
	 */
	private int deliveryMode = Message.DEFAULT_DELIVERY_MODE;
	
	/**
	 * Priorite du message
	 */
	private int priority = Message.DEFAULT_PRIORITY;
	
	/**
	 * Duree de vie du message
	 */
	private long timeToLive = Message.DEFAULT_TIME_TO_LIVE;
	
	/**
	 * Timeout de reception
	 */
	private long receiveTimeout = RECEIVE_TIMEOUT_INDEFINITE_WAIT;
	
	/**
	 * Constructeur par defaut
	 */
	public JmsTemplate() {}
	
	/**
	 * Constructeur avec initialisation de parametres
	 * @param connectionFactory	Fabrique de connection 
	 */
	public JmsTemplate(ConnectionFactory connectionFactory) {
		this.connectionFactory = connectionFactory;
	}
	
	/**
	 * Methode d'obtention du champ "connectionFactory"
	 * @return Champ "connectionFactory"
	 */
	public ConnectionFactory getConnectionFactory() {
	
		// Renvoi de la valeur du champ
		return connectionFactory;
	}

	/**
	 * Methode de mise a jour du champ "connectionFactory"
	 * @param connectionFactory Nouvelle valeur du champ "connectionFactory"
	 */
	public void setConnectionFactory(ConnectionFactory connectionFactory) {
		
		// On verifie que la fabrique n'est pas nulle
		assert connectionFactory != null : "Jmstemplate#setConnectionFactory - Veuillez renseigner la Fabrique de connection";
		
		// Mise a jour de la valeur du champ
		this.connectionFactory = connectionFactory;
	}
	
	/**
	 * Methode d'obtention du champ "sessionTransacted"
	 * @return Champ "sessionTransacted"
	 */
	public boolean isSessionTransacted() {
	
		// Renvoi de la valeur du champ
		return sessionTransacted;
	}

	/**
	 * Methode de mise a jour du champ "sessionTransacted"
	 * @param sessionTransacted Nouvelle valeur du champ "sessionTransacted"
	 */
	public void setSessionTransacted(boolean sessionTransacted) {
	
		// Mise a jour de la valeur du champ
		this.sessionTransacted = sessionTransacted;
	}

	/**
	 * Methode d'obtention du champ "acknowledgeMode"
	 * @return Champ "acknowledgeMode"
	 */
	public int getAcknowledgeMode() {
	
		// Renvoi de la valeur du champ
		return acknowledgeMode;
	}

	/**
	 * Methode de mise a jour du champ "acknowledgeMode"
	 * @param acknowledgeMode Nouvelle valeur du champ "acknowledgeMode"
	 */
	public void setAcknowledgeMode(int acknowledgeMode) {
	
		// Mise a jour de la valeur du champ
		this.acknowledgeMode = acknowledgeMode;
	}
	
	/**
	 * Methode d'obtention du champ "messageIdEnabled"
	 * @return Champ "messageIdEnabled"
	 */
	public boolean isMessageIdEnabled() {
	
		// Renvoi de la valeur du champ
		return messageIdEnabled;
	}

	/**
	 * Methode de mise a jour du champ "messageIdEnabled"
	 * @param messageIdEnabled Nouvelle valeur du champ "messageIdEnabled"
	 */
	public void setMessageIdEnabled(boolean messageIdEnabled) {
	
		// Mise a jour de la valeur du champ
		this.messageIdEnabled = messageIdEnabled;
	}

	/**
	 * Methode d'obtention du champ "messageTimestampEnabled"
	 * @return Champ "messageTimestampEnabled"
	 */
	public boolean isMessageTimestampEnabled() {
	
		// Renvoi de la valeur du champ
		return messageTimestampEnabled;
	}

	/**
	 * Methode de mise a jour du champ "messageTimestampEnabled"
	 * @param messageTimestampEnabled Nouvelle valeur du champ "messageTimestampEnabled"
	 */
	public void setMessageTimestampEnabled(boolean messageTimestampEnabled) {
	
		// Mise a jour de la valeur du champ
		this.messageTimestampEnabled = messageTimestampEnabled;
	}
	
	/**
	 * Methode d'obtention du champ "deliveryMode"
	 * @return Champ "deliveryMode"
	 */
	public int getDeliveryMode() {
	
		// Renvoi de la valeur du champ
		return deliveryMode;
	}

	/**
	 * Methode de mise a jour du champ "deliveryMode"
	 * @param deliveryMode Nouvelle valeur du champ "deliveryMode"
	 */
	public void setDeliveryMode(int deliveryMode) {
	
		// Mise a jour de la valeur du champ
		this.deliveryMode = deliveryMode;
	}

	/**
	 * Methode d'obtention du champ "priority"
	 * @return Champ "priority"
	 */
	public int getPriority() {
	
		// Renvoi de la valeur du champ
		return priority;
	}

	/**
	 * Methode de mise a jour du champ "priority"
	 * @param priority Nouvelle valeur du champ "priority"
	 */
	public void setPriority(int priority) {
	
		// Mise a jour de la valeur du champ
		this.priority = priority;
	}

	/**
	 * Methode d'obtention du champ "timeToLive"
	 * @return Champ "timeToLive"
	 */
	public long getTimeToLive() {
	
		// Renvoi de la valeur du champ
		return timeToLive;
	}

	/**
	 * Methode de mise a jour du champ "timeToLive"
	 * @param timeToLive Nouvelle valeur du champ "timeToLive"
	 */
	public void setTimeToLive(long timeToLive) {
	
		// Mise a jour de la valeur du champ
		this.timeToLive = timeToLive;
	}
	
	/**
	 * Methode d'obtention du champ "receiveTimeout"
	 * @return Champ "receiveTimeout"
	 */
	public long getReceiveTimeout() {
	
		// Renvoi de la valeur du champ
		return receiveTimeout;
	}

	/**
	 * Methode de mise a jour du champ "receiveTimeout"
	 * @param receiveTimeout Nouvelle valeur du champ "receiveTimeout"
	 */
	public void setReceiveTimeout(long receiveTimeout) {
	
		// Mise a jour de la valeur du champ
		this.receiveTimeout = receiveTimeout;
	}
	
	/**
	 * Methode de creation d'une connection
	 * @return	Connection creee
	 * @throws JMSException Exception potentielle
	 */
	public Connection createConnection() throws JMSException {
		return connectionFactory.createConnection();
	}
	
	/**
	 * Methode de creation d'une session
	 * @param connection	Connection sur laquelle on cree la session
	 * @return	Session creee
	 * @throws JMSException Eception potentielle
	 */
	public Session createSession(Connection connection) throws JMSException {

		// On verifie que la connection n'est pas nulle
		assert connection != null : "JmsTemplate#createSession - Veuillez renseigner la connection";
		
		// On retourne la session
		return connection.createSession(isSessionTransacted(), getAcknowledgeMode());
	}
	
	/**
	 * Methode d'envoie d'un message sur une destination donnee
	 * @param destination	Destination d'envoie
	 * @param messageCreator	Createur de message
	 */
	public void send(Destination destination, MessageCreator messageCreator) {
		
		// Un log
		log.debug("#send");
		
		// On verifie que la destination n'est pas nulle
		assert destination != null : "JmsTemplate#send - Veuillez renseigner la destination";
		
		// On verifie que le createur de message n'est pas nul
		assert messageCreator != null : "JmsTemplate#send - Veuillez renseigner le createur de message";
		
		// Connection JMS
		Connection connection = null;
		
		try {

			// Un log
			log.debug("#send - Creation d'une connection JMS");
			
			// Creation d'une connection
			connection = createConnection();
			
		} catch (JMSException e) {
			
			// Un log
			log.debug("#send - Erreur lors de l'envoie du message : Impossible de creer une connection JMS [" + e.getMessage() + "]");
			
			// Liberation des ressources
			releaseResources(null, null, null, connection);
			
			// On retlance
			throw new RuntimeException("#send - Erreur lors de l'envoie du message : Impossible de creer une connection JMS", e);
		}

		//  Session JMS
		Session session = null;
		
		try {

			// Un log
			log.debug("#send - Creation d'une session JMS");
			
			// Creation d'une session
			session = createSession(connection);
			
		} catch (Exception e) {
			
			// Un log
			log.debug("#send - Erreur lors de l'envoie du message : Impossible de creer une session JMS [" + e.getMessage() + "]");
			
			// Liberation des ressources
			releaseResources(null, null, session, connection);
			
			// On retlance
			throw new RuntimeException("#send - Erreur lors de l'envoie du message : Impossible de creer une session JMS", e);
		}
		
		// Producteur JMS
		MessageProducer messageProducer = null;
		
		// Un log
		log.debug("#send - Creation d'un producteur JMS");
		
		try {

			// Creation du producteur
			messageProducer = createProducer(session, destination);
			
		} catch (Exception e) {
			
			// Un log
			log.debug("#send - Erreur lors de l'envoie du message : Impossible de creer un producteur JMS [" + e.getMessage() + "]");
			
			// Liberation des ressources
			releaseResources(messageProducer, null, session, connection);
			
			// On retlance
			throw new RuntimeException("#send - Erreur lors de l'envoie du message : Impossible de creer un producteur JMS", e);
		}
		
		// Un log
		log.debug("#send - Envoie du message JMS");
		
		try {
			
			// Envoie
			messageProducer.send(messageCreator.createMessage(session), deliveryMode, priority, timeToLive);
			
		} catch (Exception e) {
			
			// Un log
			log.debug("#send - Erreur lors de l'envoie du message [" + e.getMessage() + "]");
			
			// Liberation des ressources
			releaseResources(messageProducer, null, session, connection);
			
			// On retlance
			throw new RuntimeException("#send - Erreur lors de l'envoie du message ", e);
		}
		
		// Liberation des ressources
		releaseResources(messageProducer, null, session, connection);
	}

	/**
	 * Methode de reception d'un message
	 * @param destination	Destination de reception
	 * @param messageSelector Selecteur de message
	 * @return	message recu
	 */
	public Message receive(Destination destination, String messageSelector) {
		
		// Un log
		log.debug("#receive");
		
		// On verifie que la destination n'est pas nulle
		assert destination != null : "JmsTemplate#receive - Veuillez renseigner la destination";

		// Connection JMS
		Connection connection = null;
		
		try {

			// Un log
			log.debug("#receive - Creation d'une connection JMS");
			
			// Creation d'une connection
			connection = createConnection();
			
		} catch (JMSException e) {
			
			// Un log
			log.debug("#receive - Erreur lors de la reception du message : Impossible de creer une connection JMS [" + e.getMessage() + "]");

			// Liberation des ressources
			releaseResources(null, null, null, connection);
			
			// On retlance
			throw new RuntimeException("#receive - Erreur lors de la reception du message : Impossible de creer une connection JMS", e);
		}

		try {

			// Un log
			log.debug("#receive - Demarrage de la connection JMS");

			// Demarrage de la connection
			connection.start();
			
		} catch (JMSException e) {
			
			// Un log
			log.debug("#receive - Erreur lors de la reception du message : Impossible de demarrer la connection JMS [" + e.getMessage() + "]");

			// Liberation des ressources
			releaseResources(null, null, null, connection);
			
			// On retlance
			throw new RuntimeException("#receive - Erreur lors de la reception du message : Impossible de demarrer une connection JMS", e);
		}
		
		//  Session JMS
		Session session = null;
		
		try {

			// Un log
			log.debug("#receive - Creation d'une session JMS");
			
			// Creation d'une session
			session = createSession(connection);
			
		} catch (Exception e) {
			
			// Un log
			log.debug("#receive - Erreur lors de la reception du message : Impossible de creer une session JMS [" + e.getMessage() + "]");
			
			// Liberation des ressources
			releaseResources(null, null, session, connection);
			
			// On retlance
			throw new RuntimeException("#receive - Erreur lors de la reception du message : Impossible de creer une session JMS", e);
		}

		// Consomateur JMS
		MessageConsumer messageConsumer = null;
		
		// Un log
		log.debug("#receive - Creation d'un consommateur JMS");
		
		try {

			// Creation du consommateur
			messageConsumer = createMessageConsumer(session, destination, messageSelector);
			
		} catch (Exception e) {
			
			// Un log
			log.debug("#receive - Erreur lors de la reception du message : Impossible de creer un consommateur JMS [" + e.getMessage() + "]");
			
			// Liberation des ressources
			releaseResources(null, messageConsumer, session, connection);
			
			// On retlance
			throw new RuntimeException("#send - Erreur lors de l'envoie du message : Impossible de creer un producteur JMS", e);
		}
		
		// Un log
		log.debug("#receive - Reception du message JMS");
		
		// ApplicationMessage
		Message message = null;
		
		try {
			
			// Si il n'ya pas d'attente
			if(this.receiveTimeout == RECEIVE_TIMEOUT_NO_WAIT) {
				
				// reception sans attente
				message = messageConsumer.receiveNoWait();
				
			}
			
			// Si il y a une attente non infinie
			else if(this.receiveTimeout > 0) {
				
				// reception avec attente
				message = messageConsumer.receive(this.receiveTimeout);
				
			}
			
			// Si c'est une attente infinie
			else {
				
				// reception sans attente
				message = messageConsumer.receive();
				
			}
			
		} catch (Exception e) {
			
			// Un log
			log.debug("#send - Erreur lors de la reception du message [" + e.getMessage() + "]");
			
			// Liberation des ressources
			releaseResources(null, messageConsumer, session, connection);
			
			// On relance
			throw new RuntimeException("#send - Erreur lors de la reception du message ", e);
		}
		
		// Liberation des ressources
		releaseResources(null, messageConsumer, session, connection);
		
		// On retourne le message
		return message;
	}
	
	/**
	 * Methode de reception d'un message
	 * @param destination	Destination de reception
	 * @return	message recu
	 */
	public Message receive(Destination destination) {
		
		// Appel sous-jacent
		return receive(destination, null);
	}
	
	/**
	 * Methode de reception asynchrone d'un message
	 * @param destination destination d'ecoute
	 * @param messageListener	Listener
	 */
	public AsyncReceive listen(Destination destination, MessageListener messageListener) {
		
		// Appel sous-jacent
		return listen(destination, messageListener, null);
	}

	/**
	 * Methode de reception asynchrone d'un message
	 * @param destination destination d'ecoute
	 * @param messageListener	Listener
	 * @param messageSelector Selecteur de message
	 */
	public AsyncReceive listen(Destination destination, MessageListener messageListener, String messageSelector) {

		// Un log
		log.debug("#listen");
		
		// On verifie que la destination n'est pas nulle
		assert destination != null : "JmsTemplate#listen - Veuillez renseigner la destination";

		// On verifie que le listener n'est pas null
		assert messageListener != null : "JmsTemplate#listen - Veuillez renseigner le listener";
		
		// Ecouteur asynchrone
		AsyncReceive asyncReceive = new AsyncReceive(destination, messageListener, messageSelector);
		
		// Demarrage
		asyncReceive.start();
		
		// On retourne le receveur asynchrone
		return asyncReceive;
	}
	
	/**
	 * Methode permettant de creer un producteur sur une destination donnee et pour une session donnee
	 * @param session	Session
	 * @param destination	destination
	 * @return	Producteur de message
	 * @throws JMSException Exception potentielle
	 */
	private MessageProducer createProducer(Session session, Destination destination) throws JMSException {
		
		// Un log
		log.debug("#createProducer");
		
		// Creation du producteur
		MessageProducer messageProducer = session.createProducer(destination);

		// Un log
		log.debug("#createProducer - Positionnement d l'etat d'activation des IDs de messages");
		
		// Positionnement de l'etat d'activation des ID de messages
		messageProducer.setDisableMessageID(!isMessageIdEnabled());
		
		// Un log
		log.debug("#createProducer - Positionnement d l'etat d'activation des timestamps de messages");
		
		// Positionnement de l'etat d'activation des timestamps de message
		messageProducer.setDisableMessageTimestamp(!isMessageTimestampEnabled());
		
		// On retourne le producteur
		return messageProducer;
	}
	
	/**
	 * Methode de creation d'un consommateur JMS
	 * @param session	Session en cours
	 * @param destination	Destination d'ecoute
	 * @param messageSelector Selecteur de message
	 * @return	Consomateur
	 * @throws JMSException	Exception potentielle
	 */
	private MessageConsumer createMessageConsumer(Session session, Destination destination, String messageSelector) throws JMSException  {

		// Un log
		log.debug("#createMessageConsumer");

		// Consomateur
		MessageConsumer messageConsumer = null;
		
		// Si le selecteur est renseigne
		if(messageSelector != null && !messageSelector.trim().isEmpty()) {

			// Un log
			log.debug("#createMessageConsumer - Creation d'un consommateur avec selecteur de message");
			
			// Creation du consomateur
			messageConsumer = session.createConsumer(destination, messageSelector.trim());
			
		} else {

			// Un log
			log.debug("#createMessageConsumer - Creation d'un consommateur sans selecteur de message");
			
			// Creation du consomateur
			messageConsumer = session.createConsumer(destination);
			
		}
		
		// On retourne le consomateur
		return messageConsumer;
	}
	
	/**
	 * Methode de fermeture d'un Producteur
	 * @param messageProducer	Producteur a fermer
	 */
	private synchronized void releaseResources(MessageProducer messageProducer, MessageConsumer messageConsumer, Session session, Connection connection) {
		
		try {

			// Un log
			log.debug(Thread.currentThread().getId() + "#releaseResources - Consommateur de message");
			
			// Si le consommateur est null
			if(messageConsumer == null) {

				// Un log
				log.debug(Thread.currentThread().getId() + "#releaseResources - Le consommateur est null");
				
			} else {

				// Un log
				log.debug(Thread.currentThread().getId() + "#releaseResources - Femeture du consommateur");
				
				// Annulation du listener
				messageConsumer.setMessageListener(null);
				
				// Fermerture
				messageConsumer.close();
				
			}
			
		} catch (Exception e) {

			// Un log
			log.debug("#releaseResources - Impossible de fermer le consommateur JMS [" + e.getMessage() + "]");
		}
		
		try {

			// Un log
			log.debug(Thread.currentThread().getId() + "#releaseResources - Producteur de message");
			
			// Si le producteur est null
			if(messageProducer == null) {

				// Un log
				log.debug(Thread.currentThread().getId() + "#releaseResources - Le producteur est null");
				
			} else {

				// Un log
				log.debug(Thread.currentThread().getId() + "#releaseResources - Femeture du producteur");
				
				// Fermerture
				messageProducer.close();
				
			}

		} catch (Exception e) {

			// Un log
			log.debug("#releaseResources - Impossible de fermer le producteur JMS [" + e.getMessage() + "]");
		}
		
		try {

			// Un log
			log.debug(Thread.currentThread().getId() + "#releaseResources - Session JMS");
			
			// Si le producteur est null
			if(session == null) {

				// Un log
				log.debug(Thread.currentThread().getId() + "#releaseResources - La session est nulle");
				
			} else {

				// Un log
				log.debug(Thread.currentThread().getId() + "#releaseResources - Femeture de la session");
				
				// Fermerture
				session.close();
				
			}

		} catch (JMSException e) {

			// Un log
			log.debug("#releaseResources - Impossible de fermer la session JMS [" + e.getMessage() + "]");
		}

		try {

			// Un log
			log.debug(Thread.currentThread().getId() + "#releaseResources - Connection JMS");
			
			// Si le producteur est null
			if(connection == null) {

				// Un log
				log.debug(Thread.currentThread().getId() + "#releaseResources - La connection est nulle");
				
			} else {

				// Un log
				log.debug(Thread.currentThread().getId() + "#releaseResources - Femeture de la connection");
				
				// Fermerture
				connection.close();
				
			}

		} catch (JMSException e) {

			// Un log
			log.debug("#releaseResources - Impossible de fermer la connection JMS [" + e.getMessage() + "]");
		}
	}
	
	/**
	 * Classe de reception asynchrone de message
	 * @author Jean-Jacques ETUNE NGI
	 * @since 31 dec. 2012 - 22:02:08
	 */
	public class AsyncReceive extends Thread {

		/**
		 * Un logger
		 */
		private Logger log = Logger.getLogger(getClass());
		
		/**
		 * Connection JMS
		 */
		private Connection connection;
		
		/**
		 * Session JMS
		 */
		private Session session;
		
		/**
		 * Destination d'ecoute
		 */
		private Destination destination;

		/**
		 * Consommateur de message
		 */
		private MessageConsumer messageConsumer;
		
		/**
		 * Ecouteur asynchrone
		 */
		private MessageListener messageListener;
		
		/**
		 * Selecteur de message
		 */
		private String messageSelector = null;
		
		/**
		 * Constructeur avec initialisation de parametre
		 * @param connectionFactory	Fabrique de connection JMS
		 * @param destination Destination d'ecoute
		 * @param messageListener Ecouteur asynchrone
		 */
		public AsyncReceive(Destination destination, MessageListener messageListener) {
			
			// Initialisation de la destination d'ecoute
			this.destination = destination;
			
			// Initialisation de l'ecouteur
			this.messageListener = messageListener;
		}

		/**
		 * Constructeur avec initialisation de parametre
		 * @param destination Destination d'ecoute
		 * @param messageListener Ecouteur asynchrone
		 * @param messageSelector Selecteur de message
		 */
		public AsyncReceive(Destination destination, MessageListener messageListener, String messageSelector) {
			
			// Initialisation de la destination d'ecoute
			this.destination = destination;
			
			// Initialisation de l'ecouteur
			this.messageListener = messageListener;
			
			// Positionnement du selecteur de message
			this.messageSelector = messageSelector;
		}
		
		/* (non-Javadoc)
		 * @see java.lang.Thread#run()
		 */
		@Override
		public void run() {
			
			// Un log
			log.debug("#run");
			
			try {

				// Un log
				log.debug("#run - Creation d'une connection JMS");
				
				// Creation d'une connection
				connection = createConnection();
				
			} catch (JMSException e) {
				
				// Un log
				log.debug("#run - Erreur lors de l'ecoute asynchrone : Impossible de creer une connection JMS [" + e.getMessage() + "]");

				// Liberation des ressources
				releaseResources(null, null, null, connection);
				
				// On retlance
				throw new RuntimeException("#run - Erreur lors de l'ecoute asynchrone : Impossible de creer une connection JMS", e);
			}

			try {

				// Un log
				log.debug("#run - Demarrage de la connection JMS");

				// Demarrage de la connection
				connection.start();
				
			} catch (JMSException e) {
				
				// Un log
				log.debug("#run - Erreur lors de l'ecoute asynchrone : Impossible de demarrer la connection JMS [" + e.getMessage() + "]");

				// Liberation des ressources
				releaseResources(null, null, null, connection);
				
				// On retlance
				throw new RuntimeException("#run - Erreur lors de l'ecoute asynchrone : Impossible de demarrer une connection JMS", e);
			}
			
			try {

				// Un log
				log.debug("#run - Creation d'une session JMS");
				
				// Creation d'une session
				session = createSession(connection);
				
			} catch (Exception e) {
				
				// Un log
				log.debug("#run - Erreur lors de l'ecoute asynchrone : Impossible de creer une session JMS [" + e.getMessage() + "]");
				
				// Liberation des ressources
				releaseResources(null, null, session, connection);
				
				// On retlance
				throw new RuntimeException("#run - Erreur lors de l'ecoute asynchrone : Impossible de creer une session JMS", e);
			}
			
			// Un log
			log.debug("#run - Creation d'un consommateur JMS");
			
			try {

				// Creation du consommateur
				messageConsumer = createMessageConsumer(session, destination, messageSelector);
				
			} catch (Exception e) {
				
				// Un log
				log.debug("#run - Erreur lors de l'ecoute asynchrone : Impossible de creer un consommateur JMS [" + e.getMessage() + "]");
				
				// Liberation des ressources
				releaseResources(null, messageConsumer, session, connection);
				
				// On retlance
				throw new RuntimeException("#run - Erreur lors de l'ecoute asynchrone : Impossible de creer un producteur JMS", e);
			}

			try {

				// Un log
				log.debug("#run - Positionnement du listener");
				
				// Positionnement du listener
				messageConsumer.setMessageListener(messageListener);
				
			} catch (Exception e) {
				
				// Un log
				log.debug("#run - Erreur lors de l'ecoute asynchrone : Impossible de positionner le listener JMS [" + e.getMessage() + "]");
				
				// Liberation des ressources
				releaseResources(null, messageConsumer, session, connection);
				
				// On retlance
				throw new RuntimeException("#run - Erreur lors de l'ecoute asynchrone : Impossible de positionner le listener JMS", e);
			}
		}
		
		/**
		 * Methode de liberation des resources
		 */
		public void stopListen() {
			
			// Liberation des ressources
			releaseResources(null, messageConsumer, session, connection);
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy