package transaction.redelivered;

import implementation.ClientJMS;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;

import javax.jms.Session;
import javax.jms.TextMessage;

/* Annick Fron
 *
 * 
 * Dans cet exemple, on verifie que le recepteur sera 
 * livre a nouveau sur rollback de la transaction
 */

public class Recepteur extends ClientJMS {

	
	public static void main(String[] args) {

		new Recepteur().run();
	}

	public void run() {
		ConnectionFactory cf = getConnectionFactory();
		Connection connexion;
		try {
			connexion = cf.createConnection();
			// on cree une transaction avec le booleen true
			Session session = connexion.createSession(true,
					Session.AUTO_ACKNOWLEDGE);
			// pour un Topic on aurait de meme createTopic...
			Destination queue = session.createQueue("SampleQ1");

			MessageConsumer receiver = session.createConsumer(queue);
			// ne pas oublier de demarrer la connexion
			connexion.start();
			// réception d’un message de type texte
			TextMessage mess1 = (TextMessage) receiver.receive();
			System.out.println("Message reçu : " + mess1.getText());
			System.out.println("Message livre a nouveau "+mess1.getJMSRedelivered());
			//simulation d'echec de la session
			session.rollback();
			TextMessage mess2 = (TextMessage) receiver.receive();
			System.out.println("Message reçu : " + mess2.getText());
			System.out.println("Message livre a nouveau "+mess2.getJMSRedelivered());
			session.commit();
			// fermeture de la connexion et de la session
			connexion.close();

		} catch (JMSException e) {
			
			System.out.println(e.getMessage());
		}
		
	}
}
