Search in sources :

Example 6 with JdbcCoordinator

use of org.hibernate.engine.jdbc.spi.JdbcCoordinator in project hibernate-orm by hibernate.

the class BatchingTest method testBatchingUsage.

@Test
public void testBatchingUsage() throws Exception {
    Session session = openSession();
    SessionImplementor sessionImpl = (SessionImplementor) session;
    final JdbcCoordinator jdbcCoordinator = sessionImpl.getJdbcCoordinator();
    LogicalConnectionImplementor logicalConnection = jdbcCoordinator.getLogicalConnection();
    // set up some tables to use
    Statement statement = jdbcCoordinator.getStatementPreparer().createStatement();
    String dropSql = getDialect().getDropTableString("SANDBOX_JDBC_TST");
    try {
        jdbcCoordinator.getResultSetReturn().execute(statement, dropSql);
    } catch (Exception e) {
    // ignore if the DB doesn't support "if exists" and the table doesn't exist
    }
    jdbcCoordinator.getResultSetReturn().execute(statement, "create table SANDBOX_JDBC_TST ( ID integer, NAME varchar(100) )");
    assertTrue(jdbcCoordinator.getResourceRegistry().hasRegisteredResources());
    assertTrue(logicalConnection.isPhysicallyConnected());
    jdbcCoordinator.getResourceRegistry().release(statement);
    assertFalse(jdbcCoordinator.getResourceRegistry().hasRegisteredResources());
    // after_transaction specified
    assertTrue(logicalConnection.isPhysicallyConnected());
    // ok, now we can get down to it...
    // same as Session#getTransaction
    Transaction txn = session.getTransaction();
    txn.begin();
    final BatchBuilder batchBuilder = new BatchBuilderImpl(2);
    final BatchKey batchKey = new BasicBatchKey("this", Expectations.BASIC);
    final Batch insertBatch = batchBuilder.buildBatch(batchKey, jdbcCoordinator);
    assertTrue("unexpected Batch impl", BatchingBatch.class.isInstance(insertBatch));
    final JournalingBatchObserver batchObserver = new JournalingBatchObserver();
    insertBatch.addObserver(batchObserver);
    final String insertSql = "insert into SANDBOX_JDBC_TST( ID, NAME ) values ( ?, ? )";
    PreparedStatement insert = insertBatch.getBatchStatement(insertSql, false);
    insert.setLong(1, 1);
    insert.setString(2, "name");
    assertEquals(0, batchObserver.getExplicitExecutionCount());
    assertEquals(0, batchObserver.getImplicitExecutionCount());
    insertBatch.addToBatch();
    assertEquals(0, batchObserver.getExplicitExecutionCount());
    assertEquals(0, batchObserver.getImplicitExecutionCount());
    assertTrue(jdbcCoordinator.getResourceRegistry().hasRegisteredResources());
    PreparedStatement insert2 = insertBatch.getBatchStatement(insertSql, false);
    assertSame(insert, insert2);
    insert = insert2;
    insert.setLong(1, 2);
    insert.setString(2, "another name");
    assertEquals(0, batchObserver.getExplicitExecutionCount());
    assertEquals(0, batchObserver.getImplicitExecutionCount());
    insertBatch.addToBatch();
    assertEquals(0, batchObserver.getExplicitExecutionCount());
    assertEquals(1, batchObserver.getImplicitExecutionCount());
    assertTrue(jdbcCoordinator.getResourceRegistry().hasRegisteredResources());
    insertBatch.execute();
    assertEquals(1, batchObserver.getExplicitExecutionCount());
    assertEquals(1, batchObserver.getImplicitExecutionCount());
    assertFalse(jdbcCoordinator.getResourceRegistry().hasRegisteredResources());
    insertBatch.release();
    txn.commit();
    session.close();
}
Also used : PreparedStatement(java.sql.PreparedStatement) Statement(java.sql.Statement) LogicalConnectionImplementor(org.hibernate.resource.jdbc.spi.LogicalConnectionImplementor) BatchBuilder(org.hibernate.engine.jdbc.batch.spi.BatchBuilder) PreparedStatement(java.sql.PreparedStatement) JdbcCoordinator(org.hibernate.engine.jdbc.spi.JdbcCoordinator) JournalingBatchObserver(org.hibernate.test.common.JournalingBatchObserver) Transaction(org.hibernate.Transaction) NonBatchingBatch(org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch) Batch(org.hibernate.engine.jdbc.batch.spi.Batch) BatchingBatch(org.hibernate.engine.jdbc.batch.internal.BatchingBatch) SessionImplementor(org.hibernate.engine.spi.SessionImplementor) BasicBatchKey(org.hibernate.engine.jdbc.batch.internal.BasicBatchKey) BatchKey(org.hibernate.engine.jdbc.batch.spi.BatchKey) BasicBatchKey(org.hibernate.engine.jdbc.batch.internal.BasicBatchKey) NonBatchingBatch(org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch) BatchingBatch(org.hibernate.engine.jdbc.batch.internal.BatchingBatch) BatchBuilderImpl(org.hibernate.engine.jdbc.batch.internal.BatchBuilderImpl) Session(org.hibernate.Session) Test(org.junit.Test)

