cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kelv...@apache.org
Subject git commit: refs/heads/master - CLOUDSTACK-1562: Replace @DB support to be the formal implementation instead of a temporary hacking one
Date Fri, 08 Mar 2013 00:01:01 GMT
Updated Branches:
  refs/heads/master 837f7e195 -> 89f4ac043


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/master
Commit: 89f4ac0439852be13f2d78b57d8d1d3716d641df
Parents: 837f7e1
Author: Kelven Yang <kelveny@gmail.com>
Authored: Wed Mar 6 16:43:48 2013 -0800
Committer: Kelven Yang <kelveny@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) {


Mime
View raw message