Search in sources :

Example 1 with UnableToConnectException

use of com.mysql.cj.exceptions.UnableToConnectException in project ABC by RuiPinto96274.

the class ConnectionImpl method connectOneTryOnly.

private void connectOneTryOnly(boolean isForReconnect) throws SQLException {
    Exception connectionNotEstablishedBecause = null;
    try {
        JdbcConnection c = getProxy();
        this.session.connect(this.origHostInfo, this.user, this.password, this.database, getLoginTimeout(), c);
        // save state from old connection
        boolean oldAutoCommit = getAutoCommit();
        int oldIsolationLevel = this.isolationLevel;
        boolean oldReadOnly = isReadOnly(false);
        String oldDb = getDatabase();
        this.session.setQueryInterceptors(this.queryInterceptors);
        // Server properties might be different from previous connection, so initialize again...
        initializePropsFromServer();
        if (isForReconnect) {
            // Restore state from old connection
            setAutoCommit(oldAutoCommit);
            setTransactionIsolation(oldIsolationLevel);
            setDatabase(oldDb);
            setReadOnly(oldReadOnly);
        }
        return;
    } catch (UnableToConnectException rejEx) {
        close();
        this.session.getProtocol().getSocketConnection().forceClose();
        throw rejEx;
    } catch (Exception EEE) {
        if ((EEE instanceof PasswordExpiredException || EEE instanceof SQLException && ((SQLException) EEE).getErrorCode() == MysqlErrorNumbers.ER_MUST_CHANGE_PASSWORD) && !this.disconnectOnExpiredPasswords.getValue()) {
            return;
        }
        if (this.session != null) {
            this.session.forceClose();
        }
        connectionNotEstablishedBecause = EEE;
        if (EEE instanceof SQLException) {
            throw (SQLException) EEE;
        }
        if (EEE.getCause() != null && EEE.getCause() instanceof SQLException) {
            throw (SQLException) EEE.getCause();
        }
        if (EEE instanceof CJException) {
            throw (CJException) EEE;
        }
        SQLException chainedEx = SQLError.createSQLException(Messages.getString("Connection.UnableToConnect"), MysqlErrorNumbers.SQL_STATE_UNABLE_TO_CONNECT_TO_DATASOURCE, getExceptionInterceptor());
        chainedEx.initCause(connectionNotEstablishedBecause);
        throw chainedEx;
    }
}
Also used : PasswordExpiredException(com.mysql.cj.exceptions.PasswordExpiredException) SQLException(java.sql.SQLException) CJException(com.mysql.cj.exceptions.CJException) UnableToConnectException(com.mysql.cj.exceptions.UnableToConnectException) SQLClientInfoException(java.sql.SQLClientInfoException) SQLException(java.sql.SQLException) PasswordExpiredException(com.mysql.cj.exceptions.PasswordExpiredException) Savepoint(java.sql.Savepoint) UnableToConnectException(com.mysql.cj.exceptions.UnableToConnectException) CJException(com.mysql.cj.exceptions.CJException)

Example 2 with UnableToConnectException

use of com.mysql.cj.exceptions.UnableToConnectException in project JavaSegundasQuintas by ecteruel.

the class ConnectionImpl method connectWithRetries.

