/*
 * LogMessageBean.java
 * Copyright (C) 2009  <JustinLei@gmail.com>
 *
 *        This program is free software; you can redistribute it and/or modify
 *        it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *     (at your option) any later version.
 *
 *       This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *        GNU General Public License for more details.
 *
 */
package org.lambdasoft.mdb;
import java.util.Map;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.naming.InitialContext;
import org.lambdasoft.components.log.BaseLogSendInterface;
import org.lambdasoft.components.log.OperateType;
import org.lambdasoft.components.log.param.LogParam;
import org.lambdasoft.utils.FileUtil;
/**
 * 日志添加消息
 * 
 * @author lei.tang (justinlei@gmail.com)
 * @date 2009-9-17
 * @version 1.0
 */
@MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = MessageConstant.DESTINATIONTYPE_QUEUE),
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = MessageConstant.ACKNOWLEDGEMODE_AUTO),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = MessageConstant.DESTINATION_LOG) })
public class LogMessageBean implements MessageListener{
    public static final String LOG_PREFIX = "LOG.TYPE.BEAN.";
    private Map<String, String> logConfigure;
    public void onMessage(Message message) {
        if(!(message instanceof ObjectMessage))
            return;
        ObjectMessage objectMessage = (ObjectMessage)message;
        try {
            if(!(objectMessage.getObject() instanceof LogParam))
                return;
            LogParam logParam = (LogParam)objectMessage.getObject();
            InitialContext context = new InitialContext();
            for (Object level : logParam.getOperateTypes()) {
                OperateType operateType = (OperateType)level;
                String ejbName = getConfigure().get(LOG_PREFIX + (operateType.toString()));
                Object sendComponent = context.lookup(ejbName);
                if (sendComponent != null
                        && (sendComponent instanceof BaseLogSendInterface)) {
                    ((BaseLogSendInterface) sendComponent).log(logParam);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }
    }
    
    private Map<String, String> getConfigure() {
        String propertiesName = "/org/lambdasoft/components/log/ejb/logConfigure.properties";
        try {
            logConfigure = FileUtil.getPropertiesMap(LogMessageBean.class,propertiesName);
            return logConfigure;
        } catch (Exception e) {
            return null;
        }
    }
}
/*
 * MessageConstant.java
 * Copyright (C) 2009  <JustinLei@gmail.com>
 *
 *        This program is free software; you can redistribute it and/or modify
 *        it under the terms of the GNU General Public License as published by
 *      the Free Software Foundation; either version 2 of the License, or
 *     (at your option) any later version.
 *
 *       This program is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *        GNU General Public License for more details.
 *
 */
package org.lambdasoft.mdb;
/**
 * 消息驱动bean定义
 * 
 * @author lei.tang (justinlei@gmail.com)
 * @date 2009-9-18
 * @version 1.0
 */
public class MessageConstant {
    public static final String DESTINATIONTYPE_QUEUE = "javax.jms.Queue";
    public static final String ACKNOWLEDGEMODE_AUTO = "Auto-acknowledge";//会话确认模式
    
    public static final String DESTINATION_CACHE = "queue/AO_CACHE";
    public static final String DESTINATION_LOG = "queue/AO_LOG";
    public static final String DESTINATION_MAIL = "queue/AO_MAIL";
    public static final String DESTINATION_CACHE_REFLASH = "queue/AO_CACHE_REFLASH";
    
    private MessageConstant() {}
    
}
/*
 * LogMessage.java
 * Copyright (C) 2009  <JustinLei@gmail.com>
 *
 *    	This program is free software; you can redistribute it and/or modify
 *    	it under the terms of the GNU General Public License as published by
 *  	the Free Software Foundation; either version 2 of the License, or
 * 	(at your option) any later version.
 *
 *   	This program is distributed in the hope that it will be useful,
 *  	but WITHOUT ANY WARRANTY; without even the implied warranty of
 * 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *		GNU General Public License for more details.
 *
 */
package org.lambdasoft.mdb;
import java.io.Serializable;
/**
 * 
 * @author lei.tang (justinlei@gmail.com)
 * @date 2009-9-17
 * @version 1.0
 */
public interface LogMessage extends Serializable{
	String getType();
	String getLevel();
	String getLog();
}