|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* |
|
|
|
/* |
|
|
|
* Copyright 2002-2015 the original author or authors. |
|
|
|
* Copyright 2002-2018 the original author or authors. |
|
|
|
* |
|
|
|
* |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
@ -19,6 +19,7 @@ package org.springframework.transaction.annotation; |
|
|
|
import java.io.Serializable; |
|
|
|
import java.io.Serializable; |
|
|
|
import java.lang.reflect.AnnotatedElement; |
|
|
|
import java.lang.reflect.AnnotatedElement; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.ArrayList; |
|
|
|
|
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.core.annotation.AnnotatedElementUtils; |
|
|
|
import org.springframework.core.annotation.AnnotatedElementUtils; |
|
|
|
import org.springframework.core.annotation.AnnotationAttributes; |
|
|
|
import org.springframework.core.annotation.AnnotationAttributes; |
|
|
|
@ -38,8 +39,9 @@ import org.springframework.transaction.interceptor.TransactionAttribute; |
|
|
|
public class SpringTransactionAnnotationParser implements TransactionAnnotationParser, Serializable { |
|
|
|
public class SpringTransactionAnnotationParser implements TransactionAnnotationParser, Serializable { |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public TransactionAttribute parseTransactionAnnotation(AnnotatedElement ae) { |
|
|
|
public TransactionAttribute parseTransactionAnnotation(AnnotatedElement element) { |
|
|
|
AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(ae, Transactional.class); |
|
|
|
AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes( |
|
|
|
|
|
|
|
element, Transactional.class); |
|
|
|
if (attributes != null) { |
|
|
|
if (attributes != null) { |
|
|
|
return parseTransactionAnnotation(attributes); |
|
|
|
return parseTransactionAnnotation(attributes); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -54,6 +56,7 @@ public class SpringTransactionAnnotationParser implements TransactionAnnotationP |
|
|
|
|
|
|
|
|
|
|
|
protected TransactionAttribute parseTransactionAnnotation(AnnotationAttributes attributes) { |
|
|
|
protected TransactionAttribute parseTransactionAnnotation(AnnotationAttributes attributes) { |
|
|
|
RuleBasedTransactionAttribute rbta = new RuleBasedTransactionAttribute(); |
|
|
|
RuleBasedTransactionAttribute rbta = new RuleBasedTransactionAttribute(); |
|
|
|
|
|
|
|
|
|
|
|
Propagation propagation = attributes.getEnum("propagation"); |
|
|
|
Propagation propagation = attributes.getEnum("propagation"); |
|
|
|
rbta.setPropagationBehavior(propagation.value()); |
|
|
|
rbta.setPropagationBehavior(propagation.value()); |
|
|
|
Isolation isolation = attributes.getEnum("isolation"); |
|
|
|
Isolation isolation = attributes.getEnum("isolation"); |
|
|
|
@ -61,31 +64,26 @@ public class SpringTransactionAnnotationParser implements TransactionAnnotationP |
|
|
|
rbta.setTimeout(attributes.getNumber("timeout").intValue()); |
|
|
|
rbta.setTimeout(attributes.getNumber("timeout").intValue()); |
|
|
|
rbta.setReadOnly(attributes.getBoolean("readOnly")); |
|
|
|
rbta.setReadOnly(attributes.getBoolean("readOnly")); |
|
|
|
rbta.setQualifier(attributes.getString("value")); |
|
|
|
rbta.setQualifier(attributes.getString("value")); |
|
|
|
ArrayList<RollbackRuleAttribute> rollBackRules = new ArrayList<RollbackRuleAttribute>(); |
|
|
|
|
|
|
|
Class<?>[] rbf = attributes.getClassArray("rollbackFor"); |
|
|
|
List<RollbackRuleAttribute> rollbackRules = new ArrayList<RollbackRuleAttribute>(); |
|
|
|
for (Class<?> rbRule : rbf) { |
|
|
|
for (Class<?> rbRule : attributes.getClassArray("rollbackFor")) { |
|
|
|
RollbackRuleAttribute rule = new RollbackRuleAttribute(rbRule); |
|
|
|
rollbackRules.add(new RollbackRuleAttribute(rbRule)); |
|
|
|
rollBackRules.add(rule); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
String[] rbfc = attributes.getStringArray("rollbackForClassName"); |
|
|
|
for (String rbRule : attributes.getStringArray("rollbackForClassName")) { |
|
|
|
for (String rbRule : rbfc) { |
|
|
|
rollbackRules.add(new RollbackRuleAttribute(rbRule)); |
|
|
|
RollbackRuleAttribute rule = new RollbackRuleAttribute(rbRule); |
|
|
|
|
|
|
|
rollBackRules.add(rule); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
Class<?>[] nrbf = attributes.getClassArray("noRollbackFor"); |
|
|
|
for (Class<?> rbRule : attributes.getClassArray("noRollbackFor")) { |
|
|
|
for (Class<?> rbRule : nrbf) { |
|
|
|
rollbackRules.add(new NoRollbackRuleAttribute(rbRule)); |
|
|
|
NoRollbackRuleAttribute rule = new NoRollbackRuleAttribute(rbRule); |
|
|
|
|
|
|
|
rollBackRules.add(rule); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
String[] nrbfc = attributes.getStringArray("noRollbackForClassName"); |
|
|
|
for (String rbRule : attributes.getStringArray("noRollbackForClassName")) { |
|
|
|
for (String rbRule : nrbfc) { |
|
|
|
rollbackRules.add(new NoRollbackRuleAttribute(rbRule)); |
|
|
|
NoRollbackRuleAttribute rule = new NoRollbackRuleAttribute(rbRule); |
|
|
|
|
|
|
|
rollBackRules.add(rule); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
rbta.getRollbackRules().addAll(rollBackRules); |
|
|
|
rbta.setRollbackRules(rollbackRules); |
|
|
|
|
|
|
|
|
|
|
|
return rbta; |
|
|
|
return rbta; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public boolean equals(Object other) { |
|
|
|
public boolean equals(Object other) { |
|
|
|
return (this == other || other instanceof SpringTransactionAnnotationParser); |
|
|
|
return (this == other || other instanceof SpringTransactionAnnotationParser); |
|
|
|
|