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

duanzhengqiang 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 3df0f4b21fe Replace TransactionStatus.transactionType with 
transactionRule.defaultType (#31021)
3df0f4b21fe is described below

commit 3df0f4b21fef654e7840c7442b3c33ab242f8318
Author: ZhangCheng <[email protected]>
AuthorDate: Fri Apr 26 13:54:25 2024 +0800

    Replace TransactionStatus.transactionType with transactionRule.defaultType 
(#31021)
    
    * Replace TransactionStatus.transactionType with transactionRule.defaultType
    
    * Replace TransactionStatus.transactionType with transactionRule.defaultType
    
    * Replace TransactionStatus.transactionType with transactionRule.defaultType
    
    * Replace TransactionStatus.transactionType with transactionRule.defaultType
    
    * Replace TransactionStatus.transactionType with transactionRule.defaultType
    
    * Replace TransactionStatus.transactionType with transactionRule.defaultType
    
    * Replace TransactionStatus.transactionType with transactionRule.defaultType
---
 .../proxy/backend/connector/DatabaseConnector.java |  6 +++--
 .../connector/ProxyDatabaseConnectionManager.java  |  2 +-
 .../proxy/backend/connector/ProxySQLExecutor.java  |  4 +++-
 .../transaction/BackendTransactionManager.java     | 12 +++-------
 .../handler/transaction/TransactionXAHandler.java  |  5 +++-
 .../proxy/backend/session/ConnectionSession.java   |  5 ++--
 .../session/transaction/TransactionStatus.java     | 12 +++-------
 .../proxy/backend/util/TransactionUtils.java       | 17 ++++++++++++++
 .../ProxyDatabaseConnectionManagerTest.java        | 27 +++++++++++++++++++++-
 .../backend/connector/ProxySQLExecutorTest.java    | 27 +++++++++++++---------
 .../transaction/BackendTransactionManagerTest.java |  3 ++-
 .../handler/ProxyBackendHandlerFactoryTest.java    |  2 --
 ...DistVariableUpdatableRALBackendHandlerTest.java |  3 +--
 .../backend/session/ConnectionSessionTest.java     |  3 +--
 .../session/transaction/TransactionStatusTest.java | 13 +++--------
 .../executor/ShowProcessListExecutorTest.java      |  3 +--
 .../TransactionIsolationValueProviderTest.java     |  3 +--
 .../TransactionReadOnlyValueProviderTest.java      |  3 +--
 .../sysvar/provider/VersionValueProviderTest.java  |  3 +--
 .../netty/FrontendChannelInboundHandler.java       |  5 +---
 .../proxy/frontend/state/impl/OKProxyState.java    |  3 ++-
 .../frontend/state/impl/OKProxyStateTest.java      | 26 +++++++++++++++++++--
 .../admin/MySQLComResetConnectionExecutorTest.java |  3 +--
 .../reset/MySQLComStmtResetExecutorTest.java       |  3 +--
 .../PostgreSQLCommandExecuteEngineTest.java        |  3 +--
 .../sync/PostgreSQLComSyncExecutorTest.java        |  3 +--
 26 files changed, 121 insertions(+), 78 deletions(-)

diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
index d53b658791b..9946dcc9c85 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
@@ -32,8 +32,8 @@ import 
org.apache.shardingsphere.infra.connection.refresher.MetaDataRefreshEngin
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.exception.dialect.SQLExceptionTransformEngine;
-import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.EmptyRuleException;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storageunit.EmptyStorageUnitException;
+import 
org.apache.shardingsphere.infra.exception.kernel.metadata.rule.EmptyRuleException;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.SQLExecutorExceptionHandler;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
@@ -67,6 +67,7 @@ import 
org.apache.shardingsphere.proxy.backend.response.header.query.QueryRespon
 import 
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
+import org.apache.shardingsphere.proxy.backend.util.TransactionUtils;
 import 
org.apache.shardingsphere.sharding.merge.common.IteratorStreamMergedResult;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DMLStatement;
@@ -183,8 +184,9 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
         if (!databaseConnectionManager.getConnectionSession().isAutoCommit()) {
             return false;
         }
+        TransactionType transactionType = 
TransactionUtils.getTransactionType(databaseConnectionManager.getConnectionSession().getConnectionContext().getTransactionContext());
         TransactionStatus transactionStatus = 
databaseConnectionManager.getConnectionSession().getTransactionStatus();
-        if 
(!TransactionType.isDistributedTransaction(transactionStatus.getTransactionType())
 || transactionStatus.isInTransaction()) {
+        if (!TransactionType.isDistributedTransaction(transactionType) || 
transactionStatus.isInTransaction()) {
             return false;
         }
         return isWriteDMLStatement(sqlStatement) && multiExecutionUnits;
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
index 99e7df7d50e..f5c3b3d3d71 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
@@ -247,7 +247,7 @@ public final class ProxyDatabaseConnectionManager 
implements OnlineDatabaseConne
     public void closeExecutionResources() throws BackendConnectionException {
         synchronized (this) {
             Collection<Exception> result = new 
LinkedList<>(closeHandlers(false));
-            if 
(!connectionSession.getTransactionStatus().isInConnectionHeldTransaction()) {
+            if 
(!connectionSession.getTransactionStatus().isInConnectionHeldTransaction(TransactionUtils.getTransactionType(connectionSession.getConnectionContext().getTransactionContext())))
 {
                 result.addAll(closeHandlers(true));
                 result.addAll(closeConnections(false));
             } else if (closed.get()) {
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
index 83cea2047df..4b0a5154597 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
@@ -52,6 +52,7 @@ import 
org.apache.shardingsphere.proxy.backend.context.BackendExecutorContext;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
+import org.apache.shardingsphere.proxy.backend.util.TransactionUtils;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CloseStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
@@ -121,8 +122,9 @@ public final class ProxySQLExecutor {
     }
     
     private boolean isExecuteDDLInXATransaction(final SQLStatement 
sqlStatement) {
+        TransactionType transactionType = 
TransactionUtils.getTransactionType(databaseConnectionManager.getConnectionSession().getConnectionContext().getTransactionContext());
         TransactionStatus transactionStatus = 
databaseConnectionManager.getConnectionSession().getTransactionStatus();
-        return TransactionType.XA == transactionStatus.getTransactionType() && 
transactionStatus.isInTransaction() && isUnsupportedDDLStatement(sqlStatement);
+        return TransactionType.XA == transactionType && 
transactionStatus.isInTransaction() && isUnsupportedDDLStatement(sqlStatement);
     }
     
     private boolean isExecuteDDLInPostgreSQLOpenGaussTransaction(final 
SQLStatement sqlStatement) {
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java
index 2bb7d600c12..34611c3896b 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
 import 
org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnectionManager;
 import org.apache.shardingsphere.proxy.backend.connector.TransactionManager;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.util.TransactionUtils;
 import org.apache.shardingsphere.transaction.ConnectionSavepointManager;
 import 
org.apache.shardingsphere.transaction.ShardingSphereTransactionManagerEngine;
 import org.apache.shardingsphere.transaction.api.TransactionType;
@@ -88,7 +89,7 @@ public final class BackendTransactionManager implements 
TransactionManager {
         }
         if 
(connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
             try {
-                if (TransactionType.LOCAL == getTransactionType() || null == 
shardingSphereTransactionManager) {
+                if (TransactionType.LOCAL == 
TransactionUtils.getTransactionType(getTransactionContext()) || null == 
shardingSphereTransactionManager) {
                     localTransactionManager.commit();
                 } else {
                     
shardingSphereTransactionManager.commit(connection.getConnectionSession().getTransactionStatus().isExceptionOccur());
@@ -105,13 +106,6 @@ public final class BackendTransactionManager implements 
TransactionManager {
         }
     }
     
-    private TransactionType getTransactionType() {
-        if (getTransactionContext().getTransactionType().isPresent()) {
-            return 
TransactionType.valueOf(getTransactionContext().getTransactionType().get());
-        }
-        return transactionType;
-    }
-    
     @Override
     public void rollback() throws SQLException {
         for (TransactionHook each : transactionHooks) {
@@ -119,7 +113,7 @@ public final class BackendTransactionManager implements 
TransactionManager {
         }
         if 
(connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
             try {
-                if (TransactionType.LOCAL == getTransactionType() || null == 
shardingSphereTransactionManager) {
+                if (TransactionType.LOCAL == 
TransactionUtils.getTransactionType(getTransactionContext()) || null == 
shardingSphereTransactionManager) {
                     localTransactionManager.rollback();
                 } else {
                     shardingSphereTransactionManager.rollback();
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionXAHandler.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionXAHandler.java
index 8e9fb34b500..b66ff7ce308 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionXAHandler.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionXAHandler.java
@@ -28,11 +28,13 @@ import 
org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
 import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
+import org.apache.shardingsphere.proxy.backend.util.TransactionUtils;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.xa.XABeginStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.xa.XACommitStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.xa.XARecoveryStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.xa.XARollbackStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.xa.XAStatement;
+import org.apache.shardingsphere.transaction.api.TransactionType;
 import 
org.apache.shardingsphere.transaction.xa.jta.exception.XATransactionNestedBeginException;
 
 import java.sql.SQLException;
@@ -85,7 +87,8 @@ public final class TransactionXAHandler implements 
ProxyBackendHandler {
     private ResponseHeader begin() throws SQLException {
         
ShardingSpherePreconditions.checkState(!connectionSession.getTransactionStatus().isInTransaction(),
 XATransactionNestedBeginException::new);
         ResponseHeader result = backendHandler.execute();
-        
connectionSession.getConnectionContext().getTransactionContext().beginTransaction(String.valueOf(connectionSession.getTransactionStatus().getTransactionType()));
+        TransactionType transactionType = 
TransactionUtils.getTransactionType(connectionSession.getConnectionContext().getTransactionContext());
+        
connectionSession.getConnectionContext().getTransactionContext().beginTransaction(String.valueOf(transactionType));
         return result;
     }
     
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
index d82d7d15bc1..1273c9aee70 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
@@ -30,7 +30,6 @@ import 
org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnection
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.statement.JDBCBackendStatement;
 import 
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
 import 
org.apache.shardingsphere.sql.parser.sql.common.enums.TransactionIsolationLevel;
-import org.apache.shardingsphere.transaction.api.TransactionType;
 
 /**
  * Connection session.
@@ -75,9 +74,9 @@ public final class ConnectionSession {
     
     private QueryContext queryContext;
     
-    public ConnectionSession(final DatabaseType protocolType, final 
TransactionType initialTransactionType, final AttributeMap attributeMap) {
+    public ConnectionSession(final DatabaseType protocolType, final 
AttributeMap attributeMap) {
         this.protocolType = protocolType;
-        transactionStatus = new TransactionStatus(initialTransactionType);
+        transactionStatus = new TransactionStatus();
         this.attributeMap = attributeMap;
         databaseConnectionManager = new ProxyDatabaseConnectionManager(this);
         statementManager = new JDBCBackendStatement();
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatus.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatus.java
index 290c28c12d4..081e34188ea 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatus.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatus.java
@@ -24,27 +24,21 @@ import 
org.apache.shardingsphere.transaction.api.TransactionType;
 /**
  * Transaction status.
  */
+@Setter
 @Getter
 public final class TransactionStatus {
     
-    @Setter
     private volatile boolean inTransaction;
     
-    private final TransactionType transactionType;
-    
-    @Setter
     private volatile boolean exceptionOccur;
     
-    public TransactionStatus(final TransactionType initialTransactionType) {
-        transactionType = initialTransactionType;
-    }
-    
     /**
      * Judge whether in connection held transaction.
      * 
+     * @param transactionType transaction type
      * @return is in connection held transaction or not
      */
-    public boolean isInConnectionHeldTransaction() {
+    public boolean isInConnectionHeldTransaction(final TransactionType 
transactionType) {
         return inTransaction && TransactionType.BASE != transactionType;
     }
 }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/TransactionUtils.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/TransactionUtils.java
index 5a2a2d7daaa..e2640ca778c 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/TransactionUtils.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/TransactionUtils.java
@@ -19,7 +19,11 @@ package org.apache.shardingsphere.proxy.backend.util;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.infra.session.connection.transaction.TransactionConnectionContext;
+import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.sql.parser.sql.common.enums.TransactionIsolationLevel;
+import org.apache.shardingsphere.transaction.api.TransactionType;
+import org.apache.shardingsphere.transaction.rule.TransactionRule;
 
 import java.sql.Connection;
 
@@ -70,4 +74,17 @@ public final class TransactionUtils {
                 return TransactionIsolationLevel.NONE;
         }
     }
+    
+    /**
+     * Get transaction type.
+     *
+     * @param transactionContext transaction context
+     * @return transaction type
+     */
+    public static TransactionType getTransactionType(final 
TransactionConnectionContext transactionContext) {
+        if (transactionContext.getTransactionType().isPresent()) {
+            return 
TransactionType.valueOf(transactionContext.getTransactionType().get());
+        }
+        return 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(TransactionRule.class).getDefaultType();
+    }
 }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
index 4daad708469..a46b0ef54b1 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
@@ -19,7 +19,18 @@ package org.apache.shardingsphere.proxy.backend.connector;
 
 import com.google.common.collect.Multimap;
 import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
+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.RuleMetaData;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.connection.ConnectionPostProcessor;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.datasource.JDBCBackendDataSource;
 import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.statement.JDBCBackendStatement;
@@ -33,6 +44,7 @@ import 
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionSt
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
 import org.apache.shardingsphere.transaction.api.TransactionType;
+import org.apache.shardingsphere.transaction.rule.TransactionRule;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -91,16 +103,29 @@ class ProxyDatabaseConnectionManagerTest {
     
     @BeforeEach
     void setUp() {
+        ContextManager contextManager = mockContextManager();
+        
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
         
when(ProxyContext.getInstance().getBackendDataSource()).thenReturn(backendDataSource);
+        when(connectionSession.getTransactionStatus()).thenReturn(new 
TransactionStatus());
         
when(connectionSession.getDatabaseName()).thenReturn(String.format(SCHEMA_PATTERN,
 0));
         databaseConnectionManager = new 
ProxyDatabaseConnectionManager(connectionSession);
         
when(connectionSession.getDatabaseConnectionManager()).thenReturn(databaseConnectionManager);
-        when(connectionSession.getTransactionStatus()).thenReturn(new 
TransactionStatus(TransactionType.LOCAL));
         JDBCBackendStatement backendStatement = new JDBCBackendStatement();
         
when(connectionSession.getStatementManager()).thenReturn(backendStatement);
         
when(connectionSession.getRequiredSessionVariableRecorder()).thenReturn(new 
RequiredSessionVariableRecorder());
     }
     
+    private ContextManager mockContextManager() {
+        ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class, 
RETURNS_DEEP_STUBS);
+        
when(metaData.getDatabase(DefaultDatabase.LOGIC_NAME)).thenReturn(mock(ShardingSphereDatabase.class,
 RETURNS_DEEP_STUBS));
+        
when(metaData.getDatabases().values().iterator().next().getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
+        
when(metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
+        TransactionRule transactionRule = mock(TransactionRule.class);
+        
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
+        when(metaData.getGlobalRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singletonList(transactionRule)));
+        return new ContextManager(new 
MetaDataContexts(mock(MetaDataPersistService.class), metaData), 
mock(InstanceContext.class));
+    }
+    
     @AfterEach
     void clean() throws ReflectiveOperationException {
         Field field = 
ProxyContext.getInstance().getClass().getDeclaredField("backendDataSource");
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
index d6a5b28c337..06cef4cdb1c 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.proxy.backend.connector;
 
-import 
org.apache.shardingsphere.infra.exception.dialect.exception.transaction.TableModifyInTransactionException;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.CreateTableStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.CursorStatementContext;
@@ -28,6 +27,7 @@ import 
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import 
org.apache.shardingsphere.infra.exception.dialect.exception.transaction.TableModifyInTransactionException;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import 
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.JDBCDriverType;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
@@ -62,6 +62,7 @@ import 
org.apache.shardingsphere.sqlfederation.rule.SQLFederationRule;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
 import org.apache.shardingsphere.transaction.api.TransactionType;
+import org.apache.shardingsphere.transaction.rule.TransactionRule;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -70,6 +71,7 @@ import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoSettings;
 import org.mockito.quality.Strictness;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Optional;
 
@@ -91,9 +93,11 @@ class ProxySQLExecutorTest {
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private ProxyDatabaseConnectionManager databaseConnectionManager;
     
+    @Mock
+    private TransactionRule transactionRule;
+    
     @BeforeEach
     void setUp() {
-        
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.XA);
         
when(connectionSession.getTransactionStatus().isInTransaction()).thenReturn(true);
         
when(connectionSession.getDatabaseConnectionManager()).thenReturn(databaseConnectionManager);
         
when(databaseConnectionManager.getConnectionSession()).thenReturn(connectionSession);
@@ -102,7 +106,8 @@ class ProxySQLExecutorTest {
         
when(metaData.getDatabase(DefaultDatabase.LOGIC_NAME)).thenReturn(mock(ShardingSphereDatabase.class,
 RETURNS_DEEP_STUBS));
         
when(metaData.getDatabases().values().iterator().next().getProtocolType()).thenReturn(databaseType);
         
when(metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
-        when(metaData.getGlobalRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singletonList(mock(SQLFederationRule.class))));
+        when(transactionRule.getDefaultType()).thenReturn(TransactionType.XA);
+        when(metaData.getGlobalRuleMetaData()).thenReturn(new 
RuleMetaData(Arrays.asList(mock(SQLFederationRule.class), transactionRule)));
         ContextManager contextManager = new ContextManager(new 
MetaDataContexts(mock(MetaDataPersistService.class), metaData), 
mock(InstanceContext.class));
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
     }
@@ -125,7 +130,7 @@ class ProxySQLExecutorTest {
     
     @Test
     void 
assertCheckExecutePrerequisitesWhenExecuteTruncateInMySQLLocalTransaction() {
-        
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+        
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
         ExecutionContext executionContext = new ExecutionContext(
                 new QueryContext(createMySQLTruncateStatementContext(), "", 
Collections.emptyList(), new HintValueContext()), Collections.emptyList(), 
mock(RouteContext.class));
         new ProxySQLExecutor(JDBCDriverType.STATEMENT, 
databaseConnectionManager, mock(DatabaseConnector.class), 
mockQueryContext()).checkExecutePrerequisites(executionContext);
@@ -140,7 +145,7 @@ class ProxySQLExecutorTest {
     
     @Test
     void assertCheckExecutePrerequisitesWhenExecuteDDLInBaseTransaction() {
-        
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.BASE);
+        
when(transactionRule.getDefaultType()).thenReturn(TransactionType.BASE);
         ExecutionContext executionContext = new ExecutionContext(
                 new QueryContext(createMySQLCreateTableStatementContext(), "", 
Collections.emptyList(), new HintValueContext()), Collections.emptyList(), 
mock(RouteContext.class));
         new ProxySQLExecutor(JDBCDriverType.STATEMENT, 
databaseConnectionManager, mock(DatabaseConnector.class), 
mockQueryContext()).checkExecutePrerequisites(executionContext);
@@ -156,7 +161,7 @@ class ProxySQLExecutorTest {
     
     @Test
     void 
assertCheckExecutePrerequisitesWhenExecuteDDLInPostgreSQLTransaction() {
-        
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+        
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
         ExecutionContext executionContext = new ExecutionContext(
                 new 
QueryContext(createPostgreSQLCreateTableStatementContext(), "", 
Collections.emptyList(), new HintValueContext()), Collections.emptyList(), 
mock(RouteContext.class));
         assertThrows(TableModifyInTransactionException.class,
@@ -165,7 +170,7 @@ class ProxySQLExecutorTest {
     
     @Test
     void 
assertCheckExecutePrerequisitesWhenExecuteTruncateInPostgreSQLTransaction() {
-        
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+        
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
         ExecutionContext executionContext = new ExecutionContext(
                 new QueryContext(createPostgreSQLTruncateStatementContext(), 
"", Collections.emptyList(), new HintValueContext()), Collections.emptyList(), 
mock(RouteContext.class));
         new ProxySQLExecutor(JDBCDriverType.STATEMENT, 
databaseConnectionManager, mock(DatabaseConnector.class), 
mockQueryContext()).checkExecutePrerequisites(executionContext);
@@ -173,7 +178,7 @@ class ProxySQLExecutorTest {
     
     @Test
     void 
assertCheckExecutePrerequisitesWhenExecuteCursorInPostgreSQLTransaction() {
-        
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+        
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
         ExecutionContext executionContext = new ExecutionContext(
                 new QueryContext(createCursorStatementContext(), "", 
Collections.emptyList(), new HintValueContext()), Collections.emptyList(), 
mock(RouteContext.class));
         new ProxySQLExecutor(JDBCDriverType.STATEMENT, 
databaseConnectionManager, mock(DatabaseConnector.class), 
mockQueryContext()).checkExecutePrerequisites(executionContext);
@@ -181,7 +186,7 @@ class ProxySQLExecutorTest {
     
     @Test
     void 
assertCheckExecutePrerequisitesWhenExecuteDMLInPostgreSQLTransaction() {
-        
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+        
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
         ExecutionContext executionContext = new ExecutionContext(
                 new QueryContext(createPostgreSQLInsertStatementContext(), "", 
Collections.emptyList(), new HintValueContext()), Collections.emptyList(), 
mock(RouteContext.class));
         new ProxySQLExecutor(JDBCDriverType.STATEMENT, 
databaseConnectionManager, mock(DatabaseConnector.class), 
mockQueryContext()).checkExecutePrerequisites(executionContext);
@@ -189,7 +194,7 @@ class ProxySQLExecutorTest {
     
     @Test
     void assertCheckExecutePrerequisitesWhenExecuteDDLInMySQLTransaction() {
-        
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+        
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
         ExecutionContext executionContext = new ExecutionContext(
                 new QueryContext(createMySQLCreateTableStatementContext(), "", 
Collections.emptyList(), new HintValueContext()), Collections.emptyList(), 
mock(RouteContext.class));
         new ProxySQLExecutor(JDBCDriverType.STATEMENT, 
databaseConnectionManager, mock(DatabaseConnector.class), 
mockQueryContext()).checkExecutePrerequisites(executionContext);
@@ -204,7 +209,7 @@ class ProxySQLExecutorTest {
     
     @Test
     void 
assertCheckExecutePrerequisitesWhenExecuteDDLNotInPostgreSQLTransaction() {
-        
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
+        
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
         
when(connectionSession.getTransactionStatus().isInTransaction()).thenReturn(false);
         ExecutionContext executionContext = new ExecutionContext(
                 new 
QueryContext(createPostgreSQLCreateTableStatementContext(), "", 
Collections.emptyList(), new HintValueContext()), Collections.emptyList(), 
mock(RouteContext.class));
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManagerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManagerTest.java
index 14c19ebecd5..7c83644727b 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManagerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManagerTest.java
@@ -167,7 +167,8 @@ class BackendTransactionManagerTest {
     }
     
     private void newBackendTransactionManager(final TransactionType 
transactionType, final boolean inTransaction) {
-        
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(transactionType);
+        
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(TransactionRule.class).getDefaultType())
+                .thenReturn(transactionType);
         when(transactionStatus.isInTransaction()).thenReturn(inTransaction);
         backendTransactionManager = new 
BackendTransactionManager(databaseConnectionManager);
         setLocalTransactionManager();
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
index 271308ae308..0df3a5603e2 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
@@ -48,7 +48,6 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.EmptyStatement;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
-import org.apache.shardingsphere.transaction.api.TransactionType;
 import org.apache.shardingsphere.transaction.rule.TransactionRule;
 import 
org.apache.shardingsphere.transaction.rule.builder.DefaultTransactionRuleConfigurationBuilder;
 import org.junit.jupiter.api.BeforeEach;
@@ -92,7 +91,6 @@ class ProxyBackendHandlerFactoryTest {
     @BeforeEach
     void setUp() {
         when(connectionSession.getGrantee()).thenReturn(new 
Grantee(DefaultUser.USERNAME, "%"));
-        
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.LOCAL);
         when(connectionSession.getDefaultDatabaseName()).thenReturn("db");
         when(connectionSession.getDatabaseName()).thenReturn("db");
         ProxyDatabaseConnectionManager databaseConnectionManager = 
mock(ProxyDatabaseConnectionManager.class);
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableUpdatableRALBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableUpdatableRALBackendHandlerTest.java
index 81a7b117aa7..4c82ef2e409 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableUpdatableRALBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableUpdatableRALBackendHandlerTest.java
@@ -23,7 +23,6 @@ import 
org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
 import 
org.apache.shardingsphere.infra.exception.kernel.syntax.UnsupportedVariableException;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.DistSQLUpdateBackendHandler;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.transaction.api.TransactionType;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -36,7 +35,7 @@ class SetDistVariableUpdatableRALBackendHandlerTest {
     
     @BeforeEach
     void setUp() {
-        connectionSession = new 
ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, new 
DefaultAttributeMap());
+        connectionSession = new 
ConnectionSession(mock(MySQLDatabaseType.class), new DefaultAttributeMap());
     }
     
     @Test
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
index bf1e56dc06d..a1fbc0a0eef 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSessionTest.java
@@ -26,7 +26,6 @@ import 
org.apache.shardingsphere.proxy.backend.connector.jdbc.transaction.Backen
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
-import org.apache.shardingsphere.transaction.api.TransactionType;
 import org.apache.shardingsphere.transaction.rule.TransactionRule;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -59,7 +58,7 @@ class ConnectionSessionTest {
     
     @BeforeEach
     void setup() {
-        connectionSession = new 
ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, null);
+        connectionSession = new 
ConnectionSession(mock(MySQLDatabaseType.class), null);
         
when(databaseConnectionManager.getConnectionSession()).thenReturn(connectionSession);
     }
     
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatusTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatusTest.java
index bfff4b7d011..10a4fa6e33c 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatusTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/session/transaction/TransactionStatusTest.java
@@ -18,24 +18,17 @@
 package org.apache.shardingsphere.proxy.backend.session.transaction;
 
 import org.apache.shardingsphere.transaction.api.TransactionType;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 class TransactionStatusTest {
     
-    private TransactionStatus transactionStatus;
-    
-    @BeforeEach
-    void setUp() {
-        transactionStatus = new TransactionStatus(TransactionType.XA);
-    }
-    
     @Test
-    void assertSetInTransaction() {
+    void assertIsInConnectionHeldTransaction() {
+        TransactionStatus transactionStatus = new TransactionStatus();
         transactionStatus.setInTransaction(true);
-        boolean actual = transactionStatus.isInConnectionHeldTransaction();
+        boolean actual = 
transactionStatus.isInConnectionHeldTransaction(TransactionType.XA);
         assertTrue(actual);
     }
 }
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
index a9e3f80b3e7..01568cc2362 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowProcessListExecutorTest.java
@@ -26,7 +26,6 @@ import 
org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
-import org.apache.shardingsphere.transaction.api.TransactionType;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.internal.configuration.plugins.Plugins;
@@ -52,7 +51,7 @@ class ShowProcessListExecutorTest {
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
         ShowProcessListExecutor showProcessListExecutor = new 
ShowProcessListExecutor(false);
         setupProcesses(showProcessListExecutor);
-        showProcessListExecutor.execute(new 
ConnectionSession(mock(MySQLDatabaseType.class), TransactionType.LOCAL, new 
DefaultAttributeMap()));
+        showProcessListExecutor.execute(new 
ConnectionSession(mock(MySQLDatabaseType.class), new DefaultAttributeMap()));
         
assertThat(showProcessListExecutor.getQueryResultMetaData().getColumnCount(), 
is(8));
         MergedResult mergedResult = showProcessListExecutor.getMergedResult();
         while (mergedResult.next()) {
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionIsolationValueProviderTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionIsolationValueProviderTest.java
index b5a3fe6e3a0..27b65fa25be 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionIsolationValueProviderTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionIsolationValueProviderTest.java
@@ -24,7 +24,6 @@ import 
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysv
 import 
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.Scope;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.sql.parser.sql.common.enums.TransactionIsolationLevel;
-import org.apache.shardingsphere.transaction.api.TransactionType;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -40,7 +39,7 @@ class TransactionIsolationValueProviderTest {
     
     @Test
     void assertGetSessionValue() {
-        ConnectionSession connectionSession = new 
ConnectionSession(TypedSPILoader.getService(DatabaseType.class, "MySQL"), 
TransactionType.LOCAL, new DefaultAttributeMap());
+        ConnectionSession connectionSession = new 
ConnectionSession(TypedSPILoader.getService(DatabaseType.class, "MySQL"), new 
DefaultAttributeMap());
         assertThat(new TransactionIsolationValueProvider().get(Scope.SESSION, 
connectionSession, MySQLSystemVariable.TRANSACTION_ISOLATION), 
is("REPEATABLE-READ"));
         assertThat(new TransactionIsolationValueProvider().get(Scope.SESSION, 
connectionSession, MySQLSystemVariable.TX_ISOLATION), is("REPEATABLE-READ"));
         
connectionSession.setIsolationLevel(TransactionIsolationLevel.READ_COMMITTED);
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionReadOnlyValueProviderTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionReadOnlyValueProviderTest.java
index 959971c5495..470b250542b 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionReadOnlyValueProviderTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/TransactionReadOnlyValueProviderTest.java
@@ -23,7 +23,6 @@ import 
org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.MySQLSystemVariable;
 import 
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.Scope;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.transaction.api.TransactionType;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -39,7 +38,7 @@ class TransactionReadOnlyValueProviderTest {
     
     @Test
     void assertGetSessionValue() {
-        ConnectionSession connectionSession = new 
ConnectionSession(TypedSPILoader.getService(DatabaseType.class, "MySQL"), 
TransactionType.LOCAL, new DefaultAttributeMap());
+        ConnectionSession connectionSession = new 
ConnectionSession(TypedSPILoader.getService(DatabaseType.class, "MySQL"), new 
DefaultAttributeMap());
         assertThat(new TransactionReadOnlyValueProvider().get(Scope.SESSION, 
connectionSession, MySQLSystemVariable.TX_READ_ONLY), is("0"));
         assertThat(new TransactionReadOnlyValueProvider().get(Scope.SESSION, 
connectionSession, MySQLSystemVariable.TRANSACTION_READ_ONLY), is("0"));
         connectionSession.setReadOnly(true);
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/VersionValueProviderTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/VersionValueProviderTest.java
index 6b695b44317..593cd5d8f0d 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/VersionValueProviderTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/sysvar/provider/VersionValueProviderTest.java
@@ -24,7 +24,6 @@ import 
org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.MySQLSystemVariable;
 import 
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.Scope;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.transaction.api.TransactionType;
 import org.junit.jupiter.api.Test;
 import org.mockito.MockedStatic;
 import org.mockito.Mockito;
@@ -39,7 +38,7 @@ class VersionValueProviderTest {
         DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "MySQL");
         try (MockedStatic<DatabaseProtocolServerInfo> mockedStatic = 
Mockito.mockStatic(DatabaseProtocolServerInfo.class)) {
             mockedStatic.when(() -> 
DatabaseProtocolServerInfo.getProtocolVersion(null, 
databaseType)).thenReturn("8.0");
-            ConnectionSession connectionSession = new 
ConnectionSession(databaseType, TransactionType.LOCAL, new 
DefaultAttributeMap());
+            ConnectionSession connectionSession = new 
ConnectionSession(databaseType, new DefaultAttributeMap());
             assertThat(new VersionValueProvider().get(Scope.GLOBAL, 
connectionSession, MySQLSystemVariable.VERSION), is("8.0"));
         }
     }
diff --git 
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
 
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
index ed57d6e3c5a..50e2dac80d1 100644
--- 
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
+++ 
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
@@ -25,7 +25,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.db.protocol.constant.CommonConstants;
 import org.apache.shardingsphere.infra.executor.sql.process.ProcessEngine;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.authentication.result.AuthenticationResult;
 import org.apache.shardingsphere.proxy.frontend.exception.ExpectedExceptions;
@@ -33,7 +32,6 @@ import 
org.apache.shardingsphere.proxy.frontend.executor.ConnectionThreadExecuto
 import org.apache.shardingsphere.proxy.frontend.executor.UserExecutorGroup;
 import 
org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngine;
 import org.apache.shardingsphere.proxy.frontend.state.ProxyStateContext;
-import org.apache.shardingsphere.transaction.rule.TransactionRule;
 
 import java.util.Optional;
 
@@ -53,8 +51,7 @@ public final class FrontendChannelInboundHandler extends 
ChannelInboundHandlerAd
     
     public FrontendChannelInboundHandler(final DatabaseProtocolFrontendEngine 
databaseProtocolFrontendEngine, final Channel channel) {
         this.databaseProtocolFrontendEngine = databaseProtocolFrontendEngine;
-        connectionSession = new 
ConnectionSession(databaseProtocolFrontendEngine.getType(),
-                
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(TransactionRule.class).getDefaultType(),
 channel);
+        connectionSession = new 
ConnectionSession(databaseProtocolFrontendEngine.getType(), channel);
     }
     
     @Override
diff --git 
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyState.java
 
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyState.java
index e3d71f5d1ad..f42af6a8aa5 100644
--- 
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyState.java
+++ 
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyState.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.frontend.state.impl;
 
 import io.netty.channel.ChannelHandlerContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
+import org.apache.shardingsphere.proxy.backend.util.TransactionUtils;
 import org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask;
 import 
org.apache.shardingsphere.proxy.frontend.executor.ConnectionThreadExecutorGroup;
 import org.apache.shardingsphere.proxy.frontend.executor.UserExecutorGroup;
@@ -46,6 +47,6 @@ public final class OKProxyState implements ProxyState {
     }
     
     private boolean requireOccupyThreadForConnection(final ConnectionSession 
connectionSession) {
-        return 
TransactionType.isDistributedTransaction(connectionSession.getTransactionStatus().getTransactionType());
+        return 
TransactionType.isDistributedTransaction(TransactionUtils.getTransactionType(connectionSession.getConnectionContext().getTransactionContext()));
     }
 }
diff --git 
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
 
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
index b4f4d47f877..a55846ca340 100644
--- 
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
+++ 
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
@@ -20,7 +20,17 @@ package org.apache.shardingsphere.proxy.frontend.state.impl;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.embedded.EmbeddedChannel;
 import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+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.RuleMetaData;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.frontend.command.CommandExecutorTask;
@@ -29,12 +39,14 @@ import 
org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngi
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
 import org.apache.shardingsphere.transaction.api.TransactionType;
+import org.apache.shardingsphere.transaction.rule.TransactionRule;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.internal.configuration.plugins.Plugins;
 
+import java.util.Collections;
 import java.util.Map;
 import java.util.concurrent.ExecutorService;
 
@@ -63,10 +75,9 @@ class OKProxyStateTest {
     
     @Test
     void assertExecuteWithDistributedTransaction() {
-        ContextManager contextManager = mock(ContextManager.class, 
RETURNS_DEEP_STUBS);
+        ContextManager contextManager = mockContextManager();
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
         ConnectionSession connectionSession = mock(ConnectionSession.class, 
RETURNS_DEEP_STUBS);
-        
when(connectionSession.getTransactionStatus().getTransactionType()).thenReturn(TransactionType.XA);
         when(connectionSession.getConnectionId()).thenReturn(1);
         ExecutorService executorService = registerMockExecutorService(1);
         new OKProxyState().execute(context, null, 
mock(DatabaseProtocolFrontendEngine.class), connectionSession);
@@ -74,6 +85,17 @@ class OKProxyStateTest {
         
ConnectionThreadExecutorGroup.getInstance().unregisterAndAwaitTermination(1);
     }
     
+    private ContextManager mockContextManager() {
+        ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class, 
RETURNS_DEEP_STUBS);
+        
when(metaData.getDatabase(DefaultDatabase.LOGIC_NAME)).thenReturn(mock(ShardingSphereDatabase.class,
 RETURNS_DEEP_STUBS));
+        
when(metaData.getDatabases().values().iterator().next().getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
+        
when(metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
+        TransactionRule transactionRule = mock(TransactionRule.class);
+        when(transactionRule.getDefaultType()).thenReturn(TransactionType.XA);
+        when(metaData.getGlobalRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singletonList(transactionRule)));
+        return new ContextManager(new 
MetaDataContexts(mock(MetaDataPersistService.class), metaData), 
mock(InstanceContext.class));
+    }
+    
     @SuppressWarnings({"unchecked", "SameParameterValue"})
     @SneakyThrows(ReflectiveOperationException.class)
     private ExecutorService registerMockExecutorService(final int 
connectionId) {
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/MySQLComResetConnectionExecutorTest.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/MySQLComResetConnectionExecutorTest.java
index cb431b18cfd..200850c3f76 100644
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/MySQLComResetConnectionExecutorTest.java
+++ 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/admin/MySQLComResetConnectionExecutorTest.java
@@ -28,7 +28,6 @@ import 
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionSt
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.MySQLServerPreparedStatement;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.ConstructionMockSettings;
-import org.apache.shardingsphere.transaction.api.TransactionType;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
@@ -53,7 +52,7 @@ class MySQLComResetConnectionExecutorTest {
         ConnectionSession connectionSession = mock(ConnectionSession.class);
         ProxyDatabaseConnectionManager databaseConnectionManager = 
mock(ProxyDatabaseConnectionManager.class);
         
when(connectionSession.getDatabaseConnectionManager()).thenReturn(databaseConnectionManager);
-        when(connectionSession.getTransactionStatus()).thenReturn(new 
TransactionStatus(TransactionType.LOCAL));
+        when(connectionSession.getTransactionStatus()).thenReturn(new 
TransactionStatus());
         
when(connectionSession.getServerPreparedStatementRegistry()).thenReturn(new 
ServerPreparedStatementRegistry());
         int statementId = 1;
         
connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(statementId,
 new MySQLServerPreparedStatement("", null, new HintValueContext(), 
Collections.emptyList()));
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/reset/MySQLComStmtResetExecutorTest.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/reset/MySQLComStmtResetExecutorTest.java
index c38a989baf3..053abb2718d 100644
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/reset/MySQLComStmtResetExecutorTest.java
+++ 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/reset/MySQLComStmtResetExecutorTest.java
@@ -26,7 +26,6 @@ import 
org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.proxy.backend.session.ServerPreparedStatementRegistry;
 import 
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.MySQLServerPreparedStatement;
-import org.apache.shardingsphere.transaction.api.TransactionType;
 import org.junit.jupiter.api.Test;
 
 import java.util.Collection;
@@ -45,7 +44,7 @@ class MySQLComStmtResetExecutorTest {
     void assertExecute() {
         ConnectionSession connectionSession = mock(ConnectionSession.class);
         
when(connectionSession.getServerPreparedStatementRegistry()).thenReturn(new 
ServerPreparedStatementRegistry());
-        when(connectionSession.getTransactionStatus()).thenReturn(new 
TransactionStatus(TransactionType.LOCAL));
+        when(connectionSession.getTransactionStatus()).thenReturn(new 
TransactionStatus());
         MySQLServerPreparedStatement preparedStatement = new 
MySQLServerPreparedStatement("", mock(SQLStatementContext.class), new 
HintValueContext(), Collections.emptyList());
         preparedStatement.getLongData().put(0, new byte[0]);
         
connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(1, 
preparedStatement);
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
index 1d4deb29e77..34cbc11b8cf 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
@@ -36,7 +36,6 @@ import 
org.apache.shardingsphere.proxy.frontend.command.executor.ResponseType;
 import 
org.apache.shardingsphere.proxy.frontend.postgresql.command.query.simple.PostgreSQLComQueryExecutor;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.mock.StaticMockSettings;
-import org.apache.shardingsphere.transaction.api.TransactionType;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -73,7 +72,7 @@ class PostgreSQLCommandExecuteEngineTest {
     @BeforeEach
     void setUp() {
         when(channelHandlerContext.channel()).thenReturn(channel);
-        when(connectionSession.getTransactionStatus()).thenReturn(new 
TransactionStatus(TransactionType.LOCAL));
+        when(connectionSession.getTransactionStatus()).thenReturn(new 
TransactionStatus());
     }
     
     @Test
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/sync/PostgreSQLComSyncExecutorTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/sync/PostgreSQLComSyncExecutorTest.java
index c61f70db9c4..24b05bd83e4 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/sync/PostgreSQLComSyncExecutorTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/sync/PostgreSQLComSyncExecutorTest.java
@@ -20,7 +20,6 @@ package 
org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extend
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQLReadyForQueryPacket;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
-import org.apache.shardingsphere.transaction.api.TransactionType;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
@@ -39,7 +38,7 @@ class PostgreSQLComSyncExecutorTest {
     
     @Test
     void assertNewInstance() {
-        when(connectionSession.getTransactionStatus()).thenReturn(new 
TransactionStatus(TransactionType.LOCAL));
+        when(connectionSession.getTransactionStatus()).thenReturn(new 
TransactionStatus());
         PostgreSQLComSyncExecutor actual = new 
PostgreSQLComSyncExecutor(connectionSession);
         assertThat(actual.execute().iterator().next(), 
is(instanceOf(PostgreSQLReadyForQueryPacket.class)));
     }

Reply via email to