You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/10/21 09:13:32 UTC
[shardingsphere] branch master updated: Support heterogeneous databases in single logic database for TransactionRule init (#21679)
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 <du...@apache.org>
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;
}
}