diff --git a/plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/system/spring-contrail-system-context-inheritable.xml b/plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/system/spring-contrail-system-context-inheritable.xml
new file mode 100644
index 00000000000..085b99b8ab9
--- /dev/null
+++ b/plugins/network-elements/juniper-contrail/resources/META-INF/cloudstack/system/spring-contrail-system-context-inheritable.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/EventUtils.java b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/EventUtils.java
index 29b58fb7d78..faeff1f5bd6 100644
--- a/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/EventUtils.java
+++ b/plugins/network-elements/juniper-contrail/src/org/apache/cloudstack/network/contrail/management/EventUtils.java
@@ -20,6 +20,8 @@ package org.apache.cloudstack.network.contrail.management;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
@@ -28,8 +30,11 @@ import org.springframework.stereotype.Component;
import org.apache.cloudstack.context.CallContext;
import org.apache.cloudstack.framework.messagebus.MessageBus;
import org.apache.cloudstack.framework.messagebus.MessageBusBase;
+import org.aopalliance.intercept.MethodInterceptor;
+import org.aopalliance.intercept.MethodInvocation;
import com.cloud.event.ActionEvent;
+import com.cloud.event.ActionEvents;
import com.cloud.event.Event;
import com.cloud.event.EventCategory;
import com.cloud.event.EventTypes;
@@ -74,7 +79,7 @@ public class EventUtils {
}
- public static class EventInterceptor implements ComponentMethodInterceptor {
+ public static class EventInterceptor implements ComponentMethodInterceptor, MethodInterceptor {
private static final Logger s_logger = Logger.getLogger(EventInterceptor.class);
@@ -82,6 +87,55 @@ public class EventUtils {
}
+ @Override
+ public Object invoke(MethodInvocation invocation) throws Throwable {
+ Method m = invocation.getMethod();
+ Object target = invocation.getThis();
+
+ if ( getActionEvents(m).size() == 0 ) {
+ /* Look for annotation on impl class */
+ m = target.getClass().getMethod(m.getName(), m.getParameterTypes());
+ }
+
+ Object interceptorData = null;
+
+ boolean success = true;
+ try {
+ interceptorData = interceptStart(m, target);
+
+ Object result = invocation.proceed();
+ success = true;
+
+ return result;
+ } finally {
+ if ( success ) {
+ interceptComplete(m, target, interceptorData);
+ } else {
+ interceptException(m, target, interceptorData);
+ }
+ }
+ }
+
+ protected List getActionEvents(Method m) {
+ List result = new ArrayList();
+
+ ActionEvents events = m.getAnnotation(ActionEvents.class);
+
+ if ( events != null ) {
+ for ( ActionEvent e : events.value() ) {
+ result.add(e);
+ }
+ }
+
+ ActionEvent e = m.getAnnotation(ActionEvent.class);
+
+ if ( e != null ) {
+ result.add(e);
+ }
+
+ return result;
+ }
+
@Override
public Object interceptStart(Method method, Object target) {
return null;