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;