package com.ejie.ab61.tramitacionModule.mdb;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.access.BeanFactoryLocator;
import org.springframework.beans.factory.access.BeanFactoryReference;
import org.springframework.context.access.ContextSingletonBeanFactoryLocator;

import com.ejie.ab61.service.jms.TratamientoJMSService;

/**
 * Message-Driven Bean implementation class for: TramitacionModuleMDB
 */
@MessageDriven(
		activationConfig = { @ActivationConfigProperty(
				propertyName = "destination", propertyValue = "ab61.ab61TramitacionQueue"), @ActivationConfigProperty(
				propertyName = "destinationType", propertyValue = "javax.jms.Queue")
		}, 
		mappedName = "ab61.ab61TramitacionQueue")

public class TramitacionModuleMDB implements MessageListener {
	
	private static final Logger logger = LoggerFactory.getLogger(TramitacionModuleMDB.class);
	
	// Load the ContextSingleton
	private BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator.getInstance("classpath:beanRefColasContext.xml");
	
	// Get hold of the factory to use
	private BeanFactoryReference refBea = this.locator.useBeanFactory("ear.context");

	
	private BeanFactory factoryBea = this.refBea.getFactory();

    /**
     * Default constructor. 
     */
    public TramitacionModuleMDB() {
        // TODO Auto-generated constructor stub
    }
	
	/**
     * @see MessageListener#onMessage(Message)
     */
    public void onMessage(Message message){
    	try {
   		 
    		TramitacionModuleMDB.logger.info("Mensaje que llega a la cola" + message);
    	    		
    		 //pasar de Message a String    		  
    		  TextMessage msg = null;
    		  String mensaje = null;

    		  if (message instanceof TextMessage) {
    			  msg = (TextMessage) message;
    			  mensaje=msg.getText();
    		}

    		//Llamar al método que tiene toda la lógica de negocio
    		  
    		TratamientoJMSService tratamientoJMSService = this.factoryBea.getBean(TratamientoJMSService.class);  
    		tratamientoJMSService.tratarMensaje(mensaje);
    		
    		
 		
		} catch (JMSException e) {
			 TramitacionModuleMDB.logger.error("TramitacionModuleMDB.onMessage() error: "+e.getMessage());
			 TramitacionModuleMDB.logger.error("TramitacionModuleMDB.onMessage() error: "+e);
		} catch (Exception e) {
		 TramitacionModuleMDB.logger.error("TramitacionModuleMDB.onMessage() error: "+e.getMessage());
		 TramitacionModuleMDB.logger.error("TramitacionModuleMDB.onMessage() error: "+e);
		}  
    	
    	
        
    }

}
