// Path: uncode-dal/src/main/java/cn/uncode/dal/event/EventObservable.java
// public class EventObservable {
// 
// 	private Lock lock = new ReentrantLock(true);
// 
// 	private List<EventListener> listeners = new ArrayList<EventListener>();
// 
// 	public void addListener(EventListener listener) {
// 		lock.lock();
// 		try {
// 			if (listener != null)
// 				listeners.add(listener);
// 		} finally {
// 			lock.unlock();
// 		}
// 	}
// 
// 	public void deleteListener(EventListener listener) {
// 		lock.lock();
// 		try {
// 			if (listener != null)
// 				listeners.remove(listener);
// 		} finally {
// 			lock.unlock();
// 		}
// 	}
// 
// 	public void notifyListenersBefore(Method method, Map<String, Object> content) {
// 		lock.lock();
// 		try {
// 			if (listeners != null) {
// 				for (EventListener obs : listeners) {
// 					obs.before(method, content);
// 				}
// 			}
// 		} finally {
// 			lock.unlock();
// 		}
// 	}
// 	
// 	public void notifyListenersAfter(Method method, Map<String, Object> content) {
// 		lock.lock();
// 		try {
// 			if (listeners != null) {
// 				for (EventListener obs : listeners) {
// 					obs.after(method, content);
// 				}
// 			}
// 		} finally {
// 			lock.unlock();
// 		}
// 	}
// 
// }


import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.uncode.dal.event.EventObservable;
package cn.uncode.dal.event.asyn;








/**
 * 日志写任务
 * 
 * @author juny.ye
 */
public class NotifyTask implements Runnable {

    private static final Logger LOGGER = LoggerFactory.getLogger(NotifyTask.class);
    
    /**
     * 日志列表的最大记录数
     */
    private int recordsMaxSize = 100;

    /**
     * 日志刷新时间间隔(单位:秒)
     */
    private int flushInterval = 1;

    /**
     * 日志队列
     */
    private BlockingQueue<EventContext> logQueue;

    /**
     * 开关
     */
    private volatile boolean activeFlag = true;

    private List<EventContext> records = new ArrayList<EventContext>();

    private long timestamp = System.currentTimeMillis();
    
    private EventObservable observable;
    
// Path: uncode-dal/src/main/java/cn/uncode/dal/event/EventObservable.java
// public class EventObservable {
// 
// 	private Lock lock = new ReentrantLock(true);
// 
// 	private List<EventListener> listeners = new ArrayList<EventListener>();
// 
// 	public void addListener(EventListener listener) {
// 		lock.lock();
// 		try {
// 			if (listener != null)
// 				listeners.add(listener);
// 		} finally {
// 			lock.unlock();
// 		}
// 	}
// 
// 	public void deleteListener(EventListener listener) {
// 		lock.lock();
// 		try {
// 			if (listener != null)
// 				listeners.remove(listener);
// 		} finally {
// 			lock.unlock();
// 		}
// 	}
// 
// 	public void notifyListenersBefore(Method method, Map<String, Object> content) {
// 		lock.lock();
// 		try {
// 			if (listeners != null) {
// 				for (EventListener obs : listeners) {
// 					obs.before(method, content);
// 				}
// 			}
// 		} finally {
// 			lock.unlock();
// 		}
// 	}
// 	
// 	public void notifyListenersAfter(Method method, Map<String, Object> content) {
// 		lock.lock();
// 		try {
// 			if (listeners != null) {
// 				for (EventListener obs : listeners) {
// 					obs.after(method, content);
// 				}
// 			}
// 		} finally {
// 			lock.unlock();
// 		}
// 	}
// 
// }


// Path: uncode-dal/src/main/java/cn/uncode/dal/event/asyn/NotifyTask.java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.uncode.dal.event.EventObservable;

package cn.uncode.dal.event.asyn;








/**
 * 日志写任务
 * 
 * @author juny.ye
 */
public class NotifyTask implements Runnable {

    private static final Logger LOGGER = LoggerFactory.getLogger(NotifyTask.class);
    
    /**
     * 日志列表的最大记录数
     */
    private int recordsMaxSize = 100;

    /**
     * 日志刷新时间间隔(单位:秒)
     */
    private int flushInterval = 1;

    /**
     * 日志队列
     */
    private BlockingQueue<EventContext> logQueue;

    /**
     * 开关
     */
    private volatile boolean activeFlag = true;

    private List<EventContext> records = new ArrayList<EventContext>();

    private long timestamp = System.currentTimeMillis();
    
    private EventObservable observable;
    
    public NotifyTask(EventObservable observable){