Java Code Examples for java.sql.Connection#isReadOnly()

The following examples show how to use java.sql.Connection#isReadOnly() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: HibernateDatastore.java    From gorm-hibernate5 with Apache License 2.0 6 votes vote down vote up
@Override
public void addTenantForSchema(String schemaName) {
    addTenantForSchemaInternal(schemaName);
    registerAllEntitiesWithEnhancer();
    HibernateConnectionSource defaultConnectionSource = (HibernateConnectionSource) connectionSources.getDefaultConnectionSource();
    DataSource dataSource = defaultConnectionSource.getDataSource();
    if(dataSource instanceof TransactionAwareDataSourceProxy) {
        dataSource = ((TransactionAwareDataSourceProxy) dataSource).getTargetDataSource();
    }
    Object existing = TransactionSynchronizationManager.getResource(dataSource);
    if(existing instanceof ConnectionHolder) {
        ConnectionHolder connectionHolder = (ConnectionHolder) existing;
        Connection connection = connectionHolder.getConnection();
        try {
            if(!connection.isClosed() && !connection.isReadOnly()) {
                schemaHandler.useDefaultSchema(connection);
            }
        } catch (SQLException e) {
            throw new DatastoreConfigurationException("Failed to reset to default schema: " + e.getMessage(), e);
        }
    }

}
 
Example 2
Source File: DataSourceUtils.java    From java-technology-stack with MIT License 6 votes vote down vote up
/**
 * Reset the given Connection after a transaction,
 * regarding read-only flag and isolation level.
 * @param con the Connection to reset
 * @param previousIsolationLevel the isolation level to restore, if any
 * @see #prepareConnectionForTransaction
 */
public static void resetConnectionAfterTransaction(Connection con, @Nullable Integer previousIsolationLevel) {
	Assert.notNull(con, "No Connection specified");
	try {
		// Reset transaction isolation to previous value, if changed for the transaction.
		if (previousIsolationLevel != null) {
			if (logger.isDebugEnabled()) {
				logger.debug("Resetting isolation level of JDBC Connection [" +
						con + "] to " + previousIsolationLevel);
			}
			con.setTransactionIsolation(previousIsolationLevel);
		}

		// Reset read-only flag.
		if (con.isReadOnly()) {
			if (logger.isDebugEnabled()) {
				logger.debug("Resetting read-only flag of JDBC Connection [" + con + "]");
			}
			con.setReadOnly(false);
		}
	}
	catch (Throwable ex) {
		logger.debug("Could not reset JDBC Connection after transaction", ex);
	}
}
 
Example 3
Source File: OracleManager.java    From aliyun-maxcompute-data-collectors with Apache License 2.0 6 votes vote down vote up
/**
 * @return a Connection instance that can be used to connect to the
 * given database, if a previously-opened connection is available in
 * the cache. Returns null if none is available in the map.
 */
public synchronized Connection getConnection(String connectStr,
    String username) throws SQLException {
  CacheKey key = new CacheKey(connectStr, username);
  Connection cached = connectionMap.get(key);
  if (null != cached) {
    connectionMap.remove(key);
    if (cached.isReadOnly()) {
      // Read-only mode? Don't want it.
      cached.close();
    }

    if (cached.isClosed()) {
      // This connection isn't usable.
      return null;
    }

    cached.rollback(); // Reset any transaction state.
    cached.clearWarnings();

    LOG.debug("Got cached connection for " + key);
  }

  return cached;
}
 
Example 4
Source File: DataSourceUtils.java    From spring4-understanding with Apache License 2.0 6 votes vote down vote up
/**
 * Reset the given Connection after a transaction,
 * regarding read-only flag and isolation level.
 * @param con the Connection to reset
 * @param previousIsolationLevel the isolation level to restore, if any
 * @see #prepareConnectionForTransaction
 */
public static void resetConnectionAfterTransaction(Connection con, Integer previousIsolationLevel) {
	Assert.notNull(con, "No Connection specified");
	try {
		// Reset transaction isolation to previous value, if changed for the transaction.
		if (previousIsolationLevel != null) {
			if (logger.isDebugEnabled()) {
				logger.debug("Resetting isolation level of JDBC Connection [" +
						con + "] to " + previousIsolationLevel);
			}
			con.setTransactionIsolation(previousIsolationLevel);
		}

		// Reset read-only flag.
		if (con.isReadOnly()) {
			if (logger.isDebugEnabled()) {
				logger.debug("Resetting read-only flag of JDBC Connection [" + con + "]");
			}
			con.setReadOnly(false);
		}
	}
	catch (Throwable ex) {
		logger.debug("Could not reset JDBC Connection after transaction", ex);
	}
}
 
