public void testUserProvidedConnection() throws Exception { ConnectionProvider dcp = new DriverManagerConnectionProvider(); dcp.configure( Environment.getProperties() ); Session s = getSessions().openSession( dcp.getConnection() ); Transaction tx = s.beginTransaction(); s.find("from Fo"); tx.commit(); Connection c = s.disconnect(); assertTrue( c!=null ); s.reconnect(c); tx = s.beginTransaction(); s.find("from Fo"); tx.commit(); assertTrue( s.close()==c ); c.close(); }
@Test public void testSelectStatementWithStatementsCache() throws SQLException { Session session = HibernateTestUtils.getSessionFactoryWithStmtCache().openSession(); ConnectionProvider cp = ((SessionFactoryImplementor) session.getSessionFactory()).getConnectionProvider(); ViburDBCPDataSource ds = ((ViburDBCPConnectionProvider) cp).getDataSource(); ConcurrentMap<StatementMethod, StatementHolder> mockedStatementCache = mockStatementCache(ds); executeAndVerifySelectInSession(session); // resources/hibernate-with-stmt-cache.cfg.xml defines pool with 1 connection only, that's why // the second session will get and use the same underlying connection. session = HibernateTestUtils.getSessionFactoryWithStmtCache().openSession(); executeAndVerifySelectInSession(session); InOrder inOrder = inOrder(mockedStatementCache); inOrder.verify(mockedStatementCache).get(key1.capture()); inOrder.verify(mockedStatementCache).putIfAbsent(same(key1.getValue()), val1.capture()); inOrder.verify(mockedStatementCache).get(key2.capture()); assertEquals(1, mockedStatementCache.size()); assertTrue(mockedStatementCache.containsKey(key1.getValue())); assertEquals(key1.getValue(), key2.getValue()); assertEquals(AVAILABLE, val1.getValue().state().get()); }
@Override public void shutdownDBIfNeeded() { SessionFactoryImplementor sessionFactory = (SessionFactoryImplementor) getSessionFactory(); ConnectionProvider connectionProvider = sessionFactory.getConnectionProvider(); try { Connection connection = connectionProvider.getConnection(); try { String dbName = connection.getMetaData().getDatabaseProductName(); if (dbName.startsWith("HSQL")) { new JDBCWrapper(connection).execute("SHUTDOWN"); LOG.info("Shutdown on HSQL Database was successful"); } } finally { connectionProvider.closeConnection(connection); } } catch (SQLException e) { LOG.warn("Error shutting down database connection", e); } }
@Override public <T> T unwrap(Class<T> unwrapType) { if (ConnectionProvider.class.equals(unwrapType) || CustomJDBCConnectionProvider.class.isAssignableFrom(unwrapType)) { return (T) this; } else { throw new UnknownUnwrapTypeException( unwrapType ); } }
/** * Determine the DataSource of the given SessionFactory. * @param sessionFactory the SessionFactory to check * @return the DataSource, or {@code null} if none found * @see org.hibernate.engine.SessionFactoryImplementor#getConnectionProvider * @see LocalDataSourceConnectionProvider */ public static DataSource getDataSource(SessionFactory sessionFactory) { if (sessionFactory instanceof SessionFactoryImplementor) { ConnectionProvider cp = ((SessionFactoryImplementor) sessionFactory).getConnectionProvider(); if (cp instanceof LocalDataSourceConnectionProvider) { return ((LocalDataSourceConnectionProvider) cp).getDataSource(); } } return null; }
protected Connection getConnection() throws SQLException { if (sessionFactory instanceof SessionFactoryImplementor) { ConnectionProvider cp = ((SessionFactoryImplementor) sessionFactory).getConnectionProvider(); return cp.getConnection(); } return super.getConnection(); }
@Override public boolean isUnwrappableAs(Class unwrapType) { return ConnectionProvider.class.equals(unwrapType) || CustomJDBCConnectionProvider.class.isAssignableFrom(unwrapType); }
public ConnectionProvider getConnectionProvider() { return ((SessionFactoryImplementor) delegateSessionFactory).getConnectionProvider(); }
/** * @return the {@link ConnectionProvider} to use */ private ConnectionProvider getConnectionProvider() { return sessionFactoryImplementor.getConnectionProvider(); }
/** * To get Connection Provider. * @return ConnectionProvider */ public ConnectionProvider getConnectionProvider() { ConnectionProvider connectionProvider = null; connectionProvider = ((SessionFactoryImplementor) this.sessionFactory).getConnectionProvider(); return connectionProvider; }
protected ConnectionProvider createConnectionProvider(Properties properties) { return ConnectionProviderFactory.newConnectionProvider(properties); }
public ConnectionProvider getConnectionProvider() { return connectionProvider; }
void setConnectionProvider(ConnectionProvider provider) { connectionProvider = provider; }
public SuppliedConnectionProviderConnectionHelper(ConnectionProvider provider) { this.provider = provider; }
public ConnectionProvider getConnectionProvider() { return settings.getConnectionProvider(); }
public void testJdbcOnly() throws Exception { ConnectionProvider cp = ConnectionProviderFactory.newConnectionProvider( Environment.getProperties() ); for ( int n=2; n<4000; n*=2 ) { Session s = openSession(); Simple[] simples = new Simple[n]; s.delete("from Simple"); s.flush(); Serializable[] ids = new Serializable[n]; for ( int i=0; i<n; i++ ) { simples[i] = new Simple(); simples[i].init(); simples[i].setCount(i); ids[i] = new Long(i); s.save(simples[i], ids[i]); } s.flush(); s.connection().commit(); s.close(); //Now do timings Connection c = cp.getConnection(); long time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j1" ); long jdbc = System.currentTimeMillis() - time; cp.closeConnection(c); c = cp.getConnection(); time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j2" ); jdbc += System.currentTimeMillis() - time; cp.closeConnection(c); c = cp.getConnection(); time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j2" ); jdbc += System.currentTimeMillis() - time; cp.closeConnection(c); System.out.println( "Objects: " + n + " Direct JDBC: " + jdbc ); } cp.close(); System.gc(); }
public void testSimultaneous() throws Exception { ConnectionProvider cp = ConnectionProviderFactory.newConnectionProvider( Environment.getProperties() ); for ( int n=2; n<4000; n*=2 ) { Simple[] simples = new Simple[n]; Serializable[] ids = new Serializable[n]; for ( int i=0; i<n; i++ ) { simples[i] = new Simple(); simples[i].init(); simples[i].setCount(i); ids[i] = new Long(i); } //allow cache to settle Session s = openSession(); hibernate(s, simples, ids, n, "h0"); s.close(); Connection c = cp.getConnection(); directJDBC( c, simples, ids, n, "j0" ); cp.closeConnection(c); s = openSession(); hibernate(s, simples, ids, n, "h0"); s.close(); c = cp.getConnection(); directJDBC( c, simples, ids, n, "j0" ); cp.closeConnection(c); //Now do timings s = openSession(); long time = System.currentTimeMillis(); hibernate(s, simples, ids, n, "h1"); long hiber = System.currentTimeMillis() - time; s.close(); c = cp.getConnection(); time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j1" ); long jdbc = System.currentTimeMillis() - time; cp.closeConnection(c); s = openSession(); time = System.currentTimeMillis(); hibernate(s, simples, ids, n, "h2"); hiber += System.currentTimeMillis() - time; s.close(); c = cp.getConnection(); time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j2" ); jdbc += System.currentTimeMillis() - time; cp.closeConnection(c); s = openSession(); time = System.currentTimeMillis(); hibernate(s, simples, ids, n, "h2"); hiber += System.currentTimeMillis() - time; s.close(); c = cp.getConnection(); time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j2" ); jdbc += System.currentTimeMillis() - time; cp.closeConnection(c); System.out.println( "Objects: " + n + " - Hibernate: " + hiber + "ms / Direct JDBC: " + jdbc + "ms = Ratio: " + ( (float) hiber )/jdbc ); } cp.close(); System.gc(); }
public void testJdbcOnly() throws Exception { ConnectionProvider cp = ConnectionProviderFactory.newConnectionProvider( Environment.getProperties() ); for ( int n=2; n<4000; n*=2 ) { Simple[] simples = new Simple[n]; Serializable[] ids = new Serializable[n]; for ( int i=0; i<n; i++ ) { simples[i] = new Simple(); simples[i].init(); simples[i].setCount(i); ids[i] = new Long(i); } //Now do timings Connection c = cp.getConnection(); long time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j1" ); long jdbc = System.currentTimeMillis() - time; cp.closeConnection(c); c = cp.getConnection(); time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j2" ); jdbc += System.currentTimeMillis() - time; cp.closeConnection(c); c = cp.getConnection(); time = System.currentTimeMillis(); directJDBC( c, simples, ids, n, "j2" ); jdbc += System.currentTimeMillis() - time; cp.closeConnection(c); System.out.println( "Objects: " + n + " Direct JDBC: " + jdbc ); } cp.close(); System.gc(); }
/** * Get the connection provider */ public ConnectionProvider getConnectionProvider();