Commit 4e12562a authored by terrymanu's avatar terrymanu
Browse files

simplify JDBCResourceManager

parent fa2e5f0a
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import io.shardingsphere.core.merger.MergedResult;
import io.shardingsphere.core.merger.QueryResult;
import io.shardingsphere.core.parsing.SQLJudgeEngine;
import io.shardingsphere.core.parsing.parser.sql.SQLStatement;
import io.shardingsphere.core.parsing.parser.sql.dml.insert.InsertStatement;
import io.shardingsphere.core.routing.SQLExecutionUnit;
import io.shardingsphere.core.routing.SQLRouteResult;
import io.shardingsphere.core.routing.SQLUnit;
@@ -121,7 +122,7 @@ public abstract class JDBCBackendHandler implements BackendHandler {
        }
        List<Future<CommandResponsePackets>> futureList = new ArrayList<>(1024);
        for (SQLExecutionUnit each : routeResult.getExecutionUnits()) {
            Statement statement = prepareResource(ConnectionManager.getConnection(each.getDataSource()), each.getSqlUnit().getSql(), routeResult.getSqlStatement());
            Statement statement = createStatement(ConnectionManager.getConnection(each.getDataSource()), each.getSqlUnit().getSql(), routeResult.getSqlStatement() instanceof InsertStatement);
            futureList.add(userGroup.submit(newSubmitTask(statement, routeResult.getSqlStatement(), each.getSqlUnit().getSql())));
        }
        List<CommandResponsePackets> packets = buildCommandResponsePackets(futureList);
@@ -137,7 +138,7 @@ public abstract class JDBCBackendHandler implements BackendHandler {
        return TransactionType.XA == ruleRegistry.getTransactionType() && SQLType.DDL == sqlType && Status.STATUS_NO_TRANSACTION != AtomikosUserTransaction.getInstance().getStatus();
    }
    
    protected abstract Statement prepareResource(Connection connection, String actualSQL, SQLStatement sqlStatement) throws SQLException;
    protected abstract Statement createStatement(Connection connection, String actualSQL, boolean isReturnGeneratedKeys) throws SQLException;
    
    protected abstract Callable<CommandResponsePackets> newSubmitTask(Statement statement, SQLStatement sqlStatement, String unitSQL);
    
+2 −32
Original line number Diff line number Diff line
@@ -20,11 +20,8 @@ package io.shardingsphere.proxy.backend.common.jdbc;
import io.shardingsphere.core.routing.router.masterslave.MasterVisitedManager;
import lombok.Getter;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

@@ -36,30 +33,8 @@ import java.util.concurrent.CopyOnWriteArrayList;
@Getter
public final class JDBCResourceManager {
    
    private final List<Connection> connections = new ArrayList<>();
    
    private final List<Statement> statements = new ArrayList<>();
    
    private final List<ResultSet> resultSets = new CopyOnWriteArrayList<>();
    
    /**
     * Add new connection to resource manager.
     *
     * @param connection Connection
     */
    public void addConnection(final Connection connection) {
        connections.add(connection);
    }
    
    /**
     * Add statement to resource manager.
     *
     * @param statement statement
     */
    public void addStatement(final Statement statement) {
        statements.add(statement);
    }
    
    /**
     * Add new resultSet to resource manager.
     *
@@ -75,14 +50,9 @@ public final class JDBCResourceManager {
     * @throws SQLException SQLException
     */
    public void clear() throws SQLException {
        for (Connection each : connections) {
            if (!each.isClosed()) {
                each.close();
            }
        }
        for (ResultSet each : resultSets) {
            if (!each.isClosed()) {
                each.close();
            if (!each.getStatement().getConnection().isClosed()) {
                each.getStatement().getConnection().close();
            }
            MasterVisitedManager.clear();
        }
+2 −5
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ package io.shardingsphere.proxy.backend.common.jdbc.statement;
import io.shardingsphere.core.constant.DatabaseType;
import io.shardingsphere.core.merger.QueryResult;
import io.shardingsphere.core.parsing.parser.sql.SQLStatement;
import io.shardingsphere.core.parsing.parser.sql.dml.insert.InsertStatement;
import io.shardingsphere.core.routing.PreparedStatementRoutingEngine;
import io.shardingsphere.core.routing.SQLRouteResult;
import io.shardingsphere.proxy.backend.common.ProxyMode;
@@ -90,13 +89,11 @@ public final class JDBCStatementBackendHandler extends JDBCBackendHandler {
    }
    
    @Override
    protected PreparedStatement prepareResource(final Connection connection, final String actualSQL, final SQLStatement sqlStatement) throws SQLException {
        PreparedStatement result = sqlStatement instanceof InsertStatement ? connection.prepareStatement(actualSQL, Statement.RETURN_GENERATED_KEYS) : connection.prepareStatement(actualSQL);
    protected PreparedStatement createStatement(final Connection connection, final String actualSQL, final boolean isReturnGeneratedKeys) throws SQLException {
        PreparedStatement result = isReturnGeneratedKeys ? connection.prepareStatement(actualSQL, Statement.RETURN_GENERATED_KEYS) : connection.prepareStatement(actualSQL);
        for (int i = 0; i < preparedStatementParameters.size(); i++) {
            result.setObject(i + 1, preparedStatementParameters.get(i).getValue());
        }
        getJdbcResourceManager().addConnection(connection);
        getJdbcResourceManager().addStatement(result);
        return result;
    }
    
+2 −5
Original line number Diff line number Diff line
@@ -63,11 +63,8 @@ public final class JDBCTextBackendHandler extends JDBCBackendHandler {
    }
    
    @Override
    protected Statement prepareResource(final Connection connection, final String actualSQL, final SQLStatement sqlStatement) throws SQLException {
        Statement result = connection.createStatement();
        getJdbcResourceManager().addConnection(connection);
        getJdbcResourceManager().addStatement(result);
        return result;
    protected Statement createStatement(final Connection connection, final String actualSQL, final boolean isReturnGeneratedKeys) throws SQLException {
        return connection.createStatement();
    }
    
    @Override