mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-1562: Replace @DB support to be the formal implementation instead of a temporary hacking one
This commit is contained in:
parent
837f7e1950
commit
89f4ac0439
@ -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;
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user