This is an automated email from the ASF dual-hosted git repository.

panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 8727b2872ea Support heterogeneous databases in single logic database 
for TransactionRule init (#21679)
8727b2872ea is described below

commit 8727b2872ea59ff3073dff96666b5c6bd05a0f3e
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Fri Oct 21 17:13:21 2022 +0800

    Support heterogeneous databases in single logic database for 
TransactionRule init (#21679)
    
    * Support heterogeneous databases in single logic database for 
TransactionRule init
    
    * fix checkstyle
    
    * remove useless param
---
 .../encrypt/spi/context/EncryptContext.java        |  2 -
 .../ShardingSphereTransactionManagerEngine.java    | 17 +++---
 .../transaction/rule/TransactionRule.java          | 20 +++----
 .../rule/builder/TransactionRuleBuilder.java       |  2 +-
 .../spi/ShardingSphereTransactionManager.java      |  6 +--
 .../transaction/ConnectionTransactionTest.java     |  8 ++-
 ...ShardingSphereTransactionManagerEngineTest.java |  2 +-
 ...herShardingSphereTransactionManagerFixture.java |  4 +-
 .../ShardingSphereTransactionManagerFixture.java   |  4 +-
 .../transaction/rule/TransactionRuleTest.java      | 61 +++++++++++++++-------
 .../AlterTransactionRuleStatementUpdater.java      |  2 +-
 .../query/TransactionRuleQueryResultSetTest.java   |  3 +-
 .../AlterTransactionRuleStatementUpdaterTest.java  |  3 +-
 .../SeataATShardingSphereTransactionManager.java   |  5 +-
 ...eataATShardingSphereTransactionManagerTest.java |  3 +-
 .../xa/XAShardingSphereTransactionManager.java     |  5 +-
 .../xa/XAShardingSphereTransactionManagerTest.java | 41 +++++++++------
 17 files changed, 104 insertions(+), 84 deletions(-)

diff --git 
a/features/encrypt/api/src/main/java/org/apache/shardingsphere/encrypt/spi/context/EncryptContext.java
 
b/features/encrypt/api/src/main/java/org/apache/shardingsphere/encrypt/spi/context/EncryptContext.java
index cad5f7d5904..7dc1d7a66ce 100644
--- 
a/features/encrypt/api/src/main/java/org/apache/shardingsphere/encrypt/spi/context/EncryptContext.java
+++ 
b/features/encrypt/api/src/main/java/org/apache/shardingsphere/encrypt/spi/context/EncryptContext.java
@@ -19,14 +19,12 @@ package org.apache.shardingsphere.encrypt.spi.context;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import lombok.Setter;
 
 /**
  * Encrypt context.
  */
 @RequiredArgsConstructor
 @Getter
-@Setter
 public final class EncryptContext {
     
     private final String databaseName;
diff --git 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/ShardingSphereTransactionManagerEngine.java
 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/ShardingSphereTransactionManagerEngine.java
index 438760665bf..f1308be9d25 100644
--- 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/ShardingSphereTransactionManagerEngine.java
+++ 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/ShardingSphereTransactionManagerEngine.java
@@ -26,11 +26,10 @@ import 
org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManage
 import 
org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManagerFactory;
 
 import javax.sql.DataSource;
-import java.util.Collection;
 import java.util.EnumMap;
+import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.stream.Collectors;
 
 /**
  * ShardingSphere transaction manager engine.
@@ -58,16 +57,20 @@ public final class ShardingSphereTransactionManagerEngine {
     /**
      * Initialize transaction managers.
      *
-     * @param databaseType database type
+     * @param databaseTypes database types
      * @param dataSourceMap data source map
      * @param providerType transaction manager provider type
      */
-    public void init(final DatabaseType databaseType, final Map<String, 
DataSource> dataSourceMap, final String providerType) {
-        transactionManagers.forEach((key, value) -> value.init(databaseType, 
getResourceDataSources(dataSourceMap), providerType));
+    public void init(final Map<String, DatabaseType> databaseTypes, final 
Map<String, DataSource> dataSourceMap, final String providerType) {
+        transactionManagers.forEach((key, value) -> value.init(databaseTypes, 
getResourceDataSources(dataSourceMap), providerType));
     }
     
-    private Collection<ResourceDataSource> getResourceDataSources(final 
Map<String, DataSource> dataSourceMap) {
-        return dataSourceMap.entrySet().stream().map(entry -> new 
ResourceDataSource(entry.getKey(), 
entry.getValue())).collect(Collectors.toList());
+    private Map<String, ResourceDataSource> getResourceDataSources(final 
Map<String, DataSource> dataSourceMap) {
+        Map<String, ResourceDataSource> result = new 
LinkedHashMap<>(dataSourceMap.size(), 1);
+        for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
+            result.put(entry.getKey(), new ResourceDataSource(entry.getKey(), 
entry.getValue()));
+        }
+        return result;
     }
     
     /**
diff --git 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
index 46a87afb08b..8f8102a5d00 100644
--- 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
+++ 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
@@ -17,11 +17,9 @@
 
 package org.apache.shardingsphere.transaction.rule;
 
-import com.google.common.base.Preconditions;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.rule.identifier.scope.GlobalRule;
 import org.apache.shardingsphere.infra.rule.identifier.type.ResourceHeldRule;
@@ -30,12 +28,10 @@ import 
org.apache.shardingsphere.transaction.config.TransactionRuleConfiguration
 import org.apache.shardingsphere.transaction.core.TransactionType;
 
 import javax.sql.DataSource;
-import java.util.HashMap;
-import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
-import java.util.Set;
 
 /**
  * Transaction rule.
@@ -56,8 +52,7 @@ public final class TransactionRule implements GlobalRule, 
ResourceHeldRule<Shard
     
     private volatile ShardingSphereTransactionManagerEngine resource;
     
-    public TransactionRule(final TransactionRuleConfiguration ruleConfig, 
final Map<String, ShardingSphereDatabase> databases, final InstanceContext 
instanceContext) {
-        log.debug("Create transaction rule");
+    public TransactionRule(final TransactionRuleConfiguration ruleConfig, 
final Map<String, ShardingSphereDatabase> databases) {
         configuration = ruleConfig;
         defaultType = 
TransactionType.valueOf(ruleConfig.getDefaultType().toUpperCase());
         providerType = ruleConfig.getProviderType();
@@ -70,21 +65,18 @@ public final class TransactionRule implements GlobalRule, 
ResourceHeldRule<Shard
         if (databases.isEmpty()) {
             return new ShardingSphereTransactionManagerEngine();
         }
-        Map<String, DataSource> dataSourceMap = new 
HashMap<>(databases.size());
-        Set<DatabaseType> databaseTypes = new HashSet<>();
+        Map<String, DataSource> dataSourceMap = new 
LinkedHashMap<>(databases.size(), 1);
+        Map<String, DatabaseType> databaseTypes = new 
LinkedHashMap<>(databases.size(), 1);
         for (Entry<String, ShardingSphereDatabase> entry : 
databases.entrySet()) {
             ShardingSphereDatabase database = entry.getValue();
             database.getResourceMetaData().getDataSources().forEach((key, 
value) -> dataSourceMap.put(database.getName() + "." + key, value));
-            if (null != 
entry.getValue().getResourceMetaData().getDatabaseType()) {
-                
databaseTypes.add(entry.getValue().getResourceMetaData().getDatabaseType());
-            }
+            database.getResourceMetaData().getDatabaseTypes().forEach((key, 
value) -> databaseTypes.put(database.getName() + "." + key, value));
         }
-        Preconditions.checkState(databaseTypes.size() < 2, "Multiple types of 
databases are not supported");
         if (dataSourceMap.isEmpty()) {
             return new ShardingSphereTransactionManagerEngine();
         }
         ShardingSphereTransactionManagerEngine result = new 
ShardingSphereTransactionManagerEngine();
-        result.init(databaseTypes.iterator().next(), dataSourceMap, 
providerType);
+        result.init(databaseTypes, dataSourceMap, providerType);
         return result;
     }
     
diff --git 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/builder/TransactionRuleBuilder.java
 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/builder/TransactionRuleBuilder.java
index 3962cd86858..2cac5cc0509 100644
--- 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/builder/TransactionRuleBuilder.java
+++ 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/builder/TransactionRuleBuilder.java
@@ -35,7 +35,7 @@ public final class TransactionRuleBuilder implements 
GlobalRuleBuilder<Transacti
     @Override
     public TransactionRule build(final TransactionRuleConfiguration 
ruleConfig, final Map<String, ShardingSphereDatabase> databases, final 
InstanceContext instanceContext,
                                  final ConfigurationProperties props) {
-        return new TransactionRule(ruleConfig, databases, instanceContext);
+        return new TransactionRule(ruleConfig, databases);
     }
     
     @Override
diff --git 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java
 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java
index 702a5208c09..fcf91c6d859 100644
--- 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java
+++ 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java
@@ -23,7 +23,7 @@ import 
org.apache.shardingsphere.transaction.core.TransactionType;
 
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.util.Collection;
+import java.util.Map;
 
 /**
  * ShardingSphere transaction manager.
@@ -33,11 +33,11 @@ public interface ShardingSphereTransactionManager extends 
AutoCloseable {
     /**
      * Initialize transaction manager.
      *
-     * @param databaseType database type
+     * @param databaseTypes database types
      * @param resourceDataSources resource data sources
      * @param providerType transaction manager provider type 
      */
-    void init(DatabaseType databaseType, Collection<ResourceDataSource> 
resourceDataSources, String providerType);
+    void init(Map<String, DatabaseType> databaseTypes, Map<String, 
ResourceDataSource> resourceDataSources, String providerType);
     
     /**
      * Get transaction type.
diff --git 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/ConnectionTransactionTest.java
 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/ConnectionTransactionTest.java
index a3711fd6fdb..d4792796c86 100644
--- 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/ConnectionTransactionTest.java
+++ 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/ConnectionTransactionTest.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.transaction;
 
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
-import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.transaction.ConnectionTransaction.DistributedTransactionOperationType;
 import 
org.apache.shardingsphere.transaction.config.TransactionRuleConfiguration;
 import org.apache.shardingsphere.transaction.rule.TransactionRule;
@@ -28,10 +27,9 @@ import java.util.Collections;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
 
 public final class ConnectionTransactionTest {
     
@@ -71,10 +69,10 @@ public final class ConnectionTransactionTest {
     }
     
     private TransactionRule getLocalTransactionRule() {
-        return new TransactionRule(new TransactionRuleConfiguration("LOCAL", 
null, new Properties()), Collections.emptyMap(), mock(InstanceContext.class));
+        return new TransactionRule(new TransactionRuleConfiguration("LOCAL", 
null, new Properties()), Collections.emptyMap());
     }
     
     private TransactionRule getXATransactionRule() {
-        return new TransactionRule(new TransactionRuleConfiguration("XA", 
"Atomikos", new Properties()), Collections.emptyMap(), 
mock(InstanceContext.class));
+        return new TransactionRule(new TransactionRuleConfiguration("XA", 
"Atomikos", new Properties()), Collections.emptyMap());
     }
 }
diff --git 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/ShardingSphereTransactionManagerEngineTest.java
 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/ShardingSphereTransactionManagerEngineTest.java
index 1f2134d8988..6dacc323969 100644
--- 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/ShardingSphereTransactionManagerEngineTest.java
+++ 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/ShardingSphereTransactionManagerEngineTest.java
@@ -43,7 +43,7 @@ public final class ShardingSphereTransactionManagerEngineTest 
{
         Runnable caller = mock(Runnable.class);
         ShardingSphereTransactionManagerFixture transactionManager = 
(ShardingSphereTransactionManagerFixture) 
transactionManagerEngine.getTransactionManager(TransactionType.XA);
         transactionManager.setCaller(caller);
-        transactionManagerEngine.init(DatabaseTypeFactory.getInstance("H2"), 
Collections.emptyMap(), "Atomikos");
+        
transactionManagerEngine.init(Collections.singletonMap("sharding_db.ds_0", 
DatabaseTypeFactory.getInstance("H2")), Collections.emptyMap(), "Atomikos");
         verify(caller).run();
     }
 }
diff --git 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/core/fixture/OtherShardingSphereTransactionManagerFixture.java
 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/core/fixture/OtherShardingSphereTransactionManagerFixture.java
index effa0645d15..48b475aeb15 100644
--- 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/core/fixture/OtherShardingSphereTransactionManagerFixture.java
+++ 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/core/fixture/OtherShardingSphereTransactionManagerFixture.java
@@ -23,12 +23,12 @@ import 
org.apache.shardingsphere.transaction.core.TransactionType;
 import 
org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManager;
 
 import java.sql.Connection;
-import java.util.Collection;
+import java.util.Map;
 
 public final class OtherShardingSphereTransactionManagerFixture implements 
ShardingSphereTransactionManager {
     
     @Override
-    public void init(final DatabaseType databaseType, final 
Collection<ResourceDataSource> resourceDataSources, final String providerType) {
+    public void init(final Map<String, DatabaseType> databaseTypes, final 
Map<String, ResourceDataSource> resourceDataSources, final String providerType) 
{
     }
     
     @Override
diff --git 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/core/fixture/ShardingSphereTransactionManagerFixture.java
 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/core/fixture/ShardingSphereTransactionManagerFixture.java
index 5f52e4b5691..5b793d03001 100644
--- 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/core/fixture/ShardingSphereTransactionManagerFixture.java
+++ 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/core/fixture/ShardingSphereTransactionManagerFixture.java
@@ -24,7 +24,7 @@ import 
org.apache.shardingsphere.transaction.core.TransactionType;
 import 
org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManager;
 
 import java.sql.Connection;
-import java.util.Collection;
+import java.util.Map;
 
 public final class ShardingSphereTransactionManagerFixture implements 
ShardingSphereTransactionManager {
     
@@ -32,7 +32,7 @@ public final class ShardingSphereTransactionManagerFixture 
implements ShardingSp
     private Runnable caller;
     
     @Override
-    public void init(final DatabaseType databaseType, final 
Collection<ResourceDataSource> resourceDataSources, final String providerType) {
+    public void init(final Map<String, DatabaseType> databaseTypes, final 
Map<String, ResourceDataSource> resourceDataSources, final String providerType) 
{
         if (null != caller) {
             caller.run();
         }
diff --git 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/rule/TransactionRuleTest.java
 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/rule/TransactionRuleTest.java
index f08fd4a21b7..11c5c171139 100644
--- 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/rule/TransactionRuleTest.java
+++ 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/rule/TransactionRuleTest.java
@@ -17,37 +17,62 @@
 
 package org.apache.shardingsphere.transaction.rule;
 
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
 import 
org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResourceMetaData;
+import org.apache.shardingsphere.test.mock.MockedDataSource;
 import 
org.apache.shardingsphere.transaction.config.TransactionRuleConfiguration;
+import org.apache.shardingsphere.transaction.core.TransactionType;
+import 
org.apache.shardingsphere.transaction.core.fixture.ShardingSphereTransactionManagerFixture;
 import org.junit.Test;
 
-import java.util.HashMap;
+import javax.sql.DataSource;
+import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.Map;
 
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertNotNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 public final class TransactionRuleTest {
     
-    @Test(expected = IllegalStateException.class)
-    public void assertMultiDatabaseTypeFail() {
-        TransactionRuleConfiguration transactionRuleConfiguration = 
mock(TransactionRuleConfiguration.class);
-        when(transactionRuleConfiguration.getDefaultType()).thenReturn("XA");
-        
when(transactionRuleConfiguration.getProviderType()).thenReturn("Atomikos");
-        ShardingSphereDatabase db1 = mock(ShardingSphereDatabase.class);
-        ShardingSphereResourceMetaData resourceMetaData1 = 
mock(ShardingSphereResourceMetaData.class);
-        when(resourceMetaData1.getDatabaseType()).thenReturn(new 
OpenGaussDatabaseType());
-        when(db1.getResourceMetaData()).thenReturn(resourceMetaData1);
-        ShardingSphereDatabase db2 = mock(ShardingSphereDatabase.class);
-        ShardingSphereResourceMetaData resourceMetaData2 = 
mock(ShardingSphereResourceMetaData.class);
-        when(resourceMetaData2.getDatabaseType()).thenReturn(new 
PostgreSQLDatabaseType());
-        when(db2.getResourceMetaData()).thenReturn(resourceMetaData2);
-        Map<String, ShardingSphereDatabase> databaseMap = new HashMap<>();
-        databaseMap.put("db1", db1);
-        databaseMap.put("db2", db2);
-        TransactionRule transactionRule = new 
TransactionRule(transactionRuleConfiguration, databaseMap, null);
+    @Test
+    public void assertInitTransactionRuleWithMultiDatabaseType() {
+        TransactionRule actual = new 
TransactionRule(createTransactionRuleConfiguration(), 
Collections.singletonMap("sharding_db", createDatabase()));
+        assertNotNull(actual.getResource());
+        
assertThat(actual.getResource().getTransactionManager(TransactionType.XA), 
instanceOf(ShardingSphereTransactionManagerFixture.class));
+    }
+    
+    private static ShardingSphereDatabase createDatabase() {
+        ShardingSphereDatabase result = mock(ShardingSphereDatabase.class);
+        ShardingSphereResourceMetaData resourceMetaData = 
createResourceMetaData();
+        when(result.getResourceMetaData()).thenReturn(resourceMetaData);
+        when(result.getName()).thenReturn("sharding_db");
+        return result;
+    }
+    
+    private static ShardingSphereResourceMetaData createResourceMetaData() {
+        ShardingSphereResourceMetaData result = 
mock(ShardingSphereResourceMetaData.class);
+        Map<String, DataSource> dataSourceMap = new LinkedHashMap<>(2, 1);
+        dataSourceMap.put("ds_0", new MockedDataSource());
+        dataSourceMap.put("ds_1", new MockedDataSource());
+        when(result.getDataSources()).thenReturn(dataSourceMap);
+        Map<String, DatabaseType> databaseTypes = new LinkedHashMap<>(2, 1);
+        databaseTypes.put("ds_0", new PostgreSQLDatabaseType());
+        databaseTypes.put("ds_1", new OpenGaussDatabaseType());
+        when(result.getDatabaseTypes()).thenReturn(databaseTypes);
+        return result;
+    }
+    
+    private static TransactionRuleConfiguration 
createTransactionRuleConfiguration() {
+        TransactionRuleConfiguration result = 
mock(TransactionRuleConfiguration.class);
+        when(result.getDefaultType()).thenReturn("XA");
+        when(result.getProviderType()).thenReturn("Atomikos");
+        return result;
     }
 }
diff --git 
a/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleStatementUpdater.java
 
b/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleStatementUpdater.java
index e679bf31f05..9662982e1d4 100644
--- 
a/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleStatementUpdater.java
+++ 
b/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleStatementUpdater.java
@@ -38,7 +38,7 @@ public final class AlterTransactionRuleStatementUpdater 
implements GlobalRuleRAL
         globalRules.stream().filter(each -> each instanceof 
TransactionRule).forEach(each -> ((TransactionRule) each).closeStaleResource());
         globalRules.removeIf(each -> each instanceof TransactionRule);
         TransactionRuleConfiguration toBeAlteredRuleConfig = 
createToBeAlteredRuleConfiguration(sqlStatement);
-        globalRules.add(new TransactionRule(toBeAlteredRuleConfig, 
metaData.getDatabases(), null));
+        globalRules.add(new TransactionRule(toBeAlteredRuleConfig, 
metaData.getDatabases()));
     }
     
     private TransactionRuleConfiguration 
createToBeAlteredRuleConfiguration(final SQLStatement sqlStatement) {
diff --git 
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/query/TransactionRuleQueryResultSetTest.java
 
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/query/TransactionRuleQueryResultSetTest.java
index 1647121a798..d0b7170c554 100644
--- 
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/query/TransactionRuleQueryResultSetTest.java
+++ 
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/query/TransactionRuleQueryResultSetTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.transaction.distsql.handler.query;
 
-import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
 import 
org.apache.shardingsphere.transaction.config.TransactionRuleConfiguration;
 import 
org.apache.shardingsphere.transaction.distsql.parser.statement.queryable.ShowTransactionRuleStatement;
@@ -65,7 +64,7 @@ public final class TransactionRuleQueryResultSetTest {
     }
     
     private ShardingSphereRuleMetaData mockGlobalRuleMetaData(final String 
defaultType, final String providerType, final Properties props) {
-        TransactionRule rule = new 
TransactionRule(createAuthorityRuleConfiguration(defaultType, providerType, 
props), Collections.emptyMap(), mock(InstanceContext.class));
+        TransactionRule rule = new 
TransactionRule(createAuthorityRuleConfiguration(defaultType, providerType, 
props), Collections.emptyMap());
         ShardingSphereRuleMetaData result = 
mock(ShardingSphereRuleMetaData.class);
         
when(result.findSingleRule(TransactionRule.class)).thenReturn(Optional.of(rule));
         return result;
diff --git 
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleStatementUpdaterTest.java
 
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleStatementUpdaterTest.java
index 630e2a20769..4d764b020c3 100644
--- 
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleStatementUpdaterTest.java
+++ 
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleStatementUpdaterTest.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.transaction.distsql.handler.update;
 
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -79,7 +78,7 @@ public final class AlterTransactionRuleStatementUpdaterTest {
     }
     
     private TransactionRule createTransactionRule(final Map<String, 
ShardingSphereDatabase> databases) {
-        return new TransactionRule(new TransactionRuleConfiguration("BASE", 
null, new Properties()), databases, mock(InstanceContext.class));
+        return new TransactionRule(new TransactionRuleConfiguration("BASE", 
null, new Properties()), databases);
     }
     
     private ShardingSphereDatabase mockDatabase() {
diff --git 
a/kernel/transaction/type/base/seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingSphereTransactionManager.java
 
b/kernel/transaction/type/base/seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingSphereTransactionManager.java
index 6b075db1905..5dd2a5bf52b 100644
--- 
a/kernel/transaction/type/base/seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingSphereTransactionManager.java
+++ 
b/kernel/transaction/type/base/seata-at/src/main/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingSphereTransactionManager.java
@@ -37,7 +37,6 @@ import 
org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManage
 import javax.sql.DataSource;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -65,10 +64,10 @@ public final class SeataATShardingSphereTransactionManager 
implements ShardingSp
     }
     
     @Override
-    public void init(final DatabaseType databaseType, final 
Collection<ResourceDataSource> resourceDataSources, final String providerType) {
+    public void init(final Map<String, DatabaseType> databaseTypes, final 
Map<String, ResourceDataSource> resourceDataSources, final String providerType) 
{
         if (enableSeataAT) {
             initSeataRPCClient();
-            resourceDataSources.forEach(each -> 
dataSourceMap.put(each.getOriginalName(), new 
DataSourceProxy(each.getDataSource())));
+            resourceDataSources.forEach((key, value) -> 
dataSourceMap.put(value.getOriginalName(), new 
DataSourceProxy(value.getDataSource())));
         }
     }
     
diff --git 
a/kernel/transaction/type/base/seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingSphereTransactionManagerTest.java
 
b/kernel/transaction/type/base/seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingSphereTransactionManagerTest.java
index 768927f4941..a6835ebc538 100644
--- 
a/kernel/transaction/type/base/seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingSphereTransactionManagerTest.java
+++ 
b/kernel/transaction/type/base/seata-at/src/test/java/org/apache/shardingsphere/transaction/base/seata/at/SeataATShardingSphereTransactionManagerTest.java
@@ -86,7 +86,8 @@ public final class 
SeataATShardingSphereTransactionManagerTest {
     
     @Before
     public void setUp() {
-        seataTransactionManager.init(DatabaseTypeFactory.getInstance("MySQL"), 
Collections.singletonList(new ResourceDataSource(DATA_SOURCE_UNIQUE_NAME, new 
MockedDataSource())), "Seata");
+        
seataTransactionManager.init(Collections.singletonMap("sharding_db.ds_0", 
DatabaseTypeFactory.getInstance("MySQL")),
+                Collections.singletonMap("sharding_db.ds_0", new 
ResourceDataSource(DATA_SOURCE_UNIQUE_NAME, new MockedDataSource())), "Seata");
     }
     
     @After
diff --git 
a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManager.java
 
b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManager.java
index c09471c78c1..7748806d2c6 100644
--- 
a/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManager.java
+++ 
b/kernel/transaction/type/xa/core/src/main/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManager.java
@@ -36,7 +36,6 @@ import javax.transaction.SystemException;
 import javax.transaction.TransactionManager;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -50,10 +49,10 @@ public final class XAShardingSphereTransactionManager 
implements ShardingSphereT
     private XATransactionManagerProvider xaTransactionManagerProvider;
     
     @Override
-    public void init(final DatabaseType databaseType, final 
Collection<ResourceDataSource> resourceDataSources, final String providerType) {
+    public void init(final Map<String, DatabaseType> databaseTypes, final 
Map<String, ResourceDataSource> resourceDataSources, final String providerType) 
{
         xaTransactionManagerProvider = 
XATransactionManagerProviderFactory.getInstance(providerType);
         xaTransactionManagerProvider.init();
-        resourceDataSources.forEach(each -> 
cachedDataSources.put(each.getOriginalName(), 
newXATransactionDataSource(databaseType, each)));
+        resourceDataSources.forEach((key, value) -> 
cachedDataSources.put(value.getOriginalName(), 
newXATransactionDataSource(databaseTypes.get(key), value)));
     }
     
     private XATransactionDataSource newXATransactionDataSource(final 
DatabaseType databaseType, final ResourceDataSource resourceDataSource) {
diff --git 
a/kernel/transaction/type/xa/core/src/test/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManagerTest.java
 
b/kernel/transaction/type/xa/core/src/test/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManagerTest.java
index ed3dddc520d..c3dac91cb5e 100644
--- 
a/kernel/transaction/type/xa/core/src/test/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManagerTest.java
+++ 
b/kernel/transaction/type/xa/core/src/test/java/org/apache/shardingsphere/transaction/xa/XAShardingSphereTransactionManagerTest.java
@@ -34,15 +34,13 @@ import javax.transaction.Transaction;
 import java.lang.reflect.Field;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 public final class XAShardingSphereTransactionManagerTest {
@@ -51,8 +49,9 @@ public final class XAShardingSphereTransactionManagerTest {
     
     @Before
     public void setUp() {
-        Collection<ResourceDataSource> resourceDataSources = 
createResourceDataSources(DatabaseTypeFactory.getInstance("H2"));
-        xaTransactionManager.init(DatabaseTypeFactory.getInstance("H2"), 
resourceDataSources, "Atomikos");
+        Map<String, ResourceDataSource> resourceDataSources = 
createResourceDataSources(DatabaseTypeFactory.getInstance("H2"));
+        Map<String, DatabaseType> databaseTypes = 
createDatabaseTypes(DatabaseTypeFactory.getInstance("H2"));
+        xaTransactionManager.init(databaseTypes, resourceDataSources, 
"Atomikos");
     }
     
     @After
@@ -82,9 +81,9 @@ public final class XAShardingSphereTransactionManagerTest {
     @Test
     public void assertGetConnection() throws SQLException {
         xaTransactionManager.begin();
-        Connection actual1 = xaTransactionManager.getConnection("demo_ds_1", 
"ds1");
-        Connection actual2 = xaTransactionManager.getConnection("demo_ds_2", 
"ds2");
-        Connection actual3 = xaTransactionManager.getConnection("demo_ds_3", 
"ds3");
+        Connection actual1 = xaTransactionManager.getConnection("sharding_db", 
"ds_0");
+        Connection actual2 = xaTransactionManager.getConnection("sharding_db", 
"ds_1");
+        Connection actual3 = xaTransactionManager.getConnection("sharding_db", 
"ds_2");
         assertThat(actual1, instanceOf(Connection.class));
         assertThat(actual2, instanceOf(Connection.class));
         assertThat(actual3, instanceOf(Connection.class));
@@ -93,10 +92,10 @@ public final class XAShardingSphereTransactionManagerTest {
     
     @Test
     public void assertGetConnectionOfNestedTransaction() throws SQLException {
-        ThreadLocal<Map<Transaction, Connection>> transactions = 
getEnlistedTransactions(getCachedDataSources().get("demo_ds_1.ds1"));
+        ThreadLocal<Map<Transaction, Connection>> transactions = 
getEnlistedTransactions(getCachedDataSources().get("sharding_db.ds_1"));
         xaTransactionManager.begin();
         assertTrue(transactions.get().isEmpty());
-        xaTransactionManager.getConnection("demo_ds_1", "ds1");
+        xaTransactionManager.getConnection("sharding_db", "ds_1");
         assertThat(transactions.get().size(), is(1));
         executeNestedTransaction(transactions);
         assertThat(transactions.get().size(), is(1));
@@ -106,7 +105,7 @@ public final class XAShardingSphereTransactionManagerTest {
     
     private void executeNestedTransaction(final ThreadLocal<Map<Transaction, 
Connection>> transactions) throws SQLException {
         xaTransactionManager.begin();
-        xaTransactionManager.getConnection("demo_ds_1", "ds1");
+        xaTransactionManager.getConnection("sharding_db", "ds_1");
         assertThat(transactions.get().size(), is(2));
         xaTransactionManager.commit(false);
         assertThat(transactions.get().size(), is(1));
@@ -151,11 +150,19 @@ public final class XAShardingSphereTransactionManagerTest 
{
         return (ThreadLocal<Map<Transaction, Connection>>) 
field.get(transactionDataSource);
     }
     
-    private Collection<ResourceDataSource> createResourceDataSources(final 
DatabaseType databaseType) {
-        List<ResourceDataSource> result = new LinkedList<>();
-        result.add(new ResourceDataSource("demo_ds_1.ds1", 
DataSourceUtils.build(HikariDataSource.class, databaseType, "demo_ds_1")));
-        result.add(new ResourceDataSource("demo_ds_2.ds2", 
DataSourceUtils.build(HikariDataSource.class, databaseType, "demo_ds_2")));
-        result.add(new ResourceDataSource("demo_ds_3.ds3", 
DataSourceUtils.build(AtomikosDataSourceBean.class, databaseType, 
"demo_ds_3")));
+    private Map<String, ResourceDataSource> createResourceDataSources(final 
DatabaseType databaseType) {
+        Map<String, ResourceDataSource> result = new LinkedHashMap<>(3, 1);
+        result.put("sharding_db.ds_0", new 
ResourceDataSource("sharding_db.ds_0", 
DataSourceUtils.build(HikariDataSource.class, databaseType, "demo_ds_0")));
+        result.put("sharding_db.ds_1", new 
ResourceDataSource("sharding_db.ds_1", 
DataSourceUtils.build(HikariDataSource.class, databaseType, "demo_ds_1")));
+        result.put("sharding_db.ds_2", new 
ResourceDataSource("sharding_db.ds_2", 
DataSourceUtils.build(AtomikosDataSourceBean.class, databaseType, 
"demo_ds_2")));
+        return result;
+    }
+    
+    private Map<String, DatabaseType> createDatabaseTypes(final DatabaseType 
databaseType) {
+        Map<String, DatabaseType> result = new LinkedHashMap<>(3, 1);
+        result.put("sharding_db.ds_0", databaseType);
+        result.put("sharding_db.ds_1", databaseType);
+        result.put("sharding_db.ds_2", databaseType);
         return result;
     }
 }


Reply via email to