/**
 * ÀÌ ¼Ò½º´Â Spring ÇÁ·¹ÀÓ¿öÅ© ¿öÅ©ºÏ¿¡¼­ »ç¿ëÇÑ ¿¹Á¦ ¼Ò½ºÀÔ´Ï´Ù. 
 * ÀÌ ¼Ò½º´Â ¸ðµç °³¹ßÀÚµéÀÌ ÀÚÀ¯·Ó°Ô ¼öÁ¤ ¹× ¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù. 
 * ´Ü, ÀÌ ¼Ò½º¸¦ ±â¹ÝÀ¸·Î »õ·Î¿î ¾ÖÇÃ¸®ÄÉÀÌ¼ÇÀ» °³¹ßÇÒ °æ¿ì ÃâÃ³¸¦ ¸í½ÃÇØ ÁÖ½Ã¸é µË´Ï´Ù. 
 */
package net.javajigi.advice;

import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.Session;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.aop.ThrowsAdvice;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.jms.core.JmsTemplate102;
import org.springframework.jms.core.MessageCreator;

public class EmailNotificationThrowsAdvice implements ThrowsAdvice, InitializingBean {
	protected final Log logger = LogFactory.getLog(getClass());
	
	private ConnectionFactory connectionFactory;
	private Queue queue;
	private JmsTemplate102 jmsTemplate;

	public void setQueue(Queue queue) {
		this.queue = queue;
	}
	
	public void setConnectionFactory(ConnectionFactory connectionFactory) {
		this.connectionFactory = connectionFactory;
	}

	public void afterPropertiesSet() throws Exception {
		if (connectionFactory == null) throw new BeanCreationException("Must set connectionFactory");
		if (queue == null) throw new BeanCreationException("Must set queue");
		jmsTemplate = new JmsTemplate102(connectionFactory, false);
	}
	
	public void afterThrowing(final RuntimeException ex) throws Throwable {
		if (logger.isDebugEnabled()) {
			logger.debug("afterThrowing() ½ÃÀÛ");
			logger.debug("Caught : " + ex.getClass().getName());
		}

		//mailSender.sendMessage(ex);
		jmsTemplate.send(queue, new MessageCreator() {

			public Message createMessage(Session session) throws JMSException {
				return session.createObjectMessage(ex);
			}
			
		});

		if (logger.isDebugEnabled()) {
			logger.debug("afterThrowing() Á¾·á");
		}
	}
}