-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathModelServerImpl.java
160 lines (137 loc) · 3.5 KB
/
ModelServerImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@SuppressWarnings({"AlibabaTransactionMustHaveRollback", "AlibabaLowerCamelCaseVariableNaming"})
@Service
public class ModelServerImpl implements ModelServer{
@Autowired
private ModelMapper modelMapper;
@Lazy
@Autowired
private ModelServer modelServer;
@Override
public void clear() {
modelMapper.clear();
}
@Override
public long count(String value) {
return modelMapper.countByValue(value);
}
// =========================================================
// test method
// =========================================================
/**
* 0
* 出现异常,回滚
*/
@Transactional
@Override
public void defaultTransaction() {
modelMapper.save(new Model(null, "A"));
throw new RuntimeException();
}
/**
* 2
* 内嵌方法未进行增强,事务失效
*/
@Override
public void OITrTh() {
modelMapper.save(new Model(null, "B"));
TrTh("B");
}
/**
* 0
* 外层方法事务增强,回滚
*/
@Transactional
@Override
public void OTrITh() {
modelMapper.save(new Model(null, "C"));
Th("C");
}
/**
* 1
* 内嵌异常已增强,回滚
* 外层未增强,未进行回滚
*/
@Override
public void OISTrTh() {
modelMapper.save(new Model(null, "D"));
modelServer.TrTh("D");
}
/**
* 0
* 出现异常,回滚
*/
@Transactional
@Override
public void OTrThI() {
modelMapper.save(new Model(null, "E"));
innerSave();
throw new RuntimeException();
}
/**
* 1
* 外层方法捕获异常,未回滚
* 内嵌方法回滚
*/
@Transactional
@Override
public void OTryISTrNewTh() {
modelMapper.save(new Model(null, "F"));
try {
modelServer.TrNewTh("F");
} catch (Exception ignore) {
}
}
/**
* 0
* 外层方法存在异常,回滚
*/
@Transactional
@Override
public void OISTrNewTh() {
modelMapper.save(new Model(null, "G"));
modelServer.TrNewTh("G");
}
/**
* 0
* 内嵌异常捕获,未回滚
*/
@Transactional
@Override
public void OTryITh() {
modelMapper.save(new Model(null, "H"));
try {
modelServer.TrTh("H");
} catch (Exception ignore) {
}
}
// =========================================================
// inner method
// =========================================================
@Override
public void innerSave() {
modelMapper.save(new Model(null, "E"));
}
@Override
public void Th(String v) {
modelMapper.save(new Model(null, v));
throw new RuntimeException();
}
@Transactional
@Override
public void TrTh(String v) {
modelMapper.save(new Model(null, v));
throw new RuntimeException();
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
@Override
public void TrNewTh(String v) {
modelMapper.save(new Model(null, v));
throw new RuntimeException();
}
}