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;
     }