Revision: 133
http://polepos.svn.sourceforge.net/polepos/?rev=133&view=rev
Author: carlrosenberger
Date: 2010-06-24 18:16:24 +0000 (Thu, 24 Jun 2010)
Log Message:
-----------
cr: Added new simple FlatObject circuit.
Simplified JDBC use everywhere.
New graph functionality using baseline and order-of-magnitude logarithmic diff
Modified Paths:
--------------
trunk/polepos/settings/Circuits.properties
trunk/polepos/settings/DebugCircuits.properties
trunk/polepos/src/org/polepos/RunSeason.java
trunk/polepos/src/org/polepos/data/Pilot.java
trunk/polepos/src/org/polepos/enhance/JavaServices.java
trunk/polepos/src/org/polepos/framework/Circuit.java
trunk/polepos/src/org/polepos/framework/CircuitBase.java
trunk/polepos/src/org/polepos/framework/ConcurrencyCircuit.java
trunk/polepos/src/org/polepos/framework/ConcurrentDriver.java
trunk/polepos/src/org/polepos/framework/DriverBase.java
trunk/polepos/src/org/polepos/reporters/Graph.java
trunk/polepos/src/org/polepos/reporters/GraphReporter.java
trunk/polepos/src/org/polepos/reporters/HTMLReporter.java
trunk/polepos/src/org/polepos/reporters/PDFReporter.java
trunk/polepos/src/org/polepos/reporters/ReporterConstants.java
trunk/polepos/src/org/polepos/teams/db4o/BahrainDb4o.java
trunk/polepos/src/org/polepos/teams/db4o/Db4oDriver.java
trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java
trunk/polepos/src/org/polepos/teams/hibernate/HibernateCar.java
trunk/polepos/src/org/polepos/teams/hibernate/HibernateDriver.java
trunk/polepos/src/org/polepos/teams/hibernate/HibernateTeam.java
trunk/polepos/src/org/polepos/teams/jdbc/BahrainJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/BarcelonaJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/ImolaJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/JdbcCar.java
trunk/polepos/src/org/polepos/teams/jdbc/JdbcDriver.java
trunk/polepos/src/org/polepos/teams/jdbc/JdbcTeam.java
trunk/polepos/src/org/polepos/teams/jdbc/MelbourneJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/MonacoJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/SepangJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/drivers/melbourne/BulkWritePreparedStatement.java
trunk/polepos/src/org/polepos/teams/jdo/BahrainJdo.java
trunk/polepos/src/org/polepos/teams/jdo/JdoDriver.java
trunk/polepos/src/org/polepos/teams/jdo/JdoTeam.java
trunk/polepos/src/org/polepos/teams/jdo/data/package.jdo
trunk/polepos/src/org/polepos/util/MemoryUtil.java
Added Paths:
-----------
trunk/polepos/pseudocode/flatobject.delete.txt
trunk/polepos/pseudocode/flatobject.queryIndexedInt.txt
trunk/polepos/pseudocode/flatobject.queryIndexedString.txt
trunk/polepos/pseudocode/flatobject.update.txt
trunk/polepos/pseudocode/flatobject.write.txt
trunk/polepos/pseudocode/silverstone.deleteAndStore.txt
trunk/polepos/src/org/polepos/circuits/flatobject/
trunk/polepos/src/org/polepos/circuits/flatobject/FlatObject.java
trunk/polepos/src/org/polepos/data/IndexedObject.java
trunk/polepos/src/org/polepos/framework/ByRef.java
trunk/polepos/src/org/polepos/framework/CircuitDescription.java
trunk/polepos/src/org/polepos/framework/CodeBlock.java
trunk/polepos/src/org/polepos/framework/Order.java
trunk/polepos/src/org/polepos/framework/ReflectiveCircuitBase.java
trunk/polepos/src/org/polepos/teams/db4o/FlatObjectDb4o.java
trunk/polepos/src/org/polepos/teams/hibernate/FlatObjectHibernate.java
trunk/polepos/src/org/polepos/teams/hibernate/data/HibernateIndexedObject.hbm.xml
trunk/polepos/src/org/polepos/teams/hibernate/data/HibernateIndexedObject.java
trunk/polepos/src/org/polepos/teams/jdbc/FlatObjectJdbc.java
trunk/polepos/src/org/polepos/teams/jdbc/ResultSetStatement.java
trunk/polepos/src/org/polepos/teams/jdo/FlatObjectJdo.java
trunk/polepos/src/org/polepos/teams/jdo/data/JdoIndexedObject.java
Removed Paths:
-------------
trunk/polepos/src/org/polepos/teams/jdbc/drivers/melbourne/BulkWriteMultiValue.java
trunk/polepos/src/org/polepos/teams/jdbc/drivers/melbourne/BulkWriteSingle.java
Added: trunk/polepos/pseudocode/flatobject.delete.txt
===================================================================
--- trunk/polepos/pseudocode/flatobject.delete.txt (rev 0)
+++ trunk/polepos/pseudocode/flatobject.delete.txt 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,5 @@
+// OO
+db.delete(indexedObject);
+
+// SQL
+delete from flatobject where _id = ?;
\ No newline at end of file
Property changes on: trunk/polepos/pseudocode/flatobject.delete.txt
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/polepos/pseudocode/flatobject.queryIndexedInt.txt
===================================================================
--- trunk/polepos/pseudocode/flatobject.queryIndexedInt.txt (rev 0)
+++ trunk/polepos/pseudocode/flatobject.queryIndexedInt.txt 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,9 @@
+// OO
+db.query(new Predicate<IndexedObject>(){
+ public boolean match(IndexedObject obj) {
+ return obj._int.equals(int);
+ }
+});
+
+// SQL
+select * from flatobject where _int = ?;
\ No newline at end of file
Property changes on: trunk/polepos/pseudocode/flatobject.queryIndexedInt.txt
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/polepos/pseudocode/flatobject.queryIndexedString.txt
===================================================================
--- trunk/polepos/pseudocode/flatobject.queryIndexedString.txt (rev 0)
+++ trunk/polepos/pseudocode/flatobject.queryIndexedString.txt 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,9 @@
+// OO
+db.query(new Predicate<IndexedObject>(){
+ public boolean match(IndexedObject obj) {
+ return obj._string.equals(string);
+ }
+});
+
+// SQL
+select * from flatobject where _string = ?;
\ No newline at end of file
Property changes on: trunk/polepos/pseudocode/flatobject.queryIndexedString.txt
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/polepos/pseudocode/flatobject.update.txt
===================================================================
--- trunk/polepos/pseudocode/flatobject.update.txt (rev 0)
+++ trunk/polepos/pseudocode/flatobject.update.txt 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,6 @@
+// OO
+indexedObject._str = "updated";
+db.store(indexedObject);
+
+// SQL
+update flatobject set _string = 'updated' where _id = ?;
\ No newline at end of file
Property changes on: trunk/polepos/pseudocode/flatobject.update.txt
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/polepos/pseudocode/flatobject.write.txt
===================================================================
--- trunk/polepos/pseudocode/flatobject.write.txt (rev 0)
+++ trunk/polepos/pseudocode/flatobject.write.txt 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,9 @@
+class IndexedObject {
+ int _int;
+ String _string;
+}
+// OO
+db.store(new IndexedObject(int, string));
+
+// SQL
+insert into flatobject (_id, _int, _string ) values (?,?,?);
\ No newline at end of file
Property changes on: trunk/polepos/pseudocode/flatobject.write.txt
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/polepos/pseudocode/silverstone.deleteAndStore.txt
===================================================================
--- trunk/polepos/pseudocode/silverstone.deleteAndStore.txt (rev 0)
+++ trunk/polepos/pseudocode/silverstone.deleteAndStore.txt 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,8 @@
+for (int i = 0; i < updates; i++) {
+ db.deleteAll(SilverstoneItem.class); // will be in 8.0
+ db.commit();
+ for (int j = 1; j <= objects; j++ ){
+ db.store(new SilverstoneItem(j));
+ }
+ db.commit();
+}
\ No newline at end of file
Property changes on: trunk/polepos/pseudocode/silverstone.deleteAndStore.txt
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/polepos/settings/Circuits.properties
===================================================================
--- trunk/polepos/settings/Circuits.properties 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/settings/Circuits.properties 2010-06-24 18:16:24 UTC (rev 133)
@@ -7,6 +7,17 @@
threads=1,3,10
+# flatobject
+#
+# [objects]: number of objects to store
+# [selects]: number of queries to be run against all objects
+# [updates]: number of updates and deletes to be run
+# [commitinterval]: when to perform an intermediate commit during write and delete
+flatobject.objects=30000,100000,300000
+flatobject.selects=3000,3000,3000
+flatobject.updates=3000,3000,3000
+flatobject.commitinterval=10000,10000,10000
+
# Settings for all circuits in the database benchmark.
# melbourne
Modified: trunk/polepos/settings/DebugCircuits.properties
===================================================================
--- trunk/polepos/settings/DebugCircuits.properties 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/settings/DebugCircuits.properties 2010-06-24 18:16:24 UTC (rev 133)
@@ -5,6 +5,19 @@
threads=1,3,10
+# flatobject
+#
+# [objects]: number of objects to store
+# [selects]: number of queries to be run against all objects
+# [updates]: number of updates and deletes to be run
+# [commitinterval]: when to perform an intermediate commit during write and delete
+
+flatobject.objects=300,1000,3000
+flatobject.selects=10,10,10
+flatobject.updates=10,10,10
+flatobject.commitinterval=100,100,100
+
+
# Settings for the database benchmark
# with short test runs for debugging only
# Results are not signifant
Modified: trunk/polepos/src/org/polepos/RunSeason.java
===================================================================
--- trunk/polepos/src/org/polepos/RunSeason.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/RunSeason.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -21,6 +21,7 @@
import org.polepos.circuits.bahrain.*;
import org.polepos.circuits.barcelona.*;
+import org.polepos.circuits.flatobject.*;
import org.polepos.circuits.imola.*;
import org.polepos.circuits.melbourne.*;
import org.polepos.circuits.monaco.*;
@@ -55,7 +56,8 @@
@Override
public CircuitBase[] circuits() {
- return new CircuitBase[] {
+ return new CircuitBase[] {
+ // new ReflectiveCircuitBase(FlatObject.class),
new Melbourne(),
new Sepang(),
new Bahrain(),
@@ -66,17 +68,20 @@
new Nurburgring(),
};
}
+
+
@Override
public Team[] teams() {
return new Team[] {
new Db4oTeam(),
- // new Db4oClientServerTeam(),
new JdoTeam(),
+// new Db4oClientServerTeam(),
+ new JdbcTeam(),
+ new HibernateTeam(),
+ new JpaTeam(),
+
// new JviTeam(),
- new JpaTeam(),
- new HibernateTeam(),
- new JdbcTeam(),
// new CobraTeam(),
};
}
Added: trunk/polepos/src/org/polepos/circuits/flatobject/FlatObject.java
===================================================================
--- trunk/polepos/src/org/polepos/circuits/flatobject/FlatObject.java (rev 0)
+++ trunk/polepos/src/org/polepos/circuits/flatobject/FlatObject.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,42 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+package org.polepos.circuits.flatobject;
+
+import org.polepos.framework.*;
+
+@CircuitDescription("write, query, update and delete indexed flat objects")
+public interface FlatObject
+{
+ @Order(1)
+ void write() throws Throwable;
+
+ @Order(2)
+ void queryIndexedString() throws Throwable;
+
+ @Order(3)
+ void queryIndexedInt() throws Throwable;
+
+ @Order(4)
+ void update() throws Throwable;
+
+ @Order(5)
+ void delete() throws Throwable;
+
+}
Property changes on: trunk/polepos/src/org/polepos/circuits/flatobject/FlatObject.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/polepos/src/org/polepos/data/IndexedObject.java
===================================================================
--- trunk/polepos/src/org/polepos/data/IndexedObject.java (rev 0)
+++ trunk/polepos/src/org/polepos/data/IndexedObject.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,78 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+
+package org.polepos.data;
+
+import org.polepos.framework.*;
+
+public class IndexedObject implements CheckSummable{
+
+ private static final int STRING_LENGTH = 20;
+
+ private static final String UNDERSCORES = underscores();
+
+ public int _int;
+
+ public String _string;
+
+ public IndexedObject(){
+
+ }
+
+ public IndexedObject(int int_, String str){
+ _int = int_;
+ _string = str;
+ }
+
+ public IndexedObject(int int_){
+ this(int_, queryString(int_));
+ }
+
+ @Override
+ public long checkSum() {
+ return _string.length();
+ }
+
+ public static String queryString(int int_){
+ StringBuffer sb = new StringBuffer();
+ sb.append("str");
+ sb.append(int_);
+ sb.append(UNDERSCORES);
+ return sb.substring(0, STRING_LENGTH);
+ }
+
+ private static String underscores() {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < STRING_LENGTH; i++) {
+ sb.append("_");
+ }
+ return sb.toString();
+ }
+
+ public void updateString() {
+ _string = _string.toUpperCase();
+ }
+
+ @Override
+ public String toString() {
+ return "IndexedObject _int:" + _int + " _string:" + _string;
+ }
+
+}
Property changes on: trunk/polepos/src/org/polepos/data/IndexedObject.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/polepos/src/org/polepos/data/Pilot.java
===================================================================
--- trunk/polepos/src/org/polepos/data/Pilot.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/data/Pilot.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -21,10 +21,6 @@
import org.polepos.framework.*;
-/**
- *
- * @author Herkules
- */
public class Pilot implements CheckSummable
{
private String mName;
@@ -33,9 +29,6 @@
private int mLicenseID;
- /**
- * Default.
- */
public Pilot()
{
}
Modified: trunk/polepos/src/org/polepos/enhance/JavaServices.java
===================================================================
--- trunk/polepos/src/org/polepos/enhance/JavaServices.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/enhance/JavaServices.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -28,6 +28,10 @@
public static String java(String className) throws IOException, InterruptedException{
return IOServices.exec(javaExecutable(), javaRunArguments(className));
}
+
+ public static String java(String className, String[] args) throws IOException, InterruptedException{
+ return IOServices.exec(javaExecutable(), javaRunArguments(className, args));
+ }
public static ProcessRunner startJava(String className, String[] args) throws IOException {
return IOServices.start(javaExecutable(), javaRunArguments(className, args));
Added: trunk/polepos/src/org/polepos/framework/ByRef.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/ByRef.java (rev 0)
+++ trunk/polepos/src/org/polepos/framework/ByRef.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,33 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+package org.polepos.framework;
+
+public class ByRef<T> {
+
+ public T value;
+
+ public static <T> ByRef<T> newInstance(T initialValue) {
+ final ByRef<T> instance = new ByRef<T>();
+ instance.value = initialValue;
+ return instance;
+ }
+
+
+}
Property changes on: trunk/polepos/src/org/polepos/framework/ByRef.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/polepos/src/org/polepos/framework/Circuit.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/Circuit.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/framework/Circuit.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -29,7 +29,7 @@
public TurnSetup[] lapSetups();
- public Class<? extends DriverBase> requiredDriver();
+ public Class<?> requiredDriver();
public String description();
Modified: trunk/polepos/src/org/polepos/framework/CircuitBase.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/CircuitBase.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/framework/CircuitBase.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -45,7 +45,7 @@
}
}
- private final List<Lap> mLaps;
+ private List<Lap> _laps;
private TurnSetup[] _turnSetups;
@@ -63,8 +63,6 @@
protected CircuitBase(){
initWatchers();
- mLaps = new ArrayList<Lap>();
- addLaps();
}
@Override
@@ -82,7 +80,7 @@
* public official name for reporting
*/
@Override
- public final String name(){
+ public String name(){
String name = internalName();
return name.substring(0,1).toUpperCase() + name.substring(1);
}
@@ -91,11 +89,19 @@
* internal name for BenchmarkSettings.properties
*/
@Override
- public final String internalName(){
- String name = this.getClass().getName();
+ public String internalName(){
+ String name = className();
int pos = name.lastIndexOf(".");
return name.substring(pos + 1).toLowerCase();
}
+
+ protected String className() {
+ return circuitClass().getName();
+ }
+
+ protected Class<?> circuitClass() {
+ return this.getClass();
+ }
/**
* describes the intent of this circuit, what it wants to test
@@ -107,7 +113,7 @@
* @return the driver class needed to run on this Circuit
*/
@Override
- public abstract Class<? extends DriverBase> requiredDriver();
+ public abstract Class<?> requiredDriver();
/**
* @return the methods that are intended to be run
@@ -115,7 +121,7 @@
protected abstract void addLaps();
protected void add(Lap lap){
- mLaps.add(lap);
+ _laps.add(lap);
lap.circuit(this);
}
@@ -129,7 +135,11 @@
@Override
public List<Lap> laps() {
- return Collections.unmodifiableList(mLaps);
+ if(_laps == null){
+ _laps = new ArrayList<Lap>();
+ addLaps();
+ }
+ return _laps;
}
/**
@@ -162,7 +172,7 @@
prepareDriverToRunLaps(car, driver, setup);
- for(Lap lap : mLaps) {
+ for(Lap lap : laps()) {
if(driver.canRunLap(lap)){
@@ -242,6 +252,8 @@
}
}
+ MemoryUtil.gc();
+
// _memoryWatcher.start();
_timeWatcher.start();
@@ -320,7 +332,7 @@
@Override
public void runLapsBefore(Lap lap, TurnSetup turnSetup, DriverBase driver, Car car) {
prepareDriverToRunLaps(car, driver, turnSetup);
- for (Lap currentLap : mLaps) {
+ for (Lap currentLap : laps()) {
if(currentLap == lap){
return;
}
Added: trunk/polepos/src/org/polepos/framework/CircuitDescription.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/CircuitDescription.java (rev 0)
+++ trunk/polepos/src/org/polepos/framework/CircuitDescription.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,30 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+
+package org.polepos.framework;
+
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface CircuitDescription {
+
+ String value();
+
+}
Property changes on: trunk/polepos/src/org/polepos/framework/CircuitDescription.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/polepos/src/org/polepos/framework/CodeBlock.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/CodeBlock.java (rev 0)
+++ trunk/polepos/src/org/polepos/framework/CodeBlock.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,27 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+
+package org.polepos.framework;
+
+public interface CodeBlock <T> {
+
+ public void apply(T obj);
+
+}
Property changes on: trunk/polepos/src/org/polepos/framework/CodeBlock.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/polepos/src/org/polepos/framework/ConcurrencyCircuit.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/ConcurrencyCircuit.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/framework/ConcurrencyCircuit.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -77,7 +77,7 @@
}
@Override
- public Class<? extends DriverBase> requiredDriver() {
+ public Class<?> requiredDriver() {
return _delegate.requiredDriver();
}
Modified: trunk/polepos/src/org/polepos/framework/ConcurrentDriver.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/ConcurrentDriver.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/framework/ConcurrentDriver.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -46,6 +46,7 @@
_drivers[0] = _masterDriver;
for (int i = 1; i < threadCount; i++) {
_drivers[i] = _masterDriver.clone();
+ _drivers[i].bulkId(i);
}
}
Modified: trunk/polepos/src/org/polepos/framework/DriverBase.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/DriverBase.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/framework/DriverBase.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -31,8 +31,16 @@
private TurnSetup mSetup;
- private long mCheckSum;
+ private long _checkSum;
+
+ private int _bulkId;
+ private int _testId;
+
+ private int _objectCount;
+
+ private int _commitInterval;
+
protected final Car car(){
return mCar;
}
@@ -44,7 +52,7 @@
public void takeSeatIn( Car car, TurnSetup setup ) throws CarMotorFailureException{
mCar = car;
mSetup = setup;
- mCheckSum = 0;
+ _checkSum = 0;
}
/**
@@ -66,17 +74,21 @@
protected TurnSetup setup(){
return mSetup;
}
+
+ public void addToCheckSum(CheckSummable checkSummable){
+ addToCheckSum(checkSummable.checkSum());
+ }
/**
* Collecting a checksum to make sure every team does a complete job
*/
public synchronized void addToCheckSum(long l){
- mCheckSum += l;
+ _checkSum += l;
}
@Override
public long checkSum(){
- return mCheckSum;
+ return _checkSum;
}
public DriverBase clone(){
@@ -140,5 +152,51 @@
}
+ public void bulkId(int id) {
+ _bulkId = id;
+ }
+
+ protected void initializeTestId(int count) {
+ _objectCount = count;
+ _testId = _bulkId * count;
+ _commitInterval = setup().getCommitInterval();
+ }
+
+ protected void initializeTestIdD(int count) {
+ _objectCount = count;
+ _testId = _bulkId * count;
+ _commitInterval = setup().getCommitInterval();
+ }
+
+ protected int nextTestId(){
+ _objectCount--;
+ if(_objectCount < 0) {
+ outOfObjectCount();
+ }
+ return ++_testId;
+ }
+
+ private void outOfObjectCount() {
+ throw new IllegalStateException(" Out of _objectCount. Did you call initializeTestId ?");
+ }
+
+ protected int objectCount() {
+ return setup().getObjectCount();
+ }
+
+ protected boolean doCommit(){
+ if(_objectCount == 0){
+ return true;
+ }
+ if(_objectCount < 0){
+ outOfObjectCount();
+ }
+ return (_objectCount % _commitInterval) == 0;
+ }
+
+ protected boolean hasMoreTestIds() {
+ return _objectCount > 0;
+ }
+
}
Added: trunk/polepos/src/org/polepos/framework/Order.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/Order.java (rev 0)
+++ trunk/polepos/src/org/polepos/framework/Order.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,30 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+
+package org.polepos.framework;
+
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Order {
+
+ int value();
+
+}
Property changes on: trunk/polepos/src/org/polepos/framework/Order.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/polepos/src/org/polepos/framework/ReflectiveCircuitBase.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/ReflectiveCircuitBase.java (rev 0)
+++ trunk/polepos/src/org/polepos/framework/ReflectiveCircuitBase.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,74 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+
+package org.polepos.framework;
+
+import java.lang.reflect.*;
+import java.util.*;
+
+
+public class ReflectiveCircuitBase extends CircuitBase {
+
+ private final Class<?> _driverClass;
+
+ public ReflectiveCircuitBase(Class<?> driverClass) {
+ _driverClass = driverClass;
+ }
+
+ @Override
+ protected void addLaps() {
+ Method[] declaredMethods = _driverClass.getDeclaredMethods();
+ Arrays.sort(declaredMethods,new Comparator<Method>() {
+ @Override
+ public int compare(Method m1, Method m2) {
+ Order annotation1 = m1.getAnnotation(Order.class);
+ int order1 = annotation1.value();
+ Order annotation2 = m2.getAnnotation(Order.class);
+ int order2 = annotation2.value();
+ return order1 - order2;
+ }
+ });
+
+ for (Method method : declaredMethods) {
+ add(new Lap(method.getName()));
+ }
+
+ }
+
+ @Override
+ public String description() {
+ CircuitDescription annotation = _driverClass.getAnnotation(CircuitDescription.class);
+ if(annotation == null){
+ throw new IllegalStateException("Class " + _driverClass.getName()+ " has to be annotated with " + CircuitDescription.class.getName());
+ }
+ return annotation.value();
+ }
+
+ @Override
+ public Class<?> requiredDriver() {
+ return _driverClass;
+ }
+
+ @Override
+ protected Class<?> circuitClass() {
+ return _driverClass;
+ }
+
+}
Property changes on: trunk/polepos/src/org/polepos/framework/ReflectiveCircuitBase.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/polepos/src/org/polepos/reporters/Graph.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/Graph.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/reporters/Graph.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -28,7 +28,7 @@
private final List<TeamCar>teamCars;
private final List<TurnSetup> setups;
- private final Map<ResultsKey,Result> results;
+ private final Map<TurnCombination,Result> results;
private final Circuit circuit;
private final Lap lap;
@@ -36,14 +36,14 @@
public Graph(Result result){
teamCars= new ArrayList<TeamCar>();
setups=new ArrayList<TurnSetup>();
- results=new HashMap<ResultsKey,Result>();
+ results=new HashMap<TurnCombination,Result>();
circuit = result.getCircuit();
lap = result.getLap();
}
public void addResult(TeamCar teamCar, Result result) {
TurnSetup setup = result.getSetup();
- results.put(new ResultsKey(teamCar,setup),result);
+ results.put(new TurnCombination(teamCar,setup),result);
if(!teamCars.contains(teamCar)) {
teamCars.add(teamCar);
}
@@ -70,13 +70,13 @@
for (TeamCar teamCar: teamCars()){
if(first){
- Result res = results.get(new ResultsKey(teamCar,setup));
+ Result res = results.get(new TurnCombination(teamCar,setup));
if(res != null){
checkSum = res.getCheckSum();
first = false;
}
} else{
- Result res = results.get(new ResultsKey(teamCar,setup));
+ Result res = results.get(new TurnCombination(teamCar,setup));
if(res != null){
if(checkSum != res.getCheckSum()){
System.err.println("Inconsistent checksum for " + res.getTeam().name() + " in " + circuit.name() + ":" + lap.name());
@@ -97,7 +97,11 @@
}
public final long timeFor(TeamCar teamCar, TurnSetup setup) {
- Result res = results.get(new ResultsKey(teamCar,setup));
+ return timeFor(new TurnCombination(teamCar,setup));
+ }
+
+ public final long timeFor(TurnCombination turnCombination) {
+ Result res = results.get(turnCombination);
if(res == null){
return Integer.MAX_VALUE;
}
@@ -105,7 +109,7 @@
}
public final long memoryFor(TeamCar teamCar, TurnSetup setup) {
- Result res = results.get(new ResultsKey(teamCar,setup));
+ Result res = results.get(new TurnCombination(teamCar,setup));
if(res == null){
return Integer.MAX_VALUE;
}
@@ -113,19 +117,19 @@
}
public final long sizeFor(TeamCar teamCar, TurnSetup setup) {
- Result res = results.get(new ResultsKey(teamCar,setup));
+ Result res = results.get(new TurnCombination(teamCar,setup));
if(res == null){
return Integer.MAX_VALUE;
}
return res.getDatabaseSize();
}
- private class ResultsKey {
+ class TurnCombination {
final TeamCar teamCar;
final TurnSetup setup;
- public ResultsKey(TeamCar teamCar, TurnSetup setup) {
+ public TurnCombination(TeamCar teamCar, TurnSetup setup) {
this.teamCar = teamCar;
this.setup = setup;
}
@@ -138,7 +142,7 @@
if(obj==null||obj.getClass()!=getClass()) {
return false;
}
- ResultsKey key=(ResultsKey)obj;
+ TurnCombination key=(TurnCombination)obj;
return teamCar.equals(key.teamCar) && setup.equals(key.setup);
}
@@ -147,4 +151,12 @@
return teamCar.hashCode() + setup.hashCode();
}
}
+
+ public void forEachTurnCombination(CodeBlock<TurnCombination> codeBlock) {
+ for(TeamCar teamCar : teamCars()) {
+ for(TurnSetup setup : setups()) {
+ codeBlock.apply(new TurnCombination(teamCar, setup));
+ }
+ }
+ }
}
Modified: trunk/polepos/src/org/polepos/reporters/GraphReporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/GraphReporter.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/reporters/GraphReporter.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -132,9 +132,12 @@
protected abstract void report(Graph graph);
protected abstract void finish(List <TeamCar> cars);
- protected JFreeChart createTimeChart(Graph graph) {
- CategoryDataset dataset = createTimeDataset(graph);
- return createChart(dataset, ReporterConstants.TIME_CHART_LEGEND);
+ protected List<JFreeChart> createTimeChart(Graph graph) {
+ List<JFreeChart> list = new ArrayList<JFreeChart>();
+ // list.add(createChart(createInverseLogTimeDataset(graph), ReporterConstants.OLD_LOGARITHMIC_TIME_CHART_LEGEND));
+ list.add(createOrderOfMagnitudeChart(createBaseLineTimeDataset(graph, true), ReporterConstants.TIME_CHART_LEGEND));
+ // list.add(createChart(createBaseLineTimeDataset(graph, false), ReporterConstants.TIME_CHART_LEGEND));
+ return list;
}
protected JFreeChart createMemoryChart(Graph graph) {
@@ -142,7 +145,7 @@
return createChart(dataset, ReporterConstants.MEMORY_CHART_LEGEND);
}
- public CategoryDataset createTimeDataset(Graph graph) {
+ public CategoryDataset createInverseLogTimeDataset(Graph graph) {
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
int currentTimeIndex = timeIndex;
for(TeamCar teamCar : graph.teamCars()) {
@@ -158,6 +161,50 @@
}
return dataset;
}
+
+ public CategoryDataset createBaseLineTimeDataset(final Graph graph, boolean bestOnTop) {
+ DefaultCategoryDataset dataset=new DefaultCategoryDataset();
+
+ int setupCount = graph.setups().size();
+ double[] averages = new double[setupCount];
+
+ int i = 0;
+ for(TurnSetup setup : graph.setups()) {
+ double sum = 0;
+ for(TeamCar teamCar : graph.teamCars()) {
+ double time = graph.timeFor(teamCar,setup);
+ sum+=time;
+ }
+ averages[i] = sum/graph.teamCars().size();
+ i++;
+ }
+
+ for(TeamCar teamCar : graph.teamCars()) {
+ i = 0;
+ for(TurnSetup setup : graph.setups()) {
+ String legend = "" + setup.getMostImportantValueForGraph();
+ double time = graph.timeFor(teamCar,setup);
+ double graphValue = logarithmicMagnitudeGraphValue(averages[i], time, bestOnTop);
+ dataset.addValue(graphValue,teamCar.toString(),legend);
+ i++;
+ }
+ }
+ return dataset;
+ }
+
+ double logarithmicMagnitudeGraphValue(double average, double time, boolean bestOnTop){
+ if(average == time){
+ return 0;
+ }
+ if(time > average){
+ double magnitude = time / average;
+ magnitude = Math.log10(magnitude);
+ return bestOnTop ? -magnitude : magnitude;
+ }
+ double magnitude = average / time;
+ magnitude = Math.log10(magnitude);
+ return bestOnTop ? magnitude : -magnitude;
+ }
private CategoryDataset createMemoryDataset(Graph graph) {
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
@@ -208,4 +255,27 @@
chart.setLegend(legend);
return chart;
}
+
+ public JFreeChart createOrderOfMagnitudeChart(CategoryDataset dataset, String legendText) {
+ CategoryAxis categoryAxis = new CategoryAxis("");
+ categoryAxis.setLabelFont(ReporterConstants.CATEGORY_LABEL_FONT);
+ categoryAxis.setTickLabelFont(ReporterConstants.CATEGORY_TICKLABEL_FONT);
+ String yLegendText = legendText;
+ ValueAxis valueAxis = new NumberAxis(yLegendText);
+ valueAxis.setLabelFont(ReporterConstants.VALUE_LABEL_FONT);
+ valueAxis.setTickLabelFont(ReporterConstants.VALUE_TICKLABEL_FONT);
+ LineAndShapeRenderer renderer = new LineAndShapeRenderer(true, false);
+ CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer);
+ plot.setOrientation(PlotOrientation.VERTICAL);
+ plot.getRangeAxis().centerRange(0);
+ plot.getRangeAxis().setRange(-3, 3);
+ JFreeChart chart = new JFreeChart("", ReporterConstants.TITLE_FONT, plot, false);
+ StandardLegend legend = new StandardLegend();
+ legend.setItemFont(ReporterConstants.LEGEND_FONT);
+ legend.setMargin(new RectangleInsets(1.0, 1.0, 1.0, 1.0));
+ legend.setBackgroundPaint(Color.white);
+ chart.setLegend(legend);
+ return chart;
+ }
+
}
Modified: trunk/polepos/src/org/polepos/reporters/HTMLReporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/HTMLReporter.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/reporters/HTMLReporter.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -128,7 +128,7 @@
}
private void renderLapGraph(Graph graph) throws IOException {
- JFreeChart timeChart = createTimeChart(graph);
+ JFreeChart timeChart = createTimeChart(graph).get(0);
BufferedImage timeImage = timeChart.createBufferedImage(750, 500);
ImageIO.write(timeImage, "jpg", new File(outdir, lapFilePrefix()
+ "_time.jpg"));
Modified: trunk/polepos/src/org/polepos/reporters/PDFReporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/PDFReporter.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/reporters/PDFReporter.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -59,11 +59,16 @@
_circuit = circuit;
}
- JFreeChart timeChart = createTimeChart(graph);
- // timeChart.setBackgroundPaint(null);
+ List<JFreeChart>timeCharts = createTimeChart(graph);
try {
renderTimeTable(graph);
- _pdfData.add(renderChart(timeChart));
+ for (JFreeChart timeChart : timeCharts) {
+
+ // white if you like
+ // timeChart.setBackgroundPaint(null);
+
+ _pdfData.add(renderChart(timeChart));
+ }
_pdfData.add(new NewPageLabel());
} catch (Exception e) {
e.printStackTrace();
Modified: trunk/polepos/src/org/polepos/reporters/ReporterConstants.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/ReporterConstants.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/reporters/ReporterConstants.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -26,7 +26,8 @@
protected final static String WEBSITE="http://www.polepos.org";
public final static int TIME = 1;
public final static int MEMORY = 2;
- public static final String TIME_CHART_LEGEND = " 1 / log(t + 2) better >";
+ public static final String OLD_LOGARITHMIC_TIME_CHART_LEGEND = " 1 / log(t + 2) better >";
+ public static final String TIME_CHART_LEGEND = " 10 ^ x average better >";
public static final String MEMORY_CHART_LEGEND = " 1 / log(m + 2) better >";
public static final String SIZE_CHART_LEGEND = " 1 / log(b + 2) better >";
public static final String TIME_OVERVIEW_LEGEND = "Time Overview\n\n";
Modified: trunk/polepos/src/org/polepos/teams/db4o/BahrainDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/BahrainDb4o.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/teams/db4o/BahrainDb4o.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -45,13 +45,11 @@
int commitctr = 0;
int count = setup().getObjectCount();
int commitInterval = setup().getCommitInterval();
- begin();
for ( int i = 1; i <= count; i++ ){
store( new Pilot( "Pilot_" + i, "Jonny_" + i, i , i ) );
if ( commitInterval> 0 && ++commitctr >= commitInterval ){
commitctr = 0;
commit();
- begin();
}
addToCheckSum(i);
}
@@ -114,11 +112,17 @@
}
public void delete() {
+ int commitInterval = setup().getCommitInterval();
+ int commitctr = 0;
Query q = db().query();
q.constrain( Pilot.class );
ObjectSet deleteset = q.execute();
while ( deleteset.hasNext() ){
db().delete( deleteset.next() );
+ if ( commitInterval> 0 && ++commitctr >= commitInterval ){
+ commitctr = 0;
+ commit();
+ }
addToCheckSum(1);
}
db().commit();
Modified: trunk/polepos/src/org/polepos/teams/db4o/Db4oDriver.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/Db4oDriver.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/teams/db4o/Db4oDriver.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -85,12 +85,18 @@
}
protected void store(Object obj) {
+ // The new db4o interface is ObjectContainer#store();
+ // We use #set() here for compatibility with old db4o
+ // versions so we can also run against these.
_container.set(obj);
}
protected void purge(Object obj) {
_container.purge(obj);
}
+
+ protected void delete(Object obj) {
+ _container.delete(obj);
+ }
-
}
Modified: trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -49,6 +49,9 @@
}
private void addDrivers(){
+
+ addDriver(new FlatObjectDb4o());
+
addDriver(new MelbourneDb4o());
addDriver(new SepangDb4o());
addDriver(new BahrainDb4o());
Added: trunk/polepos/src/org/polepos/teams/db4o/FlatObjectDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/FlatObjectDb4o.java (rev 0)
+++ trunk/polepos/src/org/polepos/teams/db4o/FlatObjectDb4o.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,100 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+package org.polepos.teams.db4o;
+
+import org.polepos.circuits.flatobject.*;
+import org.polepos.data.*;
+
+import com.db4o.*;
+import com.db4o.config.*;
+import com.db4o.query.*;
+
+
+public class FlatObjectDb4o extends Db4oDriver implements FlatObject{
+
+ @Override
+ public void configure(Configuration config) {
+ indexField(config, IndexedObject.class , "_int");
+ indexField(config, IndexedObject.class , "_string");
+ }
+
+ public void write(){
+ initializeTestId(objectCount());
+ while ( hasMoreTestIds()){
+ IndexedObject indexedObject = new IndexedObject(nextTestId());
+ store(indexedObject);
+ purge(indexedObject);
+ if(doCommit()){
+ commit();
+ }
+ addToCheckSum(indexedObject);
+ }
+ }
+
+ public void queryIndexedString() {
+ initializeTestId(setup().getSelectCount());
+ while(hasMoreTestIds()) {
+ Query q = db().query();
+ q.constrain( IndexedObject.class );
+ q.descend( "_string" ).constrain(IndexedObject.queryString(nextTestId()));
+ doQuery(q);
+ }
+ }
+
+ public void queryIndexedInt() {
+ initializeTestId(setup().getSelectCount());
+ while(hasMoreTestIds()) {
+ Query q = db().query();
+ q.constrain( IndexedObject.class );
+ q.descend( "_int" ).constrain(nextTestId());
+ doQuery(q);
+ }
+ }
+
+ public void update() {
+ initializeTestId(setup().getUpdateCount());
+ while(hasMoreTestIds()) {
+ Query q = db().query();
+ q.constrain( IndexedObject.class );
+ q.descend("_int").constrain(nextTestId());
+ ObjectSet<IndexedObject> objectSet = q.execute();
+ IndexedObject indexedObject = objectSet.next();
+ indexedObject.updateString();
+ store(indexedObject);
+ addToCheckSum(indexedObject);
+ }
+ commit();
+ }
+
+ public void delete() {
+ initializeTestId(setup().getUpdateCount());
+ while(hasMoreTestIds()) {
+ Query q = db().query();
+ q.constrain( IndexedObject.class );
+ q.descend("_int").constrain(nextTestId());
+ ObjectSet<IndexedObject> objectSet = q.execute();
+ IndexedObject indexedObject = objectSet.next();
+ addToCheckSum(indexedObject);
+ delete(indexedObject);
+ }
+ commit();
+ }
+
+}
Property changes on: trunk/polepos/src/org/polepos/teams/db4o/FlatObjectDb4o.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/polepos/src/org/polepos/teams/hibernate/FlatObjectHibernate.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/FlatObjectHibernate.java (rev 0)
+++ trunk/polepos/src/org/polepos/teams/hibernate/FlatObjectHibernate.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -0,0 +1,89 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+package org.polepos.teams.hibernate;
+
+
+
+import org.hibernate.*;
+import org.polepos.circuits.flatobject.*;
+import org.polepos.data.*;
+import org.polepos.teams.hibernate.data.*;
+
+
+public class FlatObjectHibernate extends HibernateDriver implements FlatObject{
+
+ private final String FROM = "from org.polepos.teams.hibernate.data.HibernateIndexedObject";
+
+ public void write(){
+ Transaction tx = begin();
+ initializeTestId(objectCount());
+ while ( hasMoreTestIds()){
+ HibernateIndexedObject indexedObject = new HibernateIndexedObject(nextTestId());
+ store(indexedObject);
+ if(doCommit()){
+ tx.commit();
+ tx.begin();
+ }
+ addToCheckSum(indexedObject);
+ }
+ }
+
+ public void queryIndexedString() {
+ initializeTestId(setup().getSelectCount());
+ while(hasMoreTestIds()) {
+ doSingleResultQuery( FROM + " where String='" + IndexedObject.queryString(nextTestId()) + "'" );
+ }
+ }
+
+ public void queryIndexedInt() {
+ initializeTestId(setup().getSelectCount());
+ while(hasMoreTestIds()) {
+ doSingleResultQuery(selectFromNextTestId());
+ }
+ }
+
+ private String selectFromNextTestId() {
+ return FROM + " where Int=" + nextTestId();
+ }
+
+ public void update() {
+ Transaction tx = begin();
+ initializeTestIdD(setup().getUpdateCount());
+ while(hasMoreTestIds()) {
+ HibernateIndexedObject indexedObject = (HibernateIndexedObject) db().iterate(selectFromNextTestId()).next();
+ indexedObject.updateString();
+ store(indexedObject);
+ addToCheckSum(indexedObject);
+ }
+ tx.commit();
+ }
+
+ public void delete() {
+ Transaction tx = begin();
+ initializeTestId(setup().getUpdateCount());
+ while(hasMoreTestIds()) {
+ HibernateIndexedObject indexedObject = (HibernateIndexedObject) db().iterate(selectFromNextTestId()).next();
+ addToCheckSum(indexedObject);
+ delete(indexedObject);
+ }
+ tx.commit();
+ }
+
+}
Property changes on: trunk/polepos/src/org/polepos/teams/hibernate/FlatObjectHibernate.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/polepos/src/org/polepos/teams/hibernate/HibernateCar.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/HibernateCar.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/teams/hibernate/HibernateCar.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -26,13 +26,6 @@
import org.hibernate.classic.Session;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.polepos.framework.*;
-import org.polepos.teams.hibernate.data.HB0;
-import org.polepos.teams.hibernate.data.HN1;
-import org.polepos.teams.hibernate.data.HibernateIndexedPilot;
-import org.polepos.teams.hibernate.data.HibernateLightObject;
-import org.polepos.teams.hibernate.data.HibernateListHolder;
-import org.polepos.teams.hibernate.data.HibernatePilot;
-import org.polepos.teams.hibernate.data.HibernateTree;
import org.polepos.teams.jdbc.Jdbc;
/**
@@ -90,14 +83,10 @@
{
try
{
- Configuration cfg = new Configuration()
- .addClass( HibernatePilot.class )
- .addClass( HibernateTree.class )
- .addClass( HibernateIndexedPilot.class )
- .addClass(HB0.class)
- .addClass( HibernateLightObject.class)
- .addClass( HibernateListHolder.class)
- .addClass( HN1.class);
+ Configuration cfg = new Configuration();
+ for (Class clazz : HibernateTeam.persistentClasses()) {
+ cfg.addClass(clazz);
+ }
try{
Class.forName( Jdbc.settings().getDriverClass( mDBType ) ).newInstance();
@@ -145,8 +134,6 @@
cfg.setProperty("hibernate.connection.writedelay", "0");
-
-
SessionFactory factory = cfg.buildSessionFactory();
new SchemaExport(cfg).create(true, true);
return factory;
Modified: trunk/polepos/src/org/polepos/teams/hibernate/HibernateDriver.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/HibernateDriver.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/teams/hibernate/HibernateDriver.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -21,7 +21,7 @@
import java.util.Iterator;
-import org.hibernate.HibernateException;
+import org.hibernate.*;
import org.hibernate.classic.Session;
import org.polepos.framework.Car;
import org.polepos.framework.CarMotorFailureException;
@@ -29,12 +29,10 @@
import org.polepos.framework.DriverBase;
import org.polepos.framework.TurnSetup;
-public abstract class HibernateDriver extends DriverBase
-{
+public abstract class HibernateDriver extends DriverBase{
private Session _session;
-
public void takeSeatIn( Car car, TurnSetup setup ) throws CarMotorFailureException{
super.takeSeatIn(car, setup);
}
@@ -76,11 +74,24 @@
Iterator it = db().iterate( query );
Object o = (Object) it.next();
if(o instanceof CheckSummable){
- addToCheckSum(((CheckSummable)o).checkSum());
+ addToCheckSum((CheckSummable)o);
}
}
catch ( HibernateException hex ){
hex.printStackTrace();
}
}
+
+ protected Transaction begin() {
+ return db().beginTransaction();
+ }
+
+ protected void store(Object obj) {
+ db().save(obj);
+ }
+
+ protected void delete(Object obj) {
+ db().delete(obj);
+ }
+
}
Modified: trunk/polepos/src/org/polepos/teams/hibernate/HibernateTeam.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/HibernateTeam.java 2010-06-23 09:37:56 UTC (rev 132)
+++ trunk/polepos/src/org/polepos/teams/hibernate/HibernateTeam.java 2010-06-24 18:16:24 UTC (rev 133)
@@ -19,73 +19,65 @@
package org.polepos.teams.hibernate;
-import org.hibernate.Query;
import org.hibernate.Transaction;
import org.hibernate.classic.Session;
import org.polepos.framework.Car;
import org.polepos.framework.CarMotorFailureException;
import org.polepos.framework.DriverBase;
import org.polepos.framework.Team;
-import org.polepos.teams.hibernate.data.HB4;
-import org.polepos.teams.hibernate.data.HN1;
-import org.polepos.teams.hibernate.data.HibernateIndexedPilot;
-import org.polepos.teams.hibernate.data.HibernateLightObject;
-import org.polepos.teams.hibernate.data.HibernateListHolder;
-import org.polepos.teams.hibernate.data.HibernatePilot;
-import org.polepos.teams.hibernate.data.HibernateTree;
+import org.polepos.teams.hibernate.data.*;
import org.polepos.teams.jdbc.Jdbc;
+public class HibernateTeam extends Team {
-public class HibernateTeam extends Team{
-
- private final Car[] mCars;
-
- public HibernateTeam(){
- String[] dbs = Jdbc.settings().getHibernateTypes();
- mCars = new Car[ dbs.length ];
- for( int i = 0; i < dbs.length; i++ ){
- mCars[ i ] = new HibernateCar(this, dbs[ i ] );
- }
- }
+ private final Car[] mCars;
- public String name(){
+ public HibernateTeam() {
+ String[] dbs = Jdbc.settings().getHibernateTypes();
+ mCars = new Car[dbs.length];
+ for (int i = 0; i < dbs.length; i++) {
+ mCars[i] = new HibernateCar(this, dbs[i]);
+ }
+ }
+
+ public String name() {
return "Hibernate";
}
- @Override
- public String description() {
- return "relational persistence for idiomatic Java";
- }
+ @Override
+ public String description() {
+ return "relational persistence for idiomatic Java";
+ }
- public String databaseFile() {
- // not supported yet
- return null;
- }
+ public String databaseFile() {
+ // not supported yet
+ return null;
+ }
-
- public Car[] cars(){
+ public Car[] cars() {
return mCars;
}
-
- public DriverBase[] drivers() {
- return new DriverBase[]{
- new MelbourneHibernate(),
- new SepangHibernate(),
- new BahrainHibernate(),
- new ImolaHibernate(),
- new BarcelonaHibernate(),
- new MonacoHibernate(),
- new MontrealHibernate(),
- new NurburgringHibernate(),
- };
- }
-
- @Override
- public String website() {
- return "http://www.hibernate.org";
- }
-
+
+ public DriverBase[] drivers() {
+ return new DriverBase[] {
+ new FlatObjectHibernate(),
+ new MelbourneHibernate(),
+ new SepangHibernate(),
+ new BahrainHibernate(),
+ new ImolaHibernate(),
+ new BarcelonaHibernate(),
+ new MonacoHibernate(),
+ new MontrealHibernate(),
+ new NurburgringHibernate(),
+ };
+ }
+
@Override
+ public String website() {
+ return "http://www.hibernate.org";
+ }
+
+ @Override
public void setUp() {
for(int i = 0; i < mCars.length;i++){
Session session = null;
@@ -94,37 +86,30 @@
} catch (CarMotorFailureException e) {
e.printStackTrace();
}
- Transaction txn = session.beginTransaction();
- session.delete("from " + HB4.class.getName());
- txn.commit();
-
- txn = session.beginTransaction();
- session.delete("from " + HibernateIndexedPilot.class.getName());
- txn.commit();
-
- txn = session.beginTransaction();
- session.delete("from " + HibernatePilot.class.getName());
- txn.commit();
-
- txn = session.beginTransaction();
- session.delete("from " + HibernateTree.class.getName());
- txn.commit();
-
- txn = session.beginTransaction();
- sessi...
[truncated message content] |