CLOUDSTACK-1562: Replace @DB support to be the formal implementation instead of 
a temporary hacking one


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/89f4ac04
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/89f4ac04
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/89f4ac04

Branch: refs/heads/gslb-wip
Commit: 89f4ac0439852be13f2d78b57d8d1d3716d641df
Parents: 837f7e1
Author: Kelven Yang <kelv...@gmail.com>
Authored: Wed Mar 6 16:43:48 2013 -0800
Committer: Kelven Yang <kelv...@gmail.com>
Committed: Thu Mar 7 15:47:01 2013 -0800

----------------------------------------------------------------------
 .../cloud/utils/component/ComponentContext.java    |    4 ---
 .../cloud/utils/db/TransactionContextBuilder.java  |   20 ++++++++++++---
 2 files changed, 16 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/89f4ac04/utils/src/com/cloud/utils/component/ComponentContext.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentContext.java 
b/utils/src/com/cloud/utils/component/ComponentContext.java
index 407ad7a..ca7ad5c 100644
--- a/utils/src/com/cloud/utils/component/ComponentContext.java
+++ b/utils/src/com/cloud/utils/component/ComponentContext.java
@@ -28,10 +28,7 @@ import javax.management.NotCompliantMBeanException;
 import javax.naming.ConfigurationException;
 
 import org.apache.log4j.Logger;
-import org.springframework.aop.Advisor;
 import org.springframework.aop.framework.Advised;
-import org.springframework.aop.framework.ProxyFactory;
-import org.springframework.aop.support.DefaultPointcutAdvisor;
 import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
 import org.springframework.context.ApplicationContext;
@@ -39,7 +36,6 @@ import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Component;
 
-import com.cloud.utils.db.TransactionContextBuilder;
 import com.cloud.utils.mgmt.JmxUtil;
 import com.cloud.utils.mgmt.ManagementBean;
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/89f4ac04/utils/src/com/cloud/utils/db/TransactionContextBuilder.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/db/TransactionContextBuilder.java 
b/utils/src/com/cloud/utils/db/TransactionContextBuilder.java
index 2cbaa30..e03b25f 100644
--- a/utils/src/com/cloud/utils/db/TransactionContextBuilder.java
+++ b/utils/src/com/cloud/utils/db/TransactionContextBuilder.java
@@ -32,8 +32,8 @@ public class TransactionContextBuilder implements 
MethodInterceptor {
        
        public Object AroundAnyMethod(ProceedingJoinPoint call) throws 
Throwable {
                MethodSignature methodSignature = 
(MethodSignature)call.getSignature();
-        Method targetMethod = methodSignature.getMethod();     
-        if(true) { // TODO ??? needToIntercept(targetMethod)) {
+        Method targetMethod = methodSignature.getMethod();
+        if(needToIntercept(targetMethod, call.getTarget())) {
                        Transaction txn = 
Transaction.open(call.getSignature().getName());
                        Object ret = null;
                        try {
@@ -50,7 +50,7 @@ public class TransactionContextBuilder implements 
MethodInterceptor {
        public Object invoke(MethodInvocation method) throws Throwable {
                Method targetMethod = method.getMethod();
                
-        if(needToIntercept(targetMethod)) {
+        if(needToIntercept(targetMethod, method.getThis())) {
                        Transaction txn = 
Transaction.open(targetMethod.getName());
                        Object ret = null;
                        try {
@@ -63,13 +63,25 @@ public class TransactionContextBuilder implements 
MethodInterceptor {
         return method.proceed();
        }
        
-       private boolean needToIntercept(Method method) {
+       private boolean needToIntercept(Method method, Object target) {
         DB db = method.getAnnotation(DB.class);
         if (db != null) {
             return true;
         }
         
         Class<?> clazz = method.getDeclaringClass();
+        if(clazz.isInterface()) {
+               clazz = target.getClass();
+               for(Method m : clazz.getMethods()) {
+                       // it is supposed that we need to check against type 
arguments,
+                       // this can be simplified by just checking method name
+                       if(m.getName().equals(method.getName())) {
+                               if(m.getAnnotation(DB.class) != null)
+                                       return true;
+                       }
+               }
+        }
+        
         do {
             db = clazz.getAnnotation(DB.class);
             if (db != null) {

Reply via email to