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