Example 5
Source File: 1205753_EmbedPooledConnection_0_s.java    From coming with MIT License 5 votes vote down vote up
final void openRealConnection() throws SQLException {
	// first time we establish a connection
	Connection rc = dataSource.getConnection(username, password, requestPassword);
 
	this.realConnection = (EmbedConnection) rc;
	defaultIsolationLevel = rc.getTransactionIsolation();
	defaultReadOnly = rc.isReadOnly();
	if (currentConnectionHandle != null)
		realConnection.setApplicationConnection(currentConnectionHandle);
}
 
Example 6
Source File: 1205753_EmbedPooledConnection_0_s.java    From coming with MIT License 5 votes vote down vote up
final void openRealConnection() throws SQLException {
	Connection rc = dataSource.getConnection(username, password, requestPassword);
 
	this.realConnection = (EmbedConnection) rc;
	defaultIsolationLevel = rc.getTransactionIsolation();
	defaultReadOnly = rc.isReadOnly();
	if (currentConnectionHandle != null)
		realConnection.setApplicationConnection(currentConnectionHandle);
}
 
Example 7
Source File: EmbedPooledConnection.java    From gemfirexd-oss with Apache License 2.0 5 votes vote down vote up
final void openRealConnection() throws SQLException {
	// first time we establish a connection
	Connection rc = dataSource.getConnection(username, password, requestPassword);

	this.realConnection = (EmbedConnection) rc;
	defaultIsolationLevel = rc.getTransactionIsolation();
	defaultReadOnly = rc.isReadOnly();
	if (currentConnectionHandle != null)
		realConnection.setApplicationConnection(currentConnectionHandle);
}
 
Example 8
Source File: 1205753_EmbedPooledConnection_0_t.java    From coming with MIT License 5 votes vote down vote up
final void openRealConnection() throws SQLException {
	// first time we establish a connection
	Connection rc = dataSource.getConnection(username, password, requestPassword);
 
	this.realConnection = (EmbedConnection) rc;
	defaultIsolationLevel = rc.getTransactionIsolation();
	defaultReadOnly = rc.isReadOnly();
	if (currentConnectionHandle != null)
		realConnection.setApplicationConnection(currentConnectionHandle);
}
 
Example 9
Source File: SqlTemplateImpl.java    From light-task-scheduler with Apache License 2.0 5 votes vote down vote up
private void close(Connection conn) throws SQLException {
    if (conn != null) {
        if (conn.isReadOnly()) {
            conn.setReadOnly(false);  // restore NOT readOnly before return to pool
        }
        conn.close();
    }
}
 
Example 10
Source File: LocalXAResource.java    From ByteJTA with GNU Lesser General Public License v3.0 5 votes vote down vote up
public synchronized int prepare(Xid xid) {
	Connection connection = this.managedConnection.getPhysicalConnection();
	try {
		if (connection.isReadOnly()) {
			connection.setAutoCommit(originalAutoCommit);
			return XAResource.XA_RDONLY;
		}
	} catch (Exception ex) {
		logger.debug("Error occurred while preparing local-xa-resource: {}", ex.getMessage());
	}
	return XAResource.XA_OK;
}
 
Example 11
Source File: 1205753_EmbedPooledConnection_0_s.java    From coming with MIT License 5 votes vote down vote up
final void openRealConnection() throws SQLException {
	// first time we establish a connection
	Connection rc = dataSource.getConnection(username, password, requestPassword);
 
	this.realConnection = (EmbedConnection) rc;
	defaultIsolationLevel = rc.getTransactionIsolation();
	defaultReadOnly = rc.isReadOnly();
	if (currentConnectionHandle != null)
		realConnection.setApplicationConnection(currentConnectionHandle);
}
 
Example 12
Source File: 1205753_EmbedPooledConnection_0_s.java    From gumtree-spoon-ast-diff with Apache License 2.0 5 votes vote down vote up
final void openRealConnection() throws SQLException {
	// first time we establish a connection
	Connection rc = dataSource.getConnection(username, password, requestPassword);
 
	this.realConnection = (EmbedConnection) rc;
	defaultIsolationLevel = rc.getTransactionIsolation();
	defaultReadOnly = rc.isReadOnly();
	if (currentConnectionHandle != null)
		realConnection.setApplicationConnection(currentConnectionHandle);
}
 