private void connectWithRetries(boolean isForReconnect) throws SQLException {
    double timeout = this.propertySet.getIntegerProperty(PropertyKey.initialTimeout).getValue();
    boolean connectionGood = false;
    Exception connectionException = null;
    for (int attemptCount = 0; (attemptCount < this.propertySet.getIntegerProperty(PropertyKey.maxReconnects).getValue()) && !connectionGood; attemptCount++) {
        try {
            this.session.forceClose();
            JdbcConnection c = getProxy();
            this.session.connect(this.origHostInfo, this.user, this.password, this.database, getLoginTimeout(), c);
            pingInternal(false, 0);
            boolean oldAutoCommit;
            int oldIsolationLevel;
            boolean oldReadOnly;
            String oldDb;
            synchronized (getConnectionMutex()) {
                // save state from old connection
                oldAutoCommit = getAutoCommit();
                oldIsolationLevel = this.isolationLevel;
                oldReadOnly = isReadOnly(false);
                oldDb = getDatabase();
                this.session.setQueryInterceptors(this.queryInterceptors);
            }
            // Server properties might be different from previous connection, so initialize again...
            initializePropsFromServer();
            if (isForReconnect) {
                // Restore state from old connection
                setAutoCommit(oldAutoCommit);
                setTransactionIsolation(oldIsolationLevel);
                setDatabase(oldDb);
                setReadOnly(oldReadOnly);
            }
            connectionGood = true;
            break;
        } catch (UnableToConnectException rejEx) {
            close();
            this.session.getProtocol().getSocketConnection().forceClose();
        } catch (Exception EEE) {
            connectionException = EEE;
            connectionGood = false;
        }
        if (connectionGood) {
            break;
        }
        if (attemptCount > 0) {
            try {
                Thread.sleep((long) timeout * 1000);
            } catch (InterruptedException IE) {
            // ignore
            }
        }
    }
    if (!connectionGood) {
        // We've really failed!
        SQLException chainedEx = SQLError.createSQLException(Messages.getString("Connection.UnableToConnectWithRetries", new Object[] { this.propertySet.getIntegerProperty(PropertyKey.maxReconnects).getValue() }), MysqlErrorNumbers.SQL_STATE_UNABLE_TO_CONNECT_TO_DATASOURCE, connectionException, getExceptionInterceptor());
        throw chainedEx;
    }
    if (this.propertySet.getBooleanProperty(PropertyKey.paranoid).getValue() && !this.autoReconnect.getValue()) {
        this.password = null;
        this.user = null;
    }
    if (isForReconnect) {
        // 
        // Retrieve any 'lost' prepared statements if re-connecting
        // 
        Iterator<JdbcStatement> statementIter = this.openStatements.iterator();
        // 
        // We build a list of these outside the map of open statements, because in the process of re-preparing, we might end up having to close a prepared
        // statement, thus removing it from the map, and generating a ConcurrentModificationException
        // 
        Stack<JdbcStatement> serverPreparedStatements = null;
        while (statementIter.hasNext()) {
            JdbcStatement statementObj = statementIter.next();
            if (statementObj instanceof ServerPreparedStatement) {
                if (serverPreparedStatements == null) {
                    serverPreparedStatements = new Stack<>();
                }
                serverPreparedStatements.add(statementObj);
            }
        }
        if (serverPreparedStatements != null) {
            while (!serverPreparedStatements.isEmpty()) {
                ((ServerPreparedStatement) serverPreparedStatements.pop()).rePrepare();
            }
        }
    }
}
Also used : SQLException(java.sql.SQLException) CJException(com.mysql.cj.exceptions.CJException) UnableToConnectException(com.mysql.cj.exceptions.UnableToConnectException) SQLClientInfoException(java.sql.SQLClientInfoException) SQLException(java.sql.SQLException) PasswordExpiredException(com.mysql.cj.exceptions.PasswordExpiredException) Savepoint(java.sql.Savepoint) UnableToConnectException(com.mysql.cj.exceptions.UnableToConnectException)

Example 3 with UnableToConnectException

use of com.mysql.cj.exceptions.UnableToConnectException in project aws-mysql-jdbc by awslabs.

the class ConnectionImpl method connectOneTryOnly.

private void connectOneTryOnly(boolean isForReconnect) throws SQLException {
    Exception connectionNotEstablishedBecause = null;
    try {
        JdbcConnection c = getProxy();
        this.session.connect(this.origHostInfo, this.user, this.password, this.database, getLoginTimeout(), c);
        // save state from old connection
        boolean oldAutoCommit = getAutoCommit();
        int oldIsolationLevel = this.isolationLevel;
        boolean oldReadOnly = isReadOnly(false);
        String oldDb = getDatabase();
        this.session.setQueryInterceptors(this.queryInterceptors);
        // Server properties might be different from previous connection, so initialize again...
        initializePropsFromServer();
        if (isForReconnect) {
            // Restore state from old connection
            setAutoCommit(oldAutoCommit);
            setTransactionIsolation(oldIsolationLevel);
            setDatabase(oldDb);
            setReadOnly(oldReadOnly);
        }
        return;
    } catch (UnableToConnectException rejEx) {
        close();
        this.session.getProtocol().getSocketConnection().forceClose();
        throw rejEx;
    } catch (Exception EEE) {
        if ((EEE instanceof PasswordExpiredException || EEE instanceof SQLException && ((SQLException) EEE).getErrorCode() == MysqlErrorNumbers.ER_MUST_CHANGE_PASSWORD) && !this.disconnectOnExpiredPasswords.getValue()) {
            return;
        }
        if (this.session != null) {
            this.session.forceClose();
        }
        connectionNotEstablishedBecause = EEE;
        if (EEE instanceof SQLException) {
            throw (SQLException) EEE;
        }
        if (EEE.getCause() != null && EEE.getCause() instanceof SQLException) {
            throw (SQLException) EEE.getCause();
        }
        if (EEE instanceof CJException) {
            throw (CJException) EEE;
        }
        SQLException chainedEx = SQLError.createSQLException(Messages.getString("Connection.UnableToConnect"), MysqlErrorNumbers.SQL_STATE_UNABLE_TO_CONNECT_TO_DATASOURCE, getExceptionInterceptor());
        chainedEx.initCause(connectionNotEstablishedBecause);
        throw chainedEx;
    }
}
Also used : PasswordExpiredException(com.mysql.cj.exceptions.PasswordExpiredException) SQLException(java.sql.SQLException) CJException(com.mysql.cj.exceptions.CJException) CJCommunicationsException(com.mysql.cj.exceptions.CJCommunicationsException) UnableToConnectException(com.mysql.cj.exceptions.UnableToConnectException) SQLClientInfoException(java.sql.SQLClientInfoException) SQLException(java.sql.SQLException) PasswordExpiredException(com.mysql.cj.exceptions.PasswordExpiredException) Savepoint(java.sql.Savepoint) UnableToConnectException(com.mysql.cj.exceptions.UnableToConnectException) CJException(com.mysql.cj.exceptions.CJException)

