[hibernate-commits] Hibernate SVN: r12893 - in core/trunk/testsuite/src/test/perf/org: hibernate and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Aug 3 09:11:28 EDT 2007


Author: steve.ebersole at jboss.com
Date: 2007-08-03 09:11:28 -0400 (Fri, 03 Aug 2007)
New Revision: 12893

Added:
   core/trunk/testsuite/src/test/perf/org/hibernate/
   core/trunk/testsuite/src/test/perf/org/hibernate/test/
   core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/
   core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/NewPerformanceTest.java
   core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/NewerPerformanceTest.java
   core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/PerformanceTest.java
Log:
somehow the perf tests got dropped during my moving stuff around

Added: core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/NewPerformanceTest.java
===================================================================
--- core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/NewPerformanceTest.java	                        (rev 0)
+++ core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/NewPerformanceTest.java	2007-08-03 13:11:28 UTC (rev 12893)
@@ -0,0 +1,93 @@
+package org.hibernate.test.perf;
+
+import java.io.Serializable;
+import java.util.List;
+
+import junit.framework.Test;
+import junit.textui.TestRunner;
+
+import org.hibernate.classic.Session;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
+import org.hibernate.test.legacy.Simple;
+
+public class NewPerformanceTest extends FunctionalTestCase {
+
+	public NewPerformanceTest(String arg0) {
+		super(arg0);
+	}
+
+	public String[] getMappings() {
+		return new String[] { "legacy/Simple.hbm.xml" };
+	}
+
+	public static Test suite() {
+		return new FunctionalTestClassTestSuite( NewPerformanceTest.class );
+	}
+
+	public static void main(String[] args) throws Exception {
+		TestRunner.run( suite() );
+	}
+
+	public void testPerformance() throws Exception {
+
+		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);
+			}
+
+			Session s = openSession();
+			prepare(s, simples, ids, n);
+			s.close();
+
+			long find = 0;
+			long flush = 0;
+
+			for ( int i=0; i<100; i++ ) {
+
+				s = openSession();
+				long time = System.currentTimeMillis();
+				List list = s.createQuery("from Simple s where not s.name='osama bin laden' and s.other is null").list();
+				find += System.currentTimeMillis() - time;
+				assertTrue( list.size()==n );
+				time = System.currentTimeMillis();
+				s.flush();
+				flush += System.currentTimeMillis() - time;
+				time = System.currentTimeMillis();
+				s.connection().commit();
+				find += System.currentTimeMillis() - time;
+				s.close();
+
+			}
+
+			System.out.println( "Objects: " + n + " - find(): " + find + "ms / flush(): " + flush + "ms / Ratio: " + ( (float) flush )/find );
+			System.out.println( "Objects: " + n + " flush time per object: " + flush / 100.0 / n );
+			System.out.println( "Objects: " + n + " load time per object: " + find / 100.0 / n );
+			s = openSession();
+			delete(s);
+			s.close();
+
+		}
+	}
+
+	private void prepare(Session s, Simple[] simples, Serializable[] ids, int N) throws Exception {
+		for ( int i=0; i<N; i++ ) {
+			s.save( simples[i], ids[i] );
+		}
+		s.flush();
+		s.connection().commit();
+	}
+
+	private void delete(Session s) throws Exception {
+		s.delete("from Simple s");
+		s.flush();
+		s.connection().commit();
+	}
+
+}

