Commit 46da5d2f authored by terrymanu's avatar terrymanu
Browse files

refactor ShardingTransactionManagerFactory

parent b3ff9568
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -24,10 +24,10 @@ import io.shardingsphere.core.hint.HintManagerHolder;
import io.shardingsphere.core.jdbc.unsupported.AbstractUnsupportedOperationConnection;
import io.shardingsphere.core.routing.router.masterslave.MasterVisitedManager;
import io.shardingsphere.core.util.EventBusInstance;
import io.shardingsphere.transaction.api.ShardingTransactionManagerFactory;
import io.shardingsphere.transaction.api.local.LocalTransactionManager;
import io.shardingsphere.transaction.common.TransactionContext;
import io.shardingsphere.transaction.common.TransactionContextHolder;
import io.shardingsphere.transaction.api.ShardingTransactionManagerFactory;
import io.shardingsphere.transaction.common.event.LocalTransactionEvent;
import io.shardingsphere.transaction.common.event.TransactionEvent;
import io.shardingsphere.transaction.common.event.TransactionEventFactory;
@@ -67,7 +67,8 @@ public abstract class AbstractConnectionAdapter extends AbstractUnsupportedOpera
     * @throws SQLException SQL exception
     */
    public final Connection getConnection(final String dataSourceName) throws SQLException {
        ShardingTransactionManagerFactory.getTransactionManager(TransactionContextHolder.get().getTransactionType());
        TransactionType transactionType = TransactionContextHolder.get().getTransactionType();
        TransactionContextHolder.set(new TransactionContext(ShardingTransactionManagerFactory.getShardingTransactionManager(transactionType), transactionType));
        if (cachedConnections.containsKey(dataSourceName)) {
            return cachedConnections.get(dataSourceName);
        }
+5 −2
Original line number Diff line number Diff line
@@ -19,10 +19,12 @@ package io.shardingsphere.core.jdbc.adapter;

import com.google.common.base.Preconditions;
import io.shardingsphere.core.constant.DatabaseType;
import io.shardingsphere.core.constant.TransactionType;
import io.shardingsphere.core.jdbc.unsupported.AbstractUnsupportedOperationDataSource;
import io.shardingsphere.core.listener.JDBCListenerRegister;
import io.shardingsphere.transaction.common.TransactionContextHolder;
import io.shardingsphere.transaction.api.ShardingTransactionManagerFactory;
import io.shardingsphere.transaction.common.TransactionContext;
import io.shardingsphere.transaction.common.TransactionContextHolder;
import lombok.Getter;

import javax.sql.DataSource;
@@ -40,7 +42,8 @@ import java.util.logging.Logger;
public abstract class AbstractDataSourceAdapter extends AbstractUnsupportedOperationDataSource {
    
    static {
        ShardingTransactionManagerFactory.getTransactionManager(TransactionContextHolder.get().getTransactionType());
        TransactionType transactionType = TransactionContextHolder.get().getTransactionType();
        TransactionContextHolder.set(new TransactionContext(ShardingTransactionManagerFactory.getShardingTransactionManager(transactionType), transactionType));
        JDBCListenerRegister.register();
    }
    
+4 −1
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ import io.shardingsphere.jdbc.orchestration.internal.eventbus.ProxyEventBusEvent
import io.shardingsphere.proxy.backend.jdbc.datasource.JDBCBackendDataSource;
import io.shardingsphere.transaction.api.ShardingTransactionManager;
import io.shardingsphere.transaction.api.ShardingTransactionManagerFactory;
import io.shardingsphere.transaction.common.TransactionContext;
import io.shardingsphere.transaction.common.TransactionContextHolder;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -106,7 +108,8 @@ public final class RuleRegistry {
        showSQL = shardingProperties.getValue(ShardingPropertiesConstant.SQL_SHOW);
        connectionMode = ConnectionMode.valueOf(shardingProperties.<String>getValue(ShardingPropertiesConstant.CONNECTION_MODE));
        transactionType = TransactionType.valueOf(shardingProperties.<String>getValue(ShardingPropertiesConstant.PROXY_TRANSACTION_MODE));
        transactionManager = ShardingTransactionManagerFactory.getTransactionManager(transactionType);
        transactionManager = ShardingTransactionManagerFactory.getShardingTransactionManager(transactionType);
        TransactionContextHolder.set(new TransactionContext(transactionManager, transactionType));
        acceptorSize = shardingProperties.getValue(ShardingPropertiesConstant.ACCEPTOR_SIZE);
        executorSize = shardingProperties.getValue(ShardingPropertiesConstant.EXECUTOR_SIZE);
        // TODO :jiaqi force off use NIO for backend, this feature is not complete yet
+3 −10
Original line number Diff line number Diff line
@@ -20,8 +20,6 @@ package io.shardingsphere.transaction.api;
import io.shardingsphere.core.constant.TransactionType;
import io.shardingsphere.transaction.api.local.LocalTransactionManager;
import io.shardingsphere.transaction.api.xa.XATransactionManagerSPILoader;
import io.shardingsphere.transaction.common.TransactionContext;
import io.shardingsphere.transaction.common.TransactionContextHolder;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@@ -39,20 +37,15 @@ public final class ShardingTransactionManagerFactory {
     * @param transactionType transaction type
     * @return sharding transaction manager
     */
    public static ShardingTransactionManager getTransactionManager(final TransactionType transactionType) {
        ShardingTransactionManager result;
    public static ShardingTransactionManager getShardingTransactionManager(final TransactionType transactionType) {
        switch (transactionType) {
            case LOCAL:
                result = new LocalTransactionManager();
                break;
                return new LocalTransactionManager();
            case XA:
                result = XATransactionManagerSPILoader.getInstance().getTransactionManager();
                break;
                return XATransactionManagerSPILoader.getInstance().getTransactionManager();
            case BASE:
            default: 
                return null;
        }
        TransactionContextHolder.set(new TransactionContext(result, transactionType));
        return result;
    }
}