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/12/02 01:04:08 UTC
[shardingsphere] branch master updated: Move ShardingSphereTransactionManager to api module(#22567) (#22570)
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 196e88b670f Move ShardingSphereTransactionManager to api module(#22567) (#22570)
196e88b670f is described below
commit 196e88b670f69e7959e69729ac78eacb1ea49cf6
Author: ZhangCheng <fl...@outlook.com>
AuthorDate: Fri Dec 2 09:03:50 2022 +0800
Move ShardingSphereTransactionManager to api module(#22567) (#22570)
---
.../ShardingSphereTransactionManagerFactory.java | 4 ++--
.../spi/ShardingSphereTransactionManager.java | 6 +++---
.../ShardingSphereTransactionManagerEngine.java | 14 ++------------
.../OtherShardingSphereTransactionManagerFixture.java | 4 ++--
.../fixture/ShardingSphereTransactionManagerFixture.java | 4 ++--
.../at/SeataATShardingSphereTransactionManager.java | 15 +++++++--------
.../at/SeataATShardingSphereTransactionManagerTest.java | 9 ++++-----
.../xa/XAShardingSphereTransactionManager.java | 13 ++++++++++++-
.../xa/XAShardingSphereTransactionManagerTest.java | 16 ++++++++--------
9 files changed, 42 insertions(+), 43 deletions(-)
diff --git a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManagerFactory.java b/kernel/transaction/api/src/main/java/org/apache/shardingsphere/transaction/factory/ShardingSphereTransactionManagerFactory.java
similarity index 91%
rename from kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManagerFactory.java
rename to kernel/transaction/api/src/main/java/org/apache/shardingsphere/transaction/factory/ShardingSphereTransactionManagerFactory.java
index 96dceef2949..cd0551091f4 100644
--- a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManagerFactory.java
+++ b/kernel/transaction/api/src/main/java/org/apache/shardingsphere/transaction/factory/ShardingSphereTransactionManagerFactory.java
@@ -15,12 +15,12 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.transaction.spi;
+package org.apache.shardingsphere.transaction.factory;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.util.spi.ShardingSphereServiceLoader;
-
+import org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManager;
import java.util.Collection;
/**
diff --git a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java b/kernel/transaction/api/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java
similarity index 92%
rename from kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java
rename to kernel/transaction/api/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java
index a3e2094b6f4..d6a3ef36487 100644
--- a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java
+++ b/kernel/transaction/api/src/main/java/org/apache/shardingsphere/transaction/spi/ShardingSphereTransactionManager.java
@@ -18,9 +18,9 @@
package org.apache.shardingsphere.transaction.spi;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.transaction.core.ResourceDataSource;
import org.apache.shardingsphere.transaction.api.TransactionType;
+import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
@@ -34,10 +34,10 @@ public interface ShardingSphereTransactionManager extends AutoCloseable {
* Initialize transaction manager.
*
* @param databaseTypes database types
- * @param resourceDataSources resource data sources
+ * @param dataSources data sources
* @param providerType transaction manager provider type
*/
- void init(Map<String, DatabaseType> databaseTypes, Map<String, ResourceDataSource> resourceDataSources, String providerType);
+ void init(Map<String, DatabaseType> databaseTypes, Map<String, DataSource> dataSources, String providerType);
/**
* Get transaction type.
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 2da6931125d..8ecd8288929 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
@@ -20,14 +20,12 @@ package org.apache.shardingsphere.transaction;
import com.google.common.base.Preconditions;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.transaction.core.ResourceDataSource;
import org.apache.shardingsphere.transaction.api.TransactionType;
import org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManager;
-import org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManagerFactory;
+import org.apache.shardingsphere.transaction.factory.ShardingSphereTransactionManagerFactory;
import javax.sql.DataSource;
import java.util.EnumMap;
-import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
@@ -62,15 +60,7 @@ public final class ShardingSphereTransactionManagerEngine {
* @param providerType transaction manager provider type
*/
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 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;
+ transactionManagers.forEach((key, value) -> value.init(databaseTypes, dataSourceMap, providerType));
}
/**
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 8274471f9fc..a55fecca053 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
@@ -18,17 +18,17 @@
package org.apache.shardingsphere.transaction.core.fixture;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.transaction.core.ResourceDataSource;
import org.apache.shardingsphere.transaction.api.TransactionType;
import org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManager;
+import javax.sql.DataSource;
import java.sql.Connection;
import java.util.Map;
public final class OtherShardingSphereTransactionManagerFixture implements ShardingSphereTransactionManager {
@Override
- public void init(final Map<String, DatabaseType> databaseTypes, final Map<String, ResourceDataSource> resourceDataSources, final String providerType) {
+ public void init(final Map<String, DatabaseType> databaseTypes, final Map<String, DataSource> dataSources, 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 30882d23d06..84985cf9fb1 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
@@ -19,10 +19,10 @@ package org.apache.shardingsphere.transaction.core.fixture;
import lombok.Setter;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.transaction.core.ResourceDataSource;
import org.apache.shardingsphere.transaction.api.TransactionType;
import org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManager;
+import javax.sql.DataSource;
import java.sql.Connection;
import java.util.Map;
@@ -32,7 +32,7 @@ public final class ShardingSphereTransactionManagerFixture implements ShardingSp
private Runnable caller;
@Override
- public void init(final Map<String, DatabaseType> databaseTypes, final Map<String, ResourceDataSource> resourceDataSources, final String providerType) {
+ public void init(final Map<String, DatabaseType> databaseTypes, final Map<String, DataSource> dataSources, final String providerType) {
if (null != caller) {
caller.run();
}
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 5895036c709..f746657ac9a 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
@@ -30,7 +30,6 @@ import io.seata.tm.api.GlobalTransaction;
import io.seata.tm.api.GlobalTransactionContext;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.transaction.core.ResourceDataSource;
import org.apache.shardingsphere.transaction.api.TransactionType;
import org.apache.shardingsphere.transaction.spi.ShardingSphereTransactionManager;
@@ -64,10 +63,10 @@ public final class SeataATShardingSphereTransactionManager implements ShardingSp
}
@Override
- public void init(final Map<String, DatabaseType> databaseTypes, final Map<String, ResourceDataSource> resourceDataSources, final String providerType) {
+ public void init(final Map<String, DatabaseType> databaseTypes, final Map<String, DataSource> dataSources, final String providerType) {
if (enableSeataAT) {
initSeataRPCClient();
- resourceDataSources.forEach((key, value) -> dataSourceMap.put(value.getOriginalName(), new DataSourceProxy(value.getDataSource())));
+ dataSources.forEach((key, value) -> dataSourceMap.put(key, new DataSourceProxy(value)));
}
}
@@ -84,13 +83,13 @@ public final class SeataATShardingSphereTransactionManager implements ShardingSp
@Override
public boolean isInTransaction() {
- Preconditions.checkState(enableSeataAT, "sharding seata-at transaction has been disabled.");
+ Preconditions.checkState(enableSeataAT, "ShardingSphere seata-at transaction has been disabled.");
return null != RootContext.getXID();
}
@Override
public Connection getConnection(final String databaseName, final String dataSourceName) throws SQLException {
- Preconditions.checkState(enableSeataAT, "sharding seata-at transaction has been disabled.");
+ Preconditions.checkState(enableSeataAT, "ShardingSphere seata-at transaction has been disabled.");
return dataSourceMap.get(databaseName + "." + dataSourceName).getConnection();
}
@@ -105,7 +104,7 @@ public final class SeataATShardingSphereTransactionManager implements ShardingSp
if (timeout < 0) {
throw new TransactionException("timeout should more than 0s");
}
- Preconditions.checkState(enableSeataAT, "sharding seata-at transaction has been disabled.");
+ Preconditions.checkState(enableSeataAT, "ShardingSphere seata-at transaction has been disabled.");
GlobalTransaction globalTransaction = GlobalTransactionContext.getCurrentOrCreate();
globalTransaction.begin(timeout * 1000);
SeataTransactionHolder.set(globalTransaction);
@@ -114,7 +113,7 @@ public final class SeataATShardingSphereTransactionManager implements ShardingSp
@Override
@SneakyThrows(TransactionException.class)
public void commit(final boolean rollbackOnly) {
- Preconditions.checkState(enableSeataAT, "sharding seata-at transaction has been disabled.");
+ Preconditions.checkState(enableSeataAT, "ShardingSphere seata-at transaction has been disabled.");
try {
SeataTransactionHolder.get().commit();
} finally {
@@ -126,7 +125,7 @@ public final class SeataATShardingSphereTransactionManager implements ShardingSp
@Override
@SneakyThrows(TransactionException.class)
public void rollback() {
- Preconditions.checkState(enableSeataAT, "sharding seata-at transaction has been disabled.");
+ Preconditions.checkState(enableSeataAT, "ShardingSphere seata-at transaction has been disabled.");
try {
SeataTransactionHolder.get().rollback();
} finally {
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 b947ad65367..3d5d66cbf74 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
@@ -33,9 +33,8 @@ import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
import org.apache.shardingsphere.infra.executor.kernel.model.ExecutorDataMap;
import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
-import org.apache.shardingsphere.transaction.base.seata.at.fixture.MockSeataServer;
-import org.apache.shardingsphere.transaction.core.ResourceDataSource;
import org.apache.shardingsphere.transaction.api.TransactionType;
+import org.apache.shardingsphere.transaction.base.seata.at.fixture.MockSeataServer;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
@@ -61,7 +60,7 @@ public final class SeataATShardingSphereTransactionManagerTest {
private static final MockSeataServer MOCK_SEATA_SERVER = new MockSeataServer();
- private static final String DATA_SOURCE_UNIQUE_NAME = "sharding_db.foo_ds";
+ private static final String DATA_SOURCE_UNIQUE_NAME = "sharding_db.ds_0";
private final SeataATShardingSphereTransactionManager seataTransactionManager = new SeataATShardingSphereTransactionManager();
@@ -87,7 +86,7 @@ public final class SeataATShardingSphereTransactionManagerTest {
@Before
public void setUp() {
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");
+ Collections.singletonMap(DATA_SOURCE_UNIQUE_NAME, new MockedDataSource()), "Seata");
}
@After
@@ -111,7 +110,7 @@ public final class SeataATShardingSphereTransactionManagerTest {
@Test
public void assertGetConnection() throws SQLException {
- Connection actual = seataTransactionManager.getConnection("sharding_db", "foo_ds");
+ Connection actual = seataTransactionManager.getConnection("sharding_db", "ds_0");
assertThat(actual, instanceOf(ConnectionProxy.class));
}
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 c2689366900..370054c8564 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
@@ -37,7 +37,9 @@ import javax.transaction.TransactionManager;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Map.Entry;
/**
* ShardingSphere Transaction manager for XA.
@@ -49,12 +51,21 @@ public final class XAShardingSphereTransactionManager implements ShardingSphereT
private XATransactionManagerProvider xaTransactionManagerProvider;
@Override
- public void init(final Map<String, DatabaseType> databaseTypes, final Map<String, ResourceDataSource> resourceDataSources, final String providerType) {
+ public void init(final Map<String, DatabaseType> databaseTypes, final Map<String, DataSource> dataSources, final String providerType) {
xaTransactionManagerProvider = XATransactionManagerProviderFactory.getInstance(providerType);
xaTransactionManagerProvider.init();
+ Map<String, ResourceDataSource> resourceDataSources = getResourceDataSources(dataSources);
resourceDataSources.forEach((key, value) -> cachedDataSources.put(value.getOriginalName(), newXATransactionDataSource(databaseTypes.get(key), value)));
}
+ 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;
+ }
+
private XATransactionDataSource newXATransactionDataSource(final DatabaseType databaseType, final ResourceDataSource resourceDataSource) {
String resourceName = resourceDataSource.getUniqueResourceName();
DataSource dataSource = resourceDataSource.getDataSource();
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 34b7731b1c2..2842f483db2 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
@@ -22,7 +22,6 @@ import com.zaxxer.hikari.HikariDataSource;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
-import org.apache.shardingsphere.transaction.core.ResourceDataSource;
import org.apache.shardingsphere.transaction.api.TransactionType;
import org.apache.shardingsphere.transaction.xa.fixture.DataSourceUtils;
import org.apache.shardingsphere.transaction.xa.jta.datasource.XATransactionDataSource;
@@ -30,6 +29,7 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import javax.sql.DataSource;
import javax.transaction.Transaction;
import java.lang.reflect.Field;
import java.sql.Connection;
@@ -49,9 +49,9 @@ public final class XAShardingSphereTransactionManagerTest {
@Before
public void setUp() {
- Map<String, ResourceDataSource> resourceDataSources = createResourceDataSources(DatabaseTypeFactory.getInstance("H2"));
+ Map<String, DataSource> dataSources = createDataSources(DatabaseTypeFactory.getInstance("H2"));
Map<String, DatabaseType> databaseTypes = createDatabaseTypes(DatabaseTypeFactory.getInstance("H2"));
- xaTransactionManager.init(databaseTypes, resourceDataSources, "Atomikos");
+ xaTransactionManager.init(databaseTypes, dataSources, "Atomikos");
}
@After
@@ -150,11 +150,11 @@ public final class XAShardingSphereTransactionManagerTest {
return (ThreadLocal<Map<Transaction, Connection>>) field.get(transactionDataSource);
}
- 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")));
+ private Map<String, DataSource> createDataSources(final DatabaseType databaseType) {
+ Map<String, DataSource> result = new LinkedHashMap<>(3, 1);
+ result.put("sharding_db.ds_0", DataSourceUtils.build(HikariDataSource.class, databaseType, "demo_ds_0"));
+ result.put("sharding_db.ds_1", DataSourceUtils.build(HikariDataSource.class, databaseType, "demo_ds_1"));
+ result.put("sharding_db.ds_2", DataSourceUtils.build(AtomikosDataSourceBean.class, databaseType, "demo_ds_2"));
return result;
}