Added: core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/NewerPerformanceTest.java
===================================================================
--- core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/NewerPerformanceTest.java	                        (rev 0)
+++ core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/NewerPerformanceTest.java	2007-08-03 13:11:28 UTC (rev 12893)
@@ -0,0 +1,396 @@
+package org.hibernate.test.perf;
+
+import java.io.Serializable;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Test;
+import junit.textui.TestRunner;
+
+import org.hibernate.cfg.Environment;
+import org.hibernate.classic.Session;
+import org.hibernate.connection.ConnectionProvider;
+import org.hibernate.connection.ConnectionProviderFactory;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
+import org.hibernate.test.legacy.Simple;
+
+public class NewerPerformanceTest extends FunctionalTestCase {
+
+	public NewerPerformanceTest(String name) {
+		super( name );
+	}
+
+	public String[] getMappings() {
+		return new String[] { "legacy/Simple.hbm.xml" };
+	}
+
+	public static Test suite() {
+		return new FunctionalTestClassTestSuite( NewerPerformanceTest.class );
+	}
+
+	public static void main(String[] args) throws Exception {
+		TestRunner.run( suite() );
+	}
+
+	public void testMany() throws Exception {
+
+		ConnectionProvider cp = ConnectionProviderFactory.newConnectionProvider( Environment.getProperties() );
+
+		long hiber=0;
+		long jdbc=0;
+
+		for ( int n=0; n<20; n++ ) {
+
+			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
+
+			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 ) {
+
+			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 testHibernateOnly() throws Exception {
+
+		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
+
+			s = openSession();
+			long time = System.currentTimeMillis();
+			hibernate(s, simples, ids, n, "h1");
+			long hiber = System.currentTimeMillis() - time;
+			s.close();
+
+			s = openSession();
+			time = System.currentTimeMillis();
+			hibernate(s, simples, ids, n, "h2");
+			hiber += System.currentTimeMillis() - time;
+			s.close();
+
+			s = openSession();
+			time = System.currentTimeMillis();
+			hibernate(s, simples, ids, n, "h2");
+			hiber += System.currentTimeMillis() - time;
+			s.close();
+
+			System.out.println( "Objects: " + n + " - Hibernate: " + hiber );
+
+		}
+
+		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();
+	}
+
+	/*private void hibernate(Session s, Simple[] simples, Serializable[] ids, int N, String runname) throws Exception {
+		for ( int i=0; i<N; i++ ) {
+			s.get( Simple.class, ids[i] );
+			//s.find("from Simple s where s.id = ?", ids[i], Hibernate.LONG);
+		}
+		//s.flush();
+		s.connection().commit();
+	}
+
+	private void directJDBC(Connection c, Simple[] simples, Serializable[] ids, int N, String runname) throws SQLException {
+
+		for ( int i=0; i<N; i++ ) {
+			PreparedStatement select = c.prepareStatement("SELECT s.id_, s.name, s.address, s.count_, s.date_, s.pay, s.other FROM Simple s where s.id_=?");
+			select.setLong( 1, ( (Long) ids[i] ).longValue() );
+			ResultSet rs = select.executeQuery();
+			rs.next();
+			/*new Long( rs.getLong(1) );
+			rs.getString(2);
+			rs.getString(3);
+			rs.getInt(4);
+			rs.getDate(5);
+			rs.getFloat(6);
+			rs.getLong(7);*/
+			/*Simple s = new Simple();
+			new Long( rs.getLong("id_") );  rs.wasNull();
+			s.setName( rs.getString("name") );  rs.wasNull();
+			s.setAddress( rs.getString("address") );  rs.wasNull();
+			s.setCount( rs.getInt("count_") );  rs.wasNull();
+			s.setDate( rs.getTimestamp("date_") );  rs.wasNull();
+			s.setPay( new Float( rs.getFloat("pay") ) );  rs.wasNull();
+			rs.getLong("other"); rs.wasNull(); s.setOther(null);
+			rs.close();
+			select.close();
+		}
+		c.commit();
+	}*/
+
+	private void hibernate(Session s, Simple[] simples, Serializable[] ids, int N, String runname) throws Exception {
+		s.createQuery("from Simple s").list();
+		s.connection().commit();
+	}
+
+	private void directJDBC(Connection c, Simple[] simples, Serializable[] ids, int N, String runname) throws SQLException {
+		List result=new ArrayList();
+		PreparedStatement select = c.prepareStatement("SELECT s.id_ as id_, s.name as name, s.address as address, s.count_ as count_, s.date_ as date_, s.pay as pay, s.other as other FROM Simple s");
+		ResultSet rs = select.executeQuery();
+		while ( rs.next() ) {
+			/*new Long( rs.getLong(1) );
+			rs.getString(2);
+			rs.getString(3);
+			rs.getInt(4);
+			rs.getDate(5);
+			rs.getFloat(6);
+			rs.getLong(7);*/
+			Simple s = new Simple();
+			new Long( rs.getLong("id_") );  rs.wasNull();
+			s.setName( rs.getString("name") );  rs.wasNull();
+			s.setAddress( rs.getString("address") );  rs.wasNull();
+			s.setCount( rs.getInt("count_") );  rs.wasNull();
+			s.setDate( rs.getTimestamp("date_") );  rs.wasNull();
+			s.setPay( new Float( rs.getFloat("pay") ) );  rs.wasNull();
+			rs.getLong("other"); rs.wasNull(); s.setOther(null);
+			result.add(s);
+		}
+		rs.close();
+		select.close();
+		c.commit();
+	}
+
+}

Added: core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/PerformanceTest.java
===================================================================
--- core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/PerformanceTest.java	                        (rev 0)
+++ core/trunk/testsuite/src/test/perf/org/hibernate/test/perf/PerformanceTest.java	2007-08-03 13:11:28 UTC (rev 12893)
@@ -0,0 +1,357 @@
+package org.hibernate.test.perf;
+
+import java.io.Serializable;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.sql.Types;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+import org.hibernate.cfg.Environment;
+import org.hibernate.classic.Session;
+import org.hibernate.connection.ConnectionProvider;
+import org.hibernate.connection.ConnectionProviderFactory;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.test.legacy.Simple;
+
+public class PerformanceTest extends FunctionalTestCase {
+
+	public PerformanceTest(String arg0) {
+		super(arg0);
+	}
+
+	public String[] getMappings() {
+		return new String[] { "legacy/Simple.hbm.xml" };
+	}
+
+	public static Test suite() throws Exception {
+		return new TestSuite(PerformanceTest.class);
+	}
+
+	public static void main(String[] args) throws Exception {
+		TestRunner.run( suite() );
+	}
+
+	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 testHibernateOnly() throws Exception {
+
+		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
+
+			Session s = openSession();
+			long time = System.currentTimeMillis();
+			hibernate(s, simples, ids, n, "h1");
+			long hiber = System.currentTimeMillis() - time;
+			s.close();
+
+			s = openSession();
+			time = System.currentTimeMillis();
+			hibernate(s, simples, ids, n, "h2");
+			hiber += System.currentTimeMillis() - time;
+			s.close();
+
+			s = openSession();
+			time = System.currentTimeMillis();
+			hibernate(s, simples, ids, n, "h2");
+			hiber += System.currentTimeMillis() - time;
+			s.close();
+
+			System.out.println( "Objects: " + n + " - Hibernate: " + hiber );
+
+		}
+
+		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();
+	}
+
+	private void hibernate(Session s, Simple[] simples, Serializable[] ids, int N, String runname) throws Exception {
+		for ( int i=0; i<N; i++ ) {
+			s.save( simples[i], ids[i] );
+		}
+		for ( int i=0; i<N; i++ ) {
+			simples[0].setName("A Different Name!" + i + N + runname);
+		}
+		//s.flush();
+		// the results of this test are highly dependent upon
+		// how many times we flush!
+		assertTrue( "assertion", s.delete("from Simple s")==N );
+		s.flush();
+		s.connection().commit();
+	}
+
+	private void directJDBC(Connection c, Simple[] simples, Serializable[] ids, int N, String runname) throws SQLException {
+
+		PreparedStatement insert = c.prepareStatement("insert into Simple ( name, address, count_, date_, other, id_ ) values ( ?, ?, ?, ?, ?, ? )");
+		PreparedStatement delete = c.prepareStatement("delete from Simple where id_ = ?");
+		PreparedStatement select = c.prepareStatement("SELECT s.id_, s.name, s.address, s.count_, s.date_, s.other FROM Simple s");
+		PreparedStatement update = c.prepareStatement("update Simple set name = ?, address = ?, count_ = ?, date_ = ?, other = ? where id_ = ?");
+		for ( int i=0; i<N; i++ ) {
+			insert.setString(1, simples[i].getName() );
+			insert.setString(2, simples[i].getAddress() );
+			insert.setInt(3, simples[i].getCount() );
+			insert.setDate( 4, (java.sql.Date) simples[i].getDate() );
+			insert.setNull(5, Types.BIGINT);
+			insert.setLong( 6, ( (Long) ids[i] ).longValue() );
+			insert.executeUpdate();
+		}
+		insert.close();
+		for ( int i=0; i<N; i++ ) {
+			update.setString(1, "A Different Name!" + i + N + runname );
+			update.setString(2, simples[i].getAddress() );
+			update.setInt(3, simples[i].getCount() );
+			update.setDate( 4, (java.sql.Date) simples[i].getDate() );
+			update.setNull(5, Types.BIGINT);
+			update.setLong( 6, ( (Long) ids[i] ).longValue() );
+			update.executeUpdate();
+		}
+		update.close();
+		java.sql.ResultSet rs = select.executeQuery();
+		Long[] keys = new Long[N];
+		int j=0;
+		while ( rs.next() ) {
+			keys[j++] = new Long( rs.getLong(1) );
+			rs.getString(2);
+			rs.getString(3);
+			rs.getInt(4);
+			rs.getDate(5);
+			rs.getLong(6);
+		}
+		rs.close();
+		select.close();
+		for ( int i=0; i<N; i++ ) {
+			delete.setLong(1, keys[i].longValue() );
+			delete.executeUpdate();
+		}
+		delete.close();
+		c.commit();
+	}
+}




More information about the hibernate-commits mailing list