Example 13
Source File: 1205753_EmbedPooledConnection_0_s.java    From coming with MIT License 5 votes vote down vote up
final void openRealConnection() throws SQLException {
	// first time we establish a connection
	Connection rc = dataSource.getConnection(username, password, requestPassword);
 
	this.realConnection = (EmbedConnection) rc;
	defaultIsolationLevel = rc.getTransactionIsolation();
	defaultReadOnly = rc.isReadOnly();
	if (currentConnectionHandle != null)
		realConnection.setApplicationConnection(currentConnectionHandle);
}
 
Example 14
Source File: 1205753_EmbedPooledConnection_0_s.java    From coming with MIT License 5 votes vote down vote up
final void openRealConnection() throws SQLException {
	Connection rc = dataSource.getConnection(username, password, requestPassword);
 
	this.realConnection = (EmbedConnection) rc;
	defaultIsolationLevel = rc.getTransactionIsolation();
	defaultReadOnly = rc.isReadOnly();
	if (currentConnectionHandle != null)
		realConnection.setApplicationConnection(currentConnectionHandle);
}
 
Example 15
Source File: 1205753_EmbedPooledConnection_0_t.java    From coming with MIT License 5 votes vote down vote up
final void openRealConnection() throws SQLException {
	// first time we establish a connection
	Connection rc = dataSource.getConnection(username, password, requestPassword);
 
	this.realConnection = (EmbedConnection) rc;
	defaultIsolationLevel = rc.getTransactionIsolation();
	defaultReadOnly = rc.isReadOnly();
	if (currentConnectionHandle != null)
		realConnection.setApplicationConnection(currentConnectionHandle);
}
 
Example 16
Source File: ConnectionUtil.java    From aceql-http with GNU Lesser General Public License v2.1 5 votes vote down vote up
/**
    * Put the Connection in auto-commit mode and in read only false
    * 
    * @param connection
    *            the JDBC Connection to init
    * @throws SQLException
    *             if any SQL Exception occurs
    */
   public static void connectionInit(Connection connection)
    throws SQLException {

// Make sure Connection extracted from the pool is always on autocommit
// mode
// This avoid for client side to send a connection.getAutoCommit()
// before
// starting working.
// This is anyway mandatory for C# as all Connections are per default
// auto commit mode.
if (!connection.getAutoCommit()) {
    connection.rollback();
    connection.setAutoCommit(true);
}

// Make sure we are not in read only. Don't trap Exception because of
// Drivers not supporting this call
if (connection.isReadOnly()) {
    try {
	connection.setReadOnly(false);
    } catch (Exception e) {
	// Ignore
	System.err.println(e.toString());
    }
}
   }
 
Example 17
Source File: 1205753_EmbedPooledConnection_0_t.java    From coming with MIT License 5 votes vote down vote up
final void openRealConnection() throws SQLException {
	// first time we establish a connection
	Connection rc = dataSource.getConnection(username, password, requestPassword);
 
	this.realConnection = (EmbedConnection) rc;
	defaultIsolationLevel = rc.getTransactionIsolation();
	defaultReadOnly = rc.isReadOnly();
	if (currentConnectionHandle != null)
		realConnection.setApplicationConnection(currentConnectionHandle);
}
 
Example 18
Source File: 1205753_EmbedPooledConnection_0_s.java    From coming with MIT License 5 votes vote down vote up
final void openRealConnection() throws SQLException {
	// first time we establish a connection
	Connection rc = dataSource.getConnection(username, password, requestPassword);
 
	this.realConnection = (EmbedConnection) rc;
	defaultIsolationLevel = rc.getTransactionIsolation();
	defaultReadOnly = rc.isReadOnly();
	if (currentConnectionHandle != null)
		realConnection.setApplicationConnection(currentConnectionHandle);
}
 
Example 19
Source File: DatabasePropertyTestSetup.java    From spliceengine with GNU Affero General Public License v3.0 4 votes vote down vote up
/**
 * Revert the properties to their values prior to the setUp call.
 */
