package com.ejie.ad74a.mdb;

import java.util.HashMap;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.interceptor.Interceptors;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;

import org.apache.commons.lang.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ejb.interceptor.SpringBeanAutowiringInterceptor;

import com.ejie.ad74a.dao.ErroresTelevidaDao;
import com.ejie.ad74a.model.ErroresTelevida;
import com.ejie.ad74a.model.PeticionesPs;
import com.ejie.ad74a.service.PeticionesPsService;
import com.ejie.ad74a.util.UtilSQL;
import com.ejie.ad74a.util.comun.UtilidadesXML;
import com.ejie.ad74a.util.constantes.RespuestasTelevidaEnum;
import com.ejie.ad74a.ws.server.televida.model.Comunicacion;
import com.ejie.ad74a.ws.server.televida.model.Respuesta;
import com.ejie.ad74a.ws.server.televida.service.TelevidaService;
import com.ejie.ad74a.ws.server.televida.service.TelevidaServiceImpl;
import com.ejie.ad74a.ws.server.televida.util.ModelApplicationParser;


@Interceptors(value = SpringBeanAutowiringInterceptor.class)
@MessageDriven(name = "Ad74aPeticionPrestadorJMS", activationConfig = {
		@ActivationConfigProperty(propertyName = "connectionFactoryJndiName", propertyValue = com.ejie.ad74a.constantes.Constantes.CONNECTION_FACTORY_JNDI_NAME),
		@ActivationConfigProperty(propertyName = "destinationJndiName", propertyValue = com.ejie.ad74a.constantes.Constantes.PETICION_PRESTADOR_DESTINATION_JNDI_NAME),
		@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") })
@TransactionManagement(TransactionManagementType.BEAN)

public class Ad74aPeticionPrestadorJMS implements MessageListener {
	
	private static final Logger logger = LoggerFactory.getLogger(Ad74aPeticionPrestadorJMS.class);
	
	@Autowired
	private TelevidaService televidaService;
	

	@Autowired
	private PeticionesPsService peticionesPsService;
	
	@Autowired
	private ErroresTelevidaDao erroresTelevidaDao;

	@Override
	public void onMessage(Message message) {
		Ad74aPeticionPrestadorJMS.logger.info("Recibimos mensaje ad74aPeticionPrestadorJMS");
		Ad74aPeticionPrestadorJMS.logger.info("Mensaje:" + message.toString());


		try {
			this.televidaService.proccesMessage(message);
		} catch (Throwable e) {			
			e.printStackTrace();
			Ad74aPeticionPrestadorJMS.logger.error("Ad74aPeticionPrestadorJMS Error al tratar el message: " + e.getMessage());			
		}
		
	}	

}
