diff --git a/server/src/com/cloud/dc/dao/DataCenterDaoImpl.java b/server/src/com/cloud/dc/dao/DataCenterDaoImpl.java index 38728608fb6..4dd5ce8582d 100644 --- a/server/src/com/cloud/dc/dao/DataCenterDaoImpl.java +++ b/server/src/com/cloud/dc/dao/DataCenterDaoImpl.java @@ -58,10 +58,10 @@ public class DataCenterDaoImpl extends GenericDaoBase implem protected SearchBuilder PublicZonesSearch; protected SearchBuilder 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; diff --git a/utils/src/com/cloud/utils/component/ComponentLocator.java b/utils/src/com/cloud/utils/component/ComponentLocator.java index 3390fe205e5..95c81e1aeff 100755 --- a/utils/src/com/cloud/utils/component/ComponentLocator.java +++ b/utils/src/com/cloud/utils/component/ComponentLocator.java @@ -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 s_locators = new HashMap(); protected static final HashMap, InjectInfo> s_factories = new HashMap, 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> s_interceptors = new ArrayList>(); protected HashMap> _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(); diff --git a/utils/src/com/cloud/utils/db/DatabaseCallback.java b/utils/src/com/cloud/utils/db/DatabaseCallback.java index 623c1c1fda9..ba25e32b242 100644 --- a/utils/src/com/cloud/utils/db/DatabaseCallback.java +++ b/utils/src/com/cloud/utils/db/DatabaseCallback.java @@ -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) {