protected void tearDown()
throws java.lang.Exception
{
    Connection conn = getConnection();
    try {
        clearProperties(conn);
    } catch (SQLException sqle) {
        // To try to prevent the error situation of DERBY-5686, which
        // cascades to many test failures, catch ERROR 25502, and if it occurs
        // try to gather some information, close the connection,
        // and retry the clearing of the properties on a new connection
        if (sqle.getSQLState().equals("25502")) {
            // firstly, check on the state of the connection when we
            // get this error
            System.out.println("Apparently this is a read-only connection in teardown()? Get some data:");
            System.out.println("conn.isClosed: " + conn.isClosed());
            System.out.println("conn.isReadOnly: " + conn.isReadOnly());
            System.out.println("conn.getHoldability: " + conn.getHoldability());
            System.out.println("conn.getTransactionIsolation: " + conn.getTransactionIsolation());
            System.out.println("conn.getAutoCommit: " + conn.getAutoCommit());
            // now try to close the connection, then try open a new one, 
            // and try to executeUpdate again.
            try {
                conn.close();
            } catch (SQLException isqle) {
                if (sqle.getSQLState()=="25001")
                {
                    // the transaction is still active. let's commit what we have.
                    conn.commit();
                    conn.close();
                } else {
                    System.out.println("close failed - see SQLState.");
                    throw sqle;
                }
            }
            Connection conn2 = getConnection();
            // check if this second connection is read-only
            if (conn2.isReadOnly())
            {
                System.out.println("Sorry, conn2 is also read-only, won't retry");
                // give up
                throw sqle;
            }
            else
            {   
                // retry
                System.out.println("retrying clearing the Properties");
                clearProperties(conn2);
            }
        }
        else if(!sqle.getSQLState().equals(SQLStateConstants.PROPERTY_UNSUPPORTED_CHANGE))
    		throw sqle;
    }
	// and then reset nay old values which will cause the commit.
	setProperties(oldValues);
    super.tearDown();
    newValues = null;
    oldValues = null;
    if (staticProperties) {
        TestConfiguration.getCurrent().shutdownDatabase();
    }
}
 
Example 20
Source File: ConnectionTest.java    From FoxTelem with GNU General Public License v3.0 4 votes vote down vote up
public void testReadOnly56() throws Exception {
    if (!versionMeetsMinimum(5, 6, 5)) {
        return;
    }
    try {
        Connection notLocalState = getConnectionWithProps("profileSQL=true");

        for (int i = 0; i < 2; i++) {
            StandardLogger.startLoggingToBuffer();
            notLocalState.setReadOnly(true);
            assertTrue(StandardLogger.getBuffer().toString().indexOf("set session transaction read only") != -1);
            notLocalState.createStatement().execute("set session transaction read write");
            assertFalse(notLocalState.isReadOnly());
        }

        for (int i = 0; i < 2; i++) {
            StandardLogger.startLoggingToBuffer();
            notLocalState.setReadOnly(false);
            assertTrue(StandardLogger.getBuffer().toString().indexOf("set session transaction read write") != -1);
            notLocalState.createStatement().execute("set session transaction read only");
            assertTrue(notLocalState.isReadOnly());
        }

        Connection localState = getConnectionWithProps("profileSQL=true,useLocalSessionState=true");

        String s = versionMeetsMinimum(8, 0, 3) ? "@@session.transaction_read_only" : "@@session.tx_read_only";

        for (int i = 0; i < 2; i++) {
            StandardLogger.startLoggingToBuffer();
            localState.setReadOnly(true);
            if (i == 0) {
                assertTrue(StandardLogger.getBuffer().toString().indexOf("set session transaction read only") != -1);
            } else {
                assertTrue(StandardLogger.getBuffer().toString().indexOf("set session transaction read only") == -1);
            }
            StandardLogger.startLoggingToBuffer();
            localState.isReadOnly();
            assertTrue(StandardLogger.getBuffer().toString().indexOf("select @@session." + s) == -1);
        }

        Connection noOptimization = getConnectionWithProps("profileSQL=true,readOnlyPropagatesToServer=false");

        for (int i = 0; i < 2; i++) {
            StandardLogger.startLoggingToBuffer();
            noOptimization.setReadOnly(true);
            assertTrue(StandardLogger.getBuffer().toString().indexOf("set session transaction read only") == -1);
            StandardLogger.startLoggingToBuffer();
            noOptimization.isReadOnly();
            assertTrue(StandardLogger.getBuffer().toString().indexOf("select @@session." + s) == -1);
        }
    } finally {
        StandardLogger.dropBuffer();
    }
}