1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.transaction;
19
20 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
21 import org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
22 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
23 import org.apache.shardingsphere.transaction.api.TransactionType;
24 import org.apache.shardingsphere.transaction.exception.TransactionManagerNotFoundException;
25 import org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManager;
26
27 import javax.sql.DataSource;
28 import java.util.Map;
29
30
31
32
33 public final class ShardingSphereTransactionManagerEngine {
34
35 private final TransactionType transactionType;
36
37 private final ShardingSphereTransactionManager transactionManager;
38
39 public ShardingSphereTransactionManagerEngine(final TransactionType transactionType) {
40 this.transactionType = transactionType;
41 transactionManager = TransactionType.LOCAL == transactionType ? null : TypedSPILoader.getService(ShardingSphereTransactionManager.class, transactionType.name());
42 }
43
44
45
46
47
48
49
50
51 public void init(final Map<String, DatabaseType> databaseTypes, final Map<String, DataSource> dataSourceMap, final String providerType) {
52 if (TransactionType.LOCAL != transactionType) {
53 transactionManager.init(databaseTypes, dataSourceMap, providerType);
54 }
55 }
56
57
58
59
60
61
62
63 public ShardingSphereTransactionManager getTransactionManager(final TransactionType transactionType) {
64 if (TransactionType.LOCAL != transactionType) {
65 ShardingSpherePreconditions.checkNotNull(transactionManager, () -> new TransactionManagerNotFoundException(transactionType));
66 }
67 return transactionManager;
68 }
69
70
71
72
73 public void close() {
74 if (TransactionType.LOCAL != transactionType) {
75 transactionManager.close();
76 }
77 }
78 }