You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ke...@apache.org on 2013/03/08 01:01:01 UTC
git commit: refs/heads/master - CLOUDSTACK-1562: Replace @DB support
to be the formal implementation instead of a temporary hacking one
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 <ke...@gmail.com>
Authored: Wed Mar 6 16:43:48 2013 -0800
Committer: Kelven Yang <ke...@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) {