下面列出了怎么用org.hibernate.connection.ConnectionProvider的API类实例代码及写法,或者点击链接到github查看源代码。
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();
}
/**
* 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;
}
public ConnectionProvider getConnectionProvider() {
return settings.getConnectionProvider();
}
protected Connection getConnection() throws SQLException {
if (sessionFactory instanceof SessionFactoryImplementor) {
ConnectionProvider cp = ((SessionFactoryImplementor) sessionFactory).getConnectionProvider();
return cp.getConnection();
}
return super.getConnection();
}
/**
* 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 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 void testSimultaneous() throws Exception {
ConnectionProvider cp = ConnectionProviderFactory.newConnectionProvider( Environment.getProperties() );
for ( int n=2; n<4000; n*=2 ) {
Session s = openSession();
s.delete("from Simple");
s.flush();
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);
s.save(simples[i], ids[i]);
}
s.flush();
s.connection().commit();
s.close();
//allow cache to settle
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 ) {
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 testMany() throws Exception {
ConnectionProvider cp = ConnectionProviderFactory.newConnectionProvider( Environment.getProperties() );
long hiber=0;
long jdbc=0;
for ( int n=0; n<20; n++ ) {
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
int N=30;
long time = System.currentTimeMillis();
for (int i=0; i<N; i++) {
s = openSession();
hibernate(s, simples, ids, n, "h1");
s.close();
}
hiber += System.currentTimeMillis() - time;
time = System.currentTimeMillis();
for (int i=0; i<N; i++) {
c = cp.getConnection();
directJDBC( c, simples, ids, n, "j1" );
cp.closeConnection(c);
}
jdbc += System.currentTimeMillis() - time;
time = System.currentTimeMillis();
for (int i=0; i<N; i++) {
s = openSession();
hibernate(s, simples, ids, n, "h2");
s.close();
}
hiber += System.currentTimeMillis() - time;
time = System.currentTimeMillis();
for (int i=0; i<N; i++) {
c = cp.getConnection();
directJDBC( c, simples, ids, n, "j2" );
cp.closeConnection(c);
}
jdbc += System.currentTimeMillis() - time;
time = System.currentTimeMillis();
for (int i=0; i<N; i++) {
s = openSession();
hibernate(s, simples, ids, n, "h1");
s.close();
}
hiber += System.currentTimeMillis() - time;
time = System.currentTimeMillis();
for (int i=0; i<N; i++) {
c = cp.getConnection();
directJDBC( c, simples, ids, n, "j1" );
cp.closeConnection(c);
}
jdbc += System.currentTimeMillis() - time;
}
System.out.println( "Hibernate: " + hiber + "ms / Direct JDBC: " + jdbc + "ms = Ratio: " + ( (float) hiber )/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();