Example 4 with UnableToConnectException

use of com.mysql.cj.exceptions.UnableToConnectException in project aws-mysql-jdbc by awslabs.

the class ConnectionImpl method connectWithRetries.

private void connectWithRetries(boolean isForReconnect) throws SQLException {
    double timeout = this.propertySet.getIntegerProperty(PropertyKey.initialTimeout).getValue();
    boolean connectionGood = false;
    Exception connectionException = null;
    for (int attemptCount = 0; (attemptCount < this.propertySet.getIntegerProperty(PropertyKey.maxReconnects).getValue()) && !connectionGood; attemptCount++) {
        try {
            this.session.forceClose();
            JdbcConnection c = getProxy();
            this.session.connect(this.origHostInfo, this.user, this.password, this.database, getLoginTimeout(), c);
            pingInternal(false, 0);
            boolean oldAutoCommit;
            int oldIsolationLevel;
            boolean oldReadOnly;
            String oldDb;
            synchronized (getConnectionMutex()) {
                // save state from old connection
                oldAutoCommit = getAutoCommit();
                oldIsolationLevel = this.isolationLevel;
                oldReadOnly = isReadOnly(false);
                oldDb = getDatabase();
                this.session.setQueryInterceptors(this.queryInterceptors);
            }
            // Server properties might be different from previous connection, so initialize again...
            initializePropsFromServer();
            if (isForReconnect) {
                // Restore state from old connection
                setAutoCommit(oldAutoCommit);
                setTransactionIsolation(oldIsolationLevel);
                setDatabase(oldDb);
                setReadOnly(oldReadOnly);
            }
            connectionGood = true;
            break;
        } catch (UnableToConnectException rejEx) {
            close();
            this.session.getProtocol().getSocketConnection().forceClose();
        } catch (Exception EEE) {
            connectionException = EEE;
            connectionGood = false;
        }
        if (connectionGood) {
            break;
        }
        if (attemptCount > 0) {
            try {
                Thread.sleep((long) timeout * 1000);
            } catch (InterruptedException IE) {
            // ignore
            }
        }
    }
    if (!connectionGood) {
        // We've really failed!
        SQLException chainedEx = SQLError.createSQLException(Messages.getString("Connection.UnableToConnectWithRetries", new Object[] { this.propertySet.getIntegerProperty(PropertyKey.maxReconnects).getValue() }), MysqlErrorNumbers.SQL_STATE_UNABLE_TO_CONNECT_TO_DATASOURCE, connectionException, getExceptionInterceptor());
        throw chainedEx;
    }
    if (this.propertySet.getBooleanProperty(PropertyKey.paranoid).getValue() && !this.autoReconnect.getValue()) {
        this.password = null;
        this.user = null;
    }
    if (isForReconnect) {
        // 
        // Retrieve any 'lost' prepared statements if re-connecting
        // 
        Iterator<JdbcStatement> statementIter = this.openStatements.iterator();
        // 
        // We build a list of these outside the map of open statements, because in the process of re-preparing, we might end up having to close a prepared
        // statement, thus removing it from the map, and generating a ConcurrentModificationException
        // 
        Stack<JdbcStatement> serverPreparedStatements = null;
        while (statementIter.hasNext()) {
            JdbcStatement statementObj = statementIter.next();
            if (statementObj instanceof ServerPreparedStatement) {
                if (serverPreparedStatements == null) {
                    serverPreparedStatements = new Stack<>();
                }
                serverPreparedStatements.add(statementObj);
            }
        }
        if (serverPreparedStatements != null) {
            while (!serverPreparedStatements.isEmpty()) {
                ((ServerPreparedStatement) serverPreparedStatements.pop()).rePrepare();
            }
        }
    }
}
Also used : SQLException(java.sql.SQLException) CJException(com.mysql.cj.exceptions.CJException) CJCommunicationsException(com.mysql.cj.exceptions.CJCommunicationsException) UnableToConnectException(com.mysql.cj.exceptions.UnableToConnectException) SQLClientInfoException(java.sql.SQLClientInfoException) SQLException(java.sql.SQLException) PasswordExpiredException(com.mysql.cj.exceptions.PasswordExpiredException) Savepoint(java.sql.Savepoint) UnableToConnectException(com.mysql.cj.exceptions.UnableToConnectException)

