1
14
15 package com.liferay.portal.spring.annotation;
16
17 import com.liferay.portal.kernel.annotation.TransactionDefinition;
18 import com.liferay.portal.kernel.annotation.Transactional;
19 import com.liferay.portal.util.PropsValues;
20
21 import java.io.Serializable;
22
23 import java.lang.reflect.AnnotatedElement;
24
25 import java.util.ArrayList;
26 import java.util.List;
27
28 import org.springframework.transaction.annotation.TransactionAnnotationParser;
29 import org.springframework.transaction.interceptor.NoRollbackRuleAttribute;
30 import org.springframework.transaction.interceptor.RollbackRuleAttribute;
31 import org.springframework.transaction.interceptor.RuleBasedTransactionAttribute;
32 import org.springframework.transaction.interceptor.TransactionAttribute;
33
34
40 public class PortalTransactionAnnotationParser
41 implements TransactionAnnotationParser, Serializable {
42
43 public TransactionAttribute parseTransactionAnnotation(
44 AnnotatedElement annotatedElement) {
45
46 Transactional annotation = annotatedElement.getAnnotation(
47 Transactional.class);
48
49 if (annotation == null) {
50 return null;
51 }
52
53 RuleBasedTransactionAttribute ruleBasedTransactionAttribute =
54 new RuleBasedTransactionAttribute();
55
56 int isolationLevel = annotation.isolation().value();
57
58 if (isolationLevel == TransactionDefinition.ISOLATION_PORTAL) {
59 ruleBasedTransactionAttribute.setIsolationLevel(
60 PropsValues.TRANSACTION_ISOLATION_PORTAL);
61 }
62 else {
63 ruleBasedTransactionAttribute.setIsolationLevel(isolationLevel);
64 }
65
66 ruleBasedTransactionAttribute.setPropagationBehavior(
67 annotation.propagation().value());
68 ruleBasedTransactionAttribute.setReadOnly(annotation.readOnly());
69 ruleBasedTransactionAttribute.setTimeout(annotation.timeout());
70
71 List<RollbackRuleAttribute> rollBackAttributes =
72 new ArrayList<RollbackRuleAttribute>();
73
74 Class<?>[] rollbackFor = annotation.rollbackFor();
75
76 for (int i = 0; i < rollbackFor.length; i++) {
77 RollbackRuleAttribute rollbackRuleAttribute =
78 new RollbackRuleAttribute(rollbackFor[i]);
79
80 rollBackAttributes.add(rollbackRuleAttribute);
81 }
82
83 String[] rollbackForClassName = annotation.rollbackForClassName();
84
85 for (int i = 0; i < rollbackForClassName.length; i++) {
86 RollbackRuleAttribute rollbackRuleAttribute =
87 new RollbackRuleAttribute(rollbackForClassName[i]);
88
89 rollBackAttributes.add(rollbackRuleAttribute);
90 }
91
92 Class<?>[] noRollbackFor = annotation.noRollbackFor();
93
94 for (int i = 0; i < noRollbackFor.length; ++i) {
95 NoRollbackRuleAttribute noRollbackRuleAttribute =
96 new NoRollbackRuleAttribute(noRollbackFor[i]);
97
98 rollBackAttributes.add(noRollbackRuleAttribute);
99 }
100
101 String[] noRollbackForClassName = annotation.noRollbackForClassName();
102
103 for (int i = 0; i < noRollbackForClassName.length; ++i) {
104 NoRollbackRuleAttribute noRollbackRuleAttribute =
105 new NoRollbackRuleAttribute(noRollbackForClassName[i]);
106
107 rollBackAttributes.add(noRollbackRuleAttribute);
108 }
109
110 ruleBasedTransactionAttribute.getRollbackRules().addAll(
111 rollBackAttributes);
112
113 return ruleBasedTransactionAttribute;
114 }
115
116 }