package com.alibaba.tamper.core.helper;
import java.util.HashMap;
import java.util.Map;
/**
* 每个mapping执行过程都认为是在一个独立的Region中进行处理,在Region中会记录一下当前的一些信息
*
* @author jianghang 2012-4-5 下午02:27:41
*/
public class ContextObjectHolder {
private static volatile ContextObjectHolder singleton = null;
public static final String MAPPING_ENTER = "_mapping_enter_";
public static final String SCRIPT_CONTEXT = "_script_context_";
public static final String PROCESS_CONTEXT = "_process_context_";
private ThreadLocal<Map<Object, Object>> context = new ThreadLocal<Map<Object, Object>>() {
protected Map<Object, Object> initialValue() {
return new HashMap<Object, Object>(10);
}
};
public ContextObjectHolder(){
}
/**
* 单例方法
*/
public static ContextObjectHolder getInstance() {
if (singleton == null) {
synchronized (ContextObjectHolder.class) {
if (singleton == null) { // double check
singleton = new ContextObjectHolder();
}
}
}
return singleton;
}
public boolean enter() {
Map map = context.get();
Object value = map.put(MAPPING_ENTER, true);
return value == null; // 如果value为null,说明是第一次进入
}
public void clear() {
context.get().clear();
}
public void put(Object key, Object value) {
this.context.get().put(key, value);
}
public Object get(Object key) {
return this.context.get().get(key);
}
public Object remove(Object key) {
return this.context.get().remove(key);
}
}