Example 5 with UnableToConnectException

use of com.mysql.cj.exceptions.UnableToConnectException in project JavaSegundasQuintas by ecteruel.

the class ConnectionImpl method connectOneTryOnly.

private void connectOneTryOnly(boolean isForReconnect) throws SQLException {
    Exception connectionNotEstablishedBecause = null;
    try {
        JdbcConnection c = getProxy();
        this.session.connect(this.origHostInfo, this.user, this.password, this.database, getLoginTimeout(), c);
        // save state from old connection
        boolean oldAutoCommit = getAutoCommit();
        int oldIsolationLevel = this.isolationLevel;
        boolean oldReadOnly = isReadOnly(false);
        String oldDb = getDatabase();
        this.session.setQueryInterceptors(this.queryInterceptors);
        // Server properties might be different from previous connection, so initialize again...
        initializePropsFromServer();
        if (isForReconnect) {
            // Restore state from old connection
            setAutoCommit(oldAutoCommit);
            setTransactionIsolation(oldIsolationLevel);
            setDatabase(oldDb);
            setReadOnly(oldReadOnly);
        }
        return;
    } catch (UnableToConnectException rejEx) {
        close();
        this.session.getProtocol().getSocketConnection().forceClose();
        throw rejEx;
    } catch (Exception EEE) {
        if ((EEE instanceof PasswordExpiredException || EEE instanceof SQLException && ((SQLException) EEE).getErrorCode() == MysqlErrorNumbers.ER_MUST_CHANGE_PASSWORD) && !this.disconnectOnExpiredPasswords.getValue()) {
            return;
        }
        if (this.session != null) {
            this.session.forceClose();
        }
        connectionNotEstablishedBecause = EEE;
        if (EEE instanceof SQLException) {
            throw (SQLException) EEE;
        }
        if (EEE.getCause() != null && EEE.getCause() instanceof SQLException) {
            throw (SQLException) EEE.getCause();
        }
        if (EEE instanceof CJException) {
            throw (CJException) EEE;
        }
        SQLException chainedEx = SQLError.createSQLException(Messages.getString("Connection.UnableToConnect"), MysqlErrorNumbers.SQL_STATE_UNABLE_TO_CONNECT_TO_DATASOURCE, getExceptionInterceptor());
        chainedEx.initCause(connectionNotEstablishedBecause);
        throw chainedEx;
    }
}
Also used : PasswordExpiredException(com.mysql.cj.exceptions.PasswordExpiredException) SQLException(java.sql.SQLException) CJException(com.mysql.cj.exceptions.CJException) UnableToConnectException(com.mysql.cj.exceptions.UnableToConnectException) SQLClientInfoException(java.sql.SQLClientInfoException) SQLException(java.sql.SQLException) PasswordExpiredException(com.mysql.cj.exceptions.PasswordExpiredException) Savepoint(java.sql.Savepoint) UnableToConnectException(com.mysql.cj.exceptions.UnableToConnectException) CJException(com.mysql.cj.exceptions.CJException)

Aggregations

CJException (com.mysql.cj.exceptions.CJException)6 PasswordExpiredException (com.mysql.cj.exceptions.PasswordExpiredException)6 UnableToConnectException (com.mysql.cj.exceptions.UnableToConnectException)6 SQLClientInfoException (java.sql.SQLClientInfoException)6 SQLException (java.sql.SQLException)6 Savepoint (java.sql.Savepoint)6 CJCommunicationsException (com.mysql.cj.exceptions.CJCommunicationsException)2