mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
allow multiple ways to intercept
This commit is contained in:
parent
e496a99c1c
commit
4b360258ee
@ -58,10 +58,10 @@ public class DataCenterDaoImpl extends GenericDaoBase<DataCenterVO, Long> implem
|
||||
protected SearchBuilder<DataCenterVO> PublicZonesSearch;
|
||||
protected SearchBuilder<DataCenterVO> ChildZonesSearch;
|
||||
|
||||
protected static final DataCenterIpAddressDaoImpl _ipAllocDao = ComponentLocator.inject(DataCenterIpAddressDaoImpl.class);
|
||||
protected static final DataCenterLinkLocalIpAddressDaoImpl _LinkLocalIpAllocDao = ComponentLocator.inject(DataCenterLinkLocalIpAddressDaoImpl.class);
|
||||
protected static final DataCenterVnetDaoImpl _vnetAllocDao = ComponentLocator.inject(DataCenterVnetDaoImpl.class);
|
||||
protected static final PodVlanDaoImpl _podVlanAllocDao = ComponentLocator.inject(PodVlanDaoImpl.class);
|
||||
protected final DataCenterIpAddressDaoImpl _ipAllocDao = ComponentLocator.inject(DataCenterIpAddressDaoImpl.class);
|
||||
protected final DataCenterLinkLocalIpAddressDaoImpl _LinkLocalIpAllocDao = ComponentLocator.inject(DataCenterLinkLocalIpAddressDaoImpl.class);
|
||||
protected final DataCenterVnetDaoImpl _vnetAllocDao = ComponentLocator.inject(DataCenterVnetDaoImpl.class);
|
||||
protected final PodVlanDaoImpl _podVlanAllocDao = ComponentLocator.inject(PodVlanDaoImpl.class);
|
||||
protected long _prefix;
|
||||
protected Random _rand = new Random(System.currentTimeMillis());
|
||||
protected TableGenerator _tgMacAddress;
|
||||
|
||||
@ -62,6 +62,8 @@ import org.xml.sax.helpers.DefaultHandler;
|
||||
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.PropertiesUtil;
|
||||
import com.cloud.utils.db.DatabaseCallback;
|
||||
import com.cloud.utils.db.DatabaseCallbackFilter;
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.mgmt.JmxUtil;
|
||||
@ -82,8 +84,8 @@ public class ComponentLocator implements ComponentLocatorMBean {
|
||||
protected static final HashMap<String, ComponentLocator> s_locators = new HashMap<String, ComponentLocator>();
|
||||
protected static final HashMap<Class<?>, InjectInfo> s_factories = new HashMap<Class<?>, InjectInfo>();
|
||||
protected static Boolean s_once = false;
|
||||
protected static Callback[] s_callbacks;
|
||||
protected static CallbackFilter s_callbackFilter;
|
||||
protected static Callback[] s_callbacks = new Callback[] { NoOp.INSTANCE, new DatabaseCallback()};
|
||||
protected static CallbackFilter s_callbackFilter = new DatabaseCallbackFilter();
|
||||
protected static final List<AnnotationInterceptor<?>> s_interceptors = new ArrayList<AnnotationInterceptor<?>>();
|
||||
|
||||
protected HashMap<String, Adapters<? extends Adapter>> _adapterMap;
|
||||
@ -189,14 +191,16 @@ public class ComponentLocator implements ComponentLocatorMBean {
|
||||
}
|
||||
|
||||
synchronized(s_interceptors) {
|
||||
s_callbacks = new Callback[s_interceptors.size() + 2];
|
||||
int i = 0;
|
||||
s_callbacks[i++] = NoOp.INSTANCE;
|
||||
s_callbacks[i++] = new InterceptorDispatcher();
|
||||
for (AnnotationInterceptor<?> interceptor : s_interceptors) {
|
||||
s_callbacks[i++] = interceptor.getCallback();
|
||||
if (s_interceptors.size() > 0) {
|
||||
s_callbacks = new Callback[s_interceptors.size() + 2];
|
||||
int i = 0;
|
||||
s_callbacks[i++] = NoOp.INSTANCE;
|
||||
s_callbacks[i++] = new InterceptorDispatcher();
|
||||
for (AnnotationInterceptor<?> interceptor : s_interceptors) {
|
||||
s_callbacks[i++] = interceptor.getCallback();
|
||||
}
|
||||
s_callbackFilter = new InterceptorFilter();
|
||||
}
|
||||
s_callbackFilter = new InterceptorFilter();
|
||||
}
|
||||
|
||||
XmlHandler handler = result.first();
|
||||
|
||||
@ -40,12 +40,17 @@ public class DatabaseCallback implements MethodInterceptor, AnnotationIntercepto
|
||||
|
||||
@Override
|
||||
public boolean needToIntercept(AnnotatedElement element) {
|
||||
DB db = element.getAnnotation(DB.class);
|
||||
if (!(element instanceof Method)) {
|
||||
return false;
|
||||
|
||||
}
|
||||
Method method = (Method)element;
|
||||
DB db = method.getAnnotation(DB.class);
|
||||
if (db != null) {
|
||||
return db.txn();
|
||||
}
|
||||
|
||||
Class<?> clazz = element.getClass().getDeclaringClass();
|
||||
Class<?> clazz = method.getDeclaringClass();
|
||||
do {
|
||||
db = clazz.getAnnotation(DB.class);
|
||||
if (db != null) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user