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.database.connector.core.type.DatabaseType;
21 import org.apache.shardingsphere.infra.exception.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.ShardingSphereDistributedTransactionManager;
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 ShardingSphereDistributedTransactionManager distributedTransactionManager;
38
39 public ShardingSphereTransactionManagerEngine(final TransactionType transactionType) {
40 this.transactionType = transactionType;
41 distributedTransactionManager = TransactionType.LOCAL == transactionType ? null : TypedSPILoader.getService(ShardingSphereDistributedTransactionManager.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 return;
54 }
55 distributedTransactionManager.init(databaseTypes, dataSourceMap, providerType);
56 }
57
58
59
60
61
62
63
64 public ShardingSphereDistributedTransactionManager getTransactionManager(final TransactionType transactionType) {
65 if (TransactionType.LOCAL != transactionType) {
66 ShardingSpherePreconditions.checkNotNull(distributedTransactionManager, () -> new TransactionManagerNotFoundException(transactionType));
67 }
68 return distributedTransactionManager;
69 }
70
71
72
73
74 public void close() {
75 if (TransactionType.LOCAL == transactionType) {
76 return;
77 }
78 distributedTransactionManager.close();
79 }
80 }