Example 7 with JdbcCoordinator

use of org.hibernate.engine.jdbc.spi.JdbcCoordinator in project hibernate-orm by hibernate.

the class CursorFromCallableTest method executeStatement.

private void executeStatement(final String sql) {
    final Session session = openSession();
    session.getTransaction().begin();
    session.doWork(new Work() {

        @Override
        public void execute(Connection connection) throws SQLException {
            final JdbcCoordinator jdbcCoordinator = ((SessionImplementor) session).getJdbcCoordinator();
            final StatementPreparer statementPreparer = jdbcCoordinator.getStatementPreparer();
            final ResultSetReturn resultSetReturn = jdbcCoordinator.getResultSetReturn();
            PreparedStatement preparedStatement = null;
            try {
                preparedStatement = statementPreparer.prepareStatement(sql);
                resultSetReturn.execute(preparedStatement);
            } finally {
                if (preparedStatement != null) {
                    try {
                        jdbcCoordinator.getResourceRegistry().release(preparedStatement);
                    } catch (Throwable ignore) {
                    // ignore...
                    }
                }
            }
        }
    });
    session.getTransaction().commit();
    session.close();
}
Also used : ResultSetReturn(org.hibernate.engine.jdbc.spi.ResultSetReturn) JdbcCoordinator(org.hibernate.engine.jdbc.spi.JdbcCoordinator) SQLException(java.sql.SQLException) Work(org.hibernate.jdbc.Work) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) StatementPreparer(org.hibernate.engine.jdbc.spi.StatementPreparer) Session(org.hibernate.Session)

Aggregations

Session (org.hibernate.Session)7 JdbcCoordinator (org.hibernate.engine.jdbc.spi.JdbcCoordinator)7 PreparedStatement (java.sql.PreparedStatement)6 Test (org.junit.Test)6 SessionImplementor (org.hibernate.engine.spi.SessionImplementor)5 Statement (java.sql.Statement)4 SQLException (java.sql.SQLException)3 Transaction (org.hibernate.Transaction)3 BasicBatchKey (org.hibernate.engine.jdbc.batch.internal.BasicBatchKey)3 BatchBuilderImpl (org.hibernate.engine.jdbc.batch.internal.BatchBuilderImpl)3 BatchingBatch (org.hibernate.engine.jdbc.batch.internal.BatchingBatch)3 NonBatchingBatch (org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch)3 Batch (org.hibernate.engine.jdbc.batch.spi.Batch)3 BatchBuilder (org.hibernate.engine.jdbc.batch.spi.BatchBuilder)3 BatchKey (org.hibernate.engine.jdbc.batch.spi.BatchKey)3 LogicalConnectionImplementor (org.hibernate.resource.jdbc.spi.LogicalConnectionImplementor)3 JournalingBatchObserver (org.hibernate.test.common.JournalingBatchObserver)3 Connection (java.sql.Connection)2 ResultSetReturn (org.hibernate.engine.jdbc.spi.ResultSetReturn)2 StatementPreparer (org.hibernate.engine.jdbc.spi.StatementPreparer)2