Commit fa2e5f0a authored by terrymanu's avatar terrymanu
Browse files

refactor BaseJDBCResource => JDBCResourceManager

parent a0c83f24
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import io.shardingsphere.core.routing.SQLUnit;
import io.shardingsphere.core.routing.router.masterslave.MasterSlaveRouter;
import io.shardingsphere.proxy.backend.common.BackendHandler;
import io.shardingsphere.proxy.backend.common.ResultList;
import io.shardingsphere.proxy.backend.resource.BaseJDBCResource;
import io.shardingsphere.proxy.config.RuleRegistry;
import io.shardingsphere.proxy.metadata.ProxyShardingRefreshHandler;
import io.shardingsphere.proxy.transport.common.packet.DatabaseProtocolPacket;
@@ -72,7 +71,7 @@ public abstract class JDBCBackendHandler implements BackendHandler {
    
    private final String sql;
    
    private final BaseJDBCResource jdbcResource;
    private final JDBCResourceManager jdbcResourceManager;
    
    private MergedResult mergedResult;
    
@@ -91,9 +90,9 @@ public abstract class JDBCBackendHandler implements BackendHandler {
    
    private final EventLoopGroup userGroup;
    
    public JDBCBackendHandler(final String sql, final BaseJDBCResource jdbcResource) {
    public JDBCBackendHandler(final String sql) {
        this.sql = sql;
        this.jdbcResource = jdbcResource;
        jdbcResourceManager = new JDBCResourceManager();
        isMerged = false;
        hasMoreResultValueFlag = true;
        resultLists = new CopyOnWriteArrayList<>();
@@ -231,7 +230,7 @@ public abstract class JDBCBackendHandler implements BackendHandler {
    @Override
    public final boolean hasMoreResultValue() throws SQLException {
        if (!isMerged || !hasMoreResultValueFlag) {
            jdbcResource.clear();
            jdbcResourceManager.clear();
            return false;
        }
        if (!mergedResult.next()) {
+25 −22
Original line number Diff line number Diff line
@@ -15,34 +15,32 @@
 * </p>
 */

package io.shardingsphere.proxy.backend.resource;
package io.shardingsphere.proxy.backend.common.jdbc;

import io.shardingsphere.core.routing.router.masterslave.MasterVisitedManager;
import lombok.Getter;
import lombok.Setter;

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;

/**
 * Abstract proxy-jdbc-resource.
 * JDBC resource manager.
 *
 * @author zhaojun
 */
@Getter
@Setter
public abstract class BaseJDBCResource {
public final class JDBCResourceManager {
    
    private List<Connection> connections;
    private final List<Connection> connections = new ArrayList<>();
    
    private List<ResultSet> resultSets;
    private final List<Statement> statements = new ArrayList<>();
    
    public BaseJDBCResource(final List<Connection> connections, final List<ResultSet> resultSets) {
        this.connections = connections;
        this.resultSets = resultSets;
    }
    private final List<ResultSet> resultSets = new CopyOnWriteArrayList<>();
    
    /**
     * Add new connection to resource manager.
@@ -53,6 +51,15 @@ public abstract class BaseJDBCResource {
        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.
     *
@@ -68,14 +75,11 @@ public abstract class BaseJDBCResource {
     * @throws SQLException SQLException
     */
    public void clear() throws SQLException {
        if (null != connections) {
        for (Connection each : connections) {
            if (!each.isClosed()) {
                each.close();
            }
        }
        }
        if (null != resultSets) {
        for (ResultSet each : resultSets) {
            if (!each.isClosed()) {
                each.close();
@@ -84,4 +88,3 @@ public abstract class BaseJDBCResource {
        }
    }
}
}
+4 −7
Original line number Diff line number Diff line
@@ -26,8 +26,6 @@ import io.shardingsphere.core.routing.SQLRouteResult;
import io.shardingsphere.proxy.backend.common.ProxyMode;
import io.shardingsphere.proxy.backend.common.jdbc.JDBCBackendHandler;
import io.shardingsphere.proxy.backend.mysql.MySQLPacketStatementExecuteQueryResult;
import io.shardingsphere.proxy.backend.resource.ProxyJDBCResourceFactory;
import io.shardingsphere.proxy.backend.resource.ProxyPrepareJDBCResource;
import io.shardingsphere.proxy.config.RuleRegistry;
import io.shardingsphere.proxy.transport.common.packet.DatabaseProtocolPacket;
import io.shardingsphere.proxy.transport.mysql.constant.ColumnType;
@@ -64,7 +62,7 @@ public final class JDBCStatementBackendHandler extends JDBCBackendHandler {
    private final RuleRegistry ruleRegistry;
    
    public JDBCStatementBackendHandler(final List<PreparedStatementParameter> preparedStatementParameters, final int statementId, final DatabaseType databaseType) {
        super(PreparedStatementRegistry.getInstance().getSQL(statementId), ProxyJDBCResourceFactory.newPrepareResource());
        super(PreparedStatementRegistry.getInstance().getSQL(statementId));
        this.preparedStatementParameters = preparedStatementParameters;
        this.databaseType = databaseType;
        columnTypes = new CopyOnWriteArrayList<>();
@@ -97,9 +95,8 @@ public final class JDBCStatementBackendHandler extends JDBCBackendHandler {
        for (int i = 0; i < preparedStatementParameters.size(); i++) {
            result.setObject(i + 1, preparedStatementParameters.get(i).getValue());
        }
        ProxyPrepareJDBCResource prepareProxyJDBCResource = (ProxyPrepareJDBCResource) getJdbcResource();
        prepareProxyJDBCResource.addConnection(connection);
        prepareProxyJDBCResource.addPrepareStatement(result);
        getJdbcResourceManager().addConnection(connection);
        getJdbcResourceManager().addStatement(result);
        return result;
    }
    
@@ -107,7 +104,7 @@ public final class JDBCStatementBackendHandler extends JDBCBackendHandler {
    protected QueryResult newQueryResult(final CommandResponsePackets packet, final int index) {
        MySQLPacketStatementExecuteQueryResult result = new MySQLPacketStatementExecuteQueryResult(packet, columnTypes);
        if (ProxyMode.MEMORY_STRICTLY == ruleRegistry.getProxyMode()) {
            result.setResultSet(getJdbcResource().getResultSets().get(index));
            result.setResultSet(getJdbcResourceManager().getResultSets().get(index));
        } else {
            result.setResultList(getResultLists().get(index));
        }
+1 −1
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ public final class JDBCStatementExecuteWorker extends JDBCExecuteWorker implemen
    protected CommandResponsePackets executeQueryWithStreamResultSet() throws SQLException {
        preparedStatement.setFetchSize(FETCH_ONE_ROW_A_TIME);
        ResultSet resultSet = preparedStatement.executeQuery();
        getExecuteBackendHandler().getJdbcResource().addResultSet(resultSet);
        getExecuteBackendHandler().getJdbcResourceManager().addResultSet(resultSet);
        return getQueryDatabaseProtocolPackets(resultSet);
    }
    
+4 −7
Original line number Diff line number Diff line
@@ -25,8 +25,6 @@ import io.shardingsphere.core.routing.StatementRoutingEngine;
import io.shardingsphere.proxy.backend.common.ProxyMode;
import io.shardingsphere.proxy.backend.common.jdbc.JDBCBackendHandler;
import io.shardingsphere.proxy.backend.mysql.MySQLPacketQueryResult;
import io.shardingsphere.proxy.backend.resource.ProxyJDBCResource;
import io.shardingsphere.proxy.backend.resource.ProxyJDBCResourceFactory;
import io.shardingsphere.proxy.config.RuleRegistry;
import io.shardingsphere.proxy.transport.common.packet.DatabaseProtocolPacket;
import io.shardingsphere.proxy.transport.mysql.packet.command.CommandResponsePackets;
@@ -52,7 +50,7 @@ public final class JDBCTextBackendHandler extends JDBCBackendHandler {
    private final RuleRegistry ruleRegistry;
    
    public JDBCTextBackendHandler(final String sql, final DatabaseType databaseType) {
        super(sql, ProxyJDBCResourceFactory.newResource());
        super(sql);
        this.databaseType = databaseType;
        ruleRegistry = RuleRegistry.getInstance();
    }
@@ -67,9 +65,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();
        ProxyJDBCResource proxyJDBCResource = (ProxyJDBCResource) getJdbcResource();
        proxyJDBCResource.addConnection(connection);
        proxyJDBCResource.addStatement(result);
        getJdbcResourceManager().addConnection(connection);
        getJdbcResourceManager().addStatement(result);
        return result;
    }
    
@@ -82,7 +79,7 @@ public final class JDBCTextBackendHandler extends JDBCBackendHandler {
    protected QueryResult newQueryResult(final CommandResponsePackets packet, final int index) {
        MySQLPacketQueryResult result = new MySQLPacketQueryResult(packet);
        if (ProxyMode.MEMORY_STRICTLY == ruleRegistry.getProxyMode()) {
            result.setResultSet(getJdbcResource().getResultSets().get(index));
            result.setResultSet(getJdbcResourceManager().getResultSets().get(index));
        } else {
            result.setResultList(getResultLists().get(index));
        }
Loading