Revision: 95
http://polepos.svn.sourceforge.net/polepos/?rev=95&view=rev
Author: patrickroemer
Date: 2010-03-02 13:32:00 +0000 (Tue, 02 Mar 2010)
Log Message:
-----------
sneaked in multiple runs per turn (to be refactored), extracted db4o engine, updated db4o jar
Modified Paths:
--------------
trunk/polepos/.classpath
trunk/polepos/src/org/polepos/Db4oVersionRace.java
trunk/polepos/src/org/polepos/framework/Circuit.java
trunk/polepos/src/org/polepos/framework/SetupProperty.java
trunk/polepos/src/org/polepos/framework/TurnSetup.java
trunk/polepos/src/org/polepos/runner/db4o/AbstractDb4oVersionsRaceRunner.java
trunk/polepos/src/org/polepos/teams/db4o/BahrainDb4o.java
trunk/polepos/src/org/polepos/teams/db4o/BarcelonaDb4o.java
trunk/polepos/src/org/polepos/teams/db4o/Db4oCar.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/db4o/ImolaDb4o.java
trunk/polepos/src/org/polepos/teams/db4o/MelbourneDb4o.java
trunk/polepos/src/org/polepos/teams/db4o/MonacoDb4o.java
trunk/polepos/src/org/polepos/teams/db4o/MontrealDb4o.java
trunk/polepos/src/org/polepos/teams/db4o/NurburgringDb4o.java
trunk/polepos/src/org/polepos/teams/db4o/SepangDb4o.java
trunk/polepos/src/org/polepos/teams/jdbc/JdbcCar.java
Added Paths:
-----------
trunk/polepos/lib/db4o-7.13.136.14180-all-java5.jar
trunk/polepos/src/org/polepos/runner/db4o/Db4oEngine.java
Removed Paths:
-------------
trunk/polepos/lib/db4o-6.4-java5.jar
trunk/polepos/lib/db4o-7.4.79.12493-java5.jar
trunk/polepos/lib/db4o-7.8.79.12525-all-java5.jar
Modified: trunk/polepos/.classpath
===================================================================
--- trunk/polepos/.classpath 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/.classpath 2010-03-02 13:32:00 UTC (rev 95)
@@ -1,37 +1,37 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="lib" path="lib/mysql-connector-java-3.1.6-bin.jar"/>
- <classpathentry kind="lib" path="lib/hibernate-2.1/cglib-full-2.0.2.jar"/>
- <classpathentry kind="lib" path="lib/hibernate-2.1/commons-collections-2.1.1.jar"/>
- <classpathentry kind="lib" path="lib/hibernate-2.1/commons-lang-1.0.1.jar"/>
- <classpathentry kind="lib" path="lib/hibernate-2.1/commons-logging-1.0.4.jar"/>
- <classpathentry kind="lib" path="lib/hibernate-2.1/dom4j-1.4.jar"/>
- <classpathentry kind="lib" path="lib/hibernate-2.1/ehcache-0.9.jar"/>
- <classpathentry kind="lib" path="lib/hibernate-2.1/hibernate2.jar" sourcepath="C:/Java/hibernate-2.1/src"/>
- <classpathentry kind="lib" path="lib/hibernate-2.1/jta.jar"/>
- <classpathentry kind="lib" path="lib/hibernate-2.1/odmg-3.0.jar"/>
- <classpathentry kind="lib" path="lib/hibernate-2.1/xalan-2.4.0.jar"/>
- <classpathentry kind="lib" path="lib/hibernate-2.1/xerces-2.4.0.jar"/>
- <classpathentry kind="lib" path="lib/hibernate-2.1/xml-apis.jar"/>
- <classpathentry kind="lib" path="lib/sqlitejdbc-v038-native.jar"/>
- <classpathentry kind="var" path="JUNIT_HOME/junit.jar" sourcepath="/ECLIPSE_HOME/plugins/org.eclipse.jdt.source_3.1.0/src/org.junit_3.8.1/junitsrc.zip"/>
- <classpathentry kind="lib" path="lib/derby.jar"/>
- <classpathentry kind="lib" path="lib/gnu-regexp-1.1.4.jar"/>
- <classpathentry kind="lib" path="lib/hsqldb.jar"/>
- <classpathentry kind="lib" path="lib/mckoidb.jar"/>
- <classpathentry kind="lib" path="lib/mkjdbc.jar"/>
- <classpathentry kind="lib" path="lib/graph/gnujaxp.jar"/>
- <classpathentry kind="lib" path="lib/graph/itext-1.2.jar"/>
- <classpathentry kind="lib" path="lib/graph/jcommon-1.0.0-pre2.jar"/>
- <classpathentry kind="lib" path="lib/graph/jfreechart-1.0.0-pre2.jar"/>
- <classpathentry kind="lib" path="lib/log4j-1.2.8.jar"/>
- <classpathentry kind="lib" path="lib/graph/velocity-dep-1.4.jar"/>
- <classpathentry kind="lib" path="lib/jdo.jar"/>
- <classpathentry kind="lib" path="lib/ant.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="lib" path="lib/gna-jorm-runtime-05.07.jar"/>
- <classpathentry kind="lib" path="lib/javassist.jar"/>
- <classpathentry kind="lib" path="lib/db4o-7.8.79.12525-all-java5.jar"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="lib" path="lib/mysql-connector-java-3.1.6-bin.jar"/>
+ <classpathentry kind="lib" path="lib/hibernate-2.1/cglib-full-2.0.2.jar"/>
+ <classpathentry kind="lib" path="lib/hibernate-2.1/commons-collections-2.1.1.jar"/>
+ <classpathentry kind="lib" path="lib/hibernate-2.1/commons-lang-1.0.1.jar"/>
+ <classpathentry kind="lib" path="lib/hibernate-2.1/commons-logging-1.0.4.jar"/>
+ <classpathentry kind="lib" path="lib/hibernate-2.1/dom4j-1.4.jar"/>
+ <classpathentry kind="lib" path="lib/hibernate-2.1/ehcache-0.9.jar"/>
+ <classpathentry kind="lib" path="lib/hibernate-2.1/hibernate2.jar" sourcepath="C:/Java/hibernate-2.1/src"/>
+ <classpathentry kind="lib" path="lib/hibernate-2.1/jta.jar"/>
+ <classpathentry kind="lib" path="lib/hibernate-2.1/odmg-3.0.jar"/>
+ <classpathentry kind="lib" path="lib/hibernate-2.1/xalan-2.4.0.jar"/>
+ <classpathentry kind="lib" path="lib/hibernate-2.1/xerces-2.4.0.jar"/>
+ <classpathentry kind="lib" path="lib/hibernate-2.1/xml-apis.jar"/>
+ <classpathentry kind="lib" path="lib/sqlitejdbc-v038-native.jar"/>
+ <classpathentry kind="var" path="JUNIT_HOME/junit.jar" sourcepath="/ECLIPSE_HOME/plugins/org.eclipse.jdt.source_3.1.0/src/org.junit_3.8.1/junitsrc.zip"/>
+ <classpathentry kind="lib" path="lib/derby.jar"/>
+ <classpathentry kind="lib" path="lib/gnu-regexp-1.1.4.jar"/>
+ <classpathentry kind="lib" path="lib/hsqldb.jar"/>
+ <classpathentry kind="lib" path="lib/mckoidb.jar"/>
+ <classpathentry kind="lib" path="lib/mkjdbc.jar"/>
+ <classpathentry kind="lib" path="lib/graph/gnujaxp.jar"/>
+ <classpathentry kind="lib" path="lib/graph/itext-1.2.jar"/>
+ <classpathentry kind="lib" path="lib/graph/jcommon-1.0.0-pre2.jar"/>
+ <classpathentry kind="lib" path="lib/graph/jfreechart-1.0.0-pre2.jar"/>
+ <classpathentry kind="lib" path="lib/log4j-1.2.8.jar"/>
+ <classpathentry kind="lib" path="lib/graph/velocity-dep-1.4.jar"/>
+ <classpathentry kind="lib" path="lib/jdo.jar"/>
+ <classpathentry kind="lib" path="lib/ant.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="lib" path="lib/gna-jorm-runtime-05.07.jar"/>
+ <classpathentry kind="lib" path="lib/javassist.jar"/>
+ <classpathentry kind="lib" path="lib/db4o-7.13.136.14180-all-java5.jar"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Deleted: trunk/polepos/lib/db4o-6.4-java5.jar
===================================================================
(Binary files differ)
Added: trunk/polepos/lib/db4o-7.13.136.14180-all-java5.jar
===================================================================
(Binary files differ)
Property changes on: trunk/polepos/lib/db4o-7.13.136.14180-all-java5.jar
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Deleted: trunk/polepos/lib/db4o-7.4.79.12493-java5.jar
===================================================================
(Binary files differ)
Deleted: trunk/polepos/lib/db4o-7.8.79.12525-all-java5.jar
===================================================================
(Binary files differ)
Modified: trunk/polepos/src/org/polepos/Db4oVersionRace.java
===================================================================
--- trunk/polepos/src/org/polepos/Db4oVersionRace.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/Db4oVersionRace.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -83,16 +83,16 @@
};
}
- public Driver[] drivers() {
+ public Driver[] drivers(Db4oEngine engine) {
return new Driver [] {
- new MelbourneDb4o(),
- new SepangDb4o(),
- new BahrainDb4o(),
- new ImolaDb4o(),
- new BarcelonaDb4o(),
- new MonacoDb4o(),
- new NurburgringDb4o(),
- new MontrealDb4o(),
+ new MelbourneDb4o(engine),
+ new SepangDb4o(engine),
+ new BahrainDb4o(engine),
+ new ImolaDb4o(engine),
+ new BarcelonaDb4o(engine),
+ new MonacoDb4o(engine),
+ new NurburgringDb4o(engine),
+ new MontrealDb4o(engine),
};
}
Modified: trunk/polepos/src/org/polepos/framework/Circuit.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/Circuit.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/framework/Circuit.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -30,7 +30,23 @@
*/
public abstract class Circuit{
- private final List<Lap> mLaps;
+ public static final String NUM_RUNS_PROPERTY_ID = "POLEPOS_NUM_RUNS";
+ public static final String MEMORY_USAGE_PROPERTY_ID = "POLEPOS_MEMORY_USAGE";
+
+ private final int _numRuns = Integer.parseInt(System.getProperty(NUM_RUNS_PROPERTY_ID, "1"));
+ private final MemoryUsage _memoryUsage = memoryUsage();
+
+ private static MemoryUsage memoryUsage() {
+ try {
+ return (MemoryUsage)Class.forName(System.getProperty(MEMORY_USAGE_PROPERTY_ID, SimpleMemoryUsage.class.getName())).newInstance();
+ }
+ catch (Exception exc) {
+ exc.printStackTrace();
+ return new SimpleMemoryUsage();
+ }
+ }
+
+ private final List<Lap> mLaps;
private TurnSetup[] mLapSetups;
@@ -111,7 +127,6 @@
* calling all the laps for all the lapSetups
*/
public TurnResult[] race( Team team, Car car, Driver driver){
-
TurnResult[] results = new TurnResult[ mLapSetups.length ];
int index = 0;
@@ -129,13 +144,25 @@
}
for(TurnSetup setup : mLapSetups) {
-
- TurnResult result = new TurnResult();
- results[index++] = result;
-
- team.setUp();
-
- try {
+ results[index++] = runTurn(team, car, driver, index, drivers, concurrent, setup);
+ }
+ return results;
+ }
+
+ private TurnResult runTurn(Team team, Car car, Driver driver, int index,
+ Driver[] drivers, boolean concurrent, TurnSetup setup) {
+
+ Map<Lap, Set<LapReading>> lapReadings = new HashMap<Lap, Set<LapReading>>();
+ for (Lap lap : laps()) {
+ if(lap.reportResult()) {
+ lapReadings.put(lap, new HashSet<LapReading>());
+ }
+ }
+ boolean warmUp = _numRuns > 1;
+ for (int runIdx = 0; runIdx < _numRuns; runIdx++) {
+ team.setUp();
+
+ try {
if (concurrent) {
for (int i = 0; i < drivers.length; ++i) {
drivers[i].takeSeatIn(car, setup);
@@ -144,121 +171,175 @@
driver.takeSeatIn(car, setup);
}
} catch (CarMotorFailureException e1) {
- e1.printStackTrace();
- break;
+ // FIXME reasonable exception handling
+ throw new RuntimeException("Circuit aborted", e1);
}
-
-
- boolean first = true;
-
- for(Lap lap : mLaps) {
-
-
- Method method = null;
-
- try {
- method = driver.getClass().getDeclaredMethod(lap.name(), (Class[])null);
- } catch (SecurityException e) {
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- }
-
-
- if( ! lap.hot() ){
- if(first){
- first = false;
- }else{
- if (concurrent) {
- for (Driver d : drivers) {
- d.backToPit();
- }
- } else {
- driver.backToPit();
- }
- }
-
- try {
- if (concurrent) {
- for (Driver d : drivers) {
- d.prepare();
- }
- } else {
- driver.prepare();
- }
- } catch (CarMotorFailureException e) {
- e.printStackTrace();
- }
- }
-
- RunLapThread[] threads = null;
- if(concurrent) {
- threads = new RunLapThread[drivers.length];
- for(int i = 0; i < drivers.length; ++i) {
- threads[i] = new RunLapThread(method, drivers[i]);
- }
- }
-
- // _memoryWatcher.start();
- _timeWatcher.start();
- _fileSizeWatcher.monitorFile(team.databaseFile());
- _fileSizeWatcher.start();
-
- try {
- if(concurrent) {
- for (RunLapThread t : threads) {
- t.start();
- }
- } else {
- method.invoke(driver, (Object[]) null);
- }
- } catch (Exception e) {
- System.err.println("Exception on calling method " + method);
- e.printStackTrace();
- }
-
- if(concurrent) {
- for (RunLapThread t : threads) {
- try {
- t.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
-
- _timeWatcher.stop();
- // _memoryWatcher.stop();
- _fileSizeWatcher.stop();
-
- if(lap.reportResult()){
- long time = (Long)_timeWatcher.value();
- // long memory = (Long) _memoryWatcher.value();
- long memory = MemoryUtil.usedMemory();
- long databaseSize = (Long) _fileSizeWatcher.value();
-
- result.report(new Result(this, team, lap, setup, index, time, memory, databaseSize, driver.checkSum()));
- }
- }
-
- if(concurrent) {
+
+
+ for(Lap lap : mLaps) {
+ LapReading lapReading = runLap(team, driver, drivers, concurrent, setup, lap);
+ if(!warmUp && lap.reportResult()) {
+ lapReadings.get(lap).add(lapReading);
+ }
+ }
+
+ // FIXME
+ if(concurrent) {
for (Driver d : drivers) {
d.backToPit();
}
} else {
driver.backToPit();
}
-
- team.tearDown();
- }
- driver.circuitCompleted();
- if(drivers != null){
- for (int i = 0; i < drivers.length; i++) {
+
+ tearDownTurn(team, driver, drivers);
+ warmUp = false;
+ }
+
+ TurnResult turnResult = new TurnResult();
+ for (Lap lap : laps()) {
+ if(!lap.reportResult()) {
+ continue;
+ }
+ long time = 0;
+ long memory = 0;
+ long fileSize = 0;
+ long checkSum = 0;
+ Set<LapReading> curReadings = lapReadings.get(lap);
+ for (LapReading curReading : curReadings) {
+ time += curReading.time;
+ memory += curReading.memory;
+ fileSize += curReading.fileSize;
+ checkSum += curReading.checkSum;
+ }
+ Result lapResult = new Result(this, team, lap, setup, index, time, memory, fileSize, checkSum);
+ turnResult.report(lapResult);
+ }
+ return turnResult;
+ }
+
+ private void tearDownTurn(Team team, Driver driver, Driver[] drivers) {
+ team.tearDown();
+
+ driver.circuitCompleted();
+ if(drivers != null){
+ for (int i = 0; i < drivers.length; i++) {
drivers[i].circuitCompleted();
}
- }
- return results;
- }
+ }
+ }
+
+ private LapReading runLap(Team team, Driver driver,
+ Driver[] drivers, boolean concurrent, TurnSetup setup, Lap lap) {
+ Method method = null;
+
+ try {
+ method = driver.getClass().getDeclaredMethod(lap.name(), (Class[])null);
+ } catch (SecurityException e) {
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ }
+
+ if( ! lap.hot() ){
+ if (concurrent) {
+ for (Driver d : drivers) {
+ d.backToPit();
+ }
+ } else {
+ driver.backToPit();
+ }
+
+ try {
+ if (concurrent) {
+ for (Driver d : drivers) {
+ d.prepare();
+ }
+ } else {
+ driver.prepare();
+ }
+ } catch (CarMotorFailureException e) {
+ e.printStackTrace();
+ }
+ }
+
+ RunLapThread[] threads = null;
+ if(concurrent) {
+ threads = new RunLapThread[drivers.length];
+ for(int i = 0; i < drivers.length; ++i) {
+ threads[i] = new RunLapThread(method, drivers[i]);
+ }
+ }
+
+ // _memoryWatcher.start();
+ _timeWatcher.start();
+ _fileSizeWatcher.monitorFile(team.databaseFile());
+ _fileSizeWatcher.start();
+
+ try {
+ if(concurrent) {
+ for (RunLapThread t : threads) {
+ t.start();
+ }
+ } else {
+ method.invoke(driver, (Object[]) null);
+ }
+ } catch (Exception e) {
+ System.err.println("Exception on calling method " + method);
+ e.printStackTrace();
+ }
+
+ if(concurrent) {
+ for (RunLapThread t : threads) {
+ try {
+ t.join();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ _timeWatcher.stop();
+ // _memoryWatcher.stop();
+ _fileSizeWatcher.stop();
+
+ return new LapReading(_timeWatcher.value(), _memoryUsage.usedMemory(), _fileSizeWatcher.value(), driver.checkSum());
+ }
+
+ private final static class LapReading {
+ public final long time;
+ public final long memory;
+ public final long fileSize;
+ public final long checkSum;
+
+ public LapReading(long time, long memory, long fileSize, long checkSum) {
+ this.time = time;
+ this.memory = memory;
+ this.fileSize = fileSize;
+ this.checkSum = checkSum;
+ }
+
+ @Override
+ public String toString() {
+ return time + " ms";
+ }
+ }
+
+ public static interface MemoryUsage {
+ long usedMemory();
+ }
+
+ public static class SimpleMemoryUsage implements MemoryUsage {
+ public long usedMemory() {
+ return MemoryUtil.usedMemory();
+ }
+ }
+
+ public static class NullMemoryUsage implements MemoryUsage {
+ public long usedMemory() {
+ return 0;
+ }
+ }
}
Modified: trunk/polepos/src/org/polepos/framework/SetupProperty.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/SetupProperty.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/framework/SetupProperty.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -37,22 +37,39 @@
public int value(){
return value;
}
-
- @Override
- public boolean equals(Object obj) {
- if(obj==this) {
- return true;
- }
- if(obj==null||obj.getClass()!=getClass()) {
- return false;
- }
- SetupProperty key=(SetupProperty)obj;
- return name.equals(key.name);
- }
-
- @Override
- public int hashCode() {
- return name.hashCode();
- }
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result + value;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ SetupProperty other = (SetupProperty) obj;
+ if (name == null) {
+ if (other.name != null) {
+ return false;
+ }
+ } else if (!name.equals(other.name)) {
+ return false;
+ }
+ if (value != other.value) {
+ return false;
+ }
+ return true;
+ }
+
}
Modified: trunk/polepos/src/org/polepos/framework/TurnSetup.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/TurnSetup.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/framework/TurnSetup.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -28,14 +28,14 @@
*/
public class TurnSetup implements Cloneable{
- private Map<SetupProperty, SetupProperty> mSettings = new Hashtable<SetupProperty, SetupProperty>();
+ private Map<String, SetupProperty> mSettings = new HashMap<String, SetupProperty>();
public TurnSetup() {
}
public TurnSetup(SetupProperty... properties) {
for (SetupProperty property : properties) {
- mSettings.put(property, property);
+ mSettings.put(property.name(), property);
}
}
@@ -46,16 +46,13 @@
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
- res.mSettings = new Hashtable<SetupProperty, SetupProperty>();
- for(SetupProperty sp : mSettings.keySet()){
- res.mSettings.put(sp, sp);
- }
+ res.mSettings = new HashMap<String, SetupProperty>(mSettings);
return res;
}
private int getSetting(String key){
- SetupProperty p = mSettings.get(new SetupProperty(key, 0));
+ SetupProperty p = mSettings.get(key);
if(p != null){
return p.value();
}
@@ -115,11 +112,43 @@
}
public Set<SetupProperty> properties() {
- return Collections.unmodifiableSet(mSettings.keySet());
+ return Collections.unmodifiableSet(new HashSet<SetupProperty>(mSettings.values()));
}
public void addSetting(SetupProperty setupProperty){
- mSettings.put(setupProperty, setupProperty);
+ mSettings.put(setupProperty.name(), setupProperty);
}
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((mSettings == null) ? 0 : mSettings.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ TurnSetup other = (TurnSetup) obj;
+ if (mSettings == null) {
+ if (other.mSettings != null) {
+ return false;
+ }
+ } else if (!mSettings.equals(other.mSettings)) {
+ return false;
+ }
+ return true;
+ }
+
}
Modified: trunk/polepos/src/org/polepos/runner/db4o/AbstractDb4oVersionsRaceRunner.java
===================================================================
--- trunk/polepos/src/org/polepos/runner/db4o/AbstractDb4oVersionsRaceRunner.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/runner/db4o/AbstractDb4oVersionsRaceRunner.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -32,7 +32,7 @@
public abstract class AbstractDb4oVersionsRaceRunner extends AbstractRunner {
- public abstract Driver[] drivers();
+ public abstract Driver[] drivers(Db4oEngine engine);
private String _workspace;
@@ -50,7 +50,8 @@
* otherwise we get ClassCastExceptions in the callback.
*/
public Team configuredDb4oTeam(ConfigurationSetting[] configurations) {
- return db4oTeam(workspace(), null, drivers(), configurations);
+ Db4oEngine engine = new Db4oEngine();
+ return db4oTeam(engine, workspace(), null, drivers(engine), configurations);
}
public Team db4oTeam(int[] options) {
@@ -58,7 +59,8 @@
}
public Team db4oTeam(String jarName, int[] options) {
- return db4oTeam(jarName, options, drivers(), null) ;
+ Db4oEngine engine = new Db4oEngine();
+ return db4oTeam(engine, jarName, options, drivers(engine), null) ;
}
@Override
@@ -66,11 +68,11 @@
return DefaultReporterFactory.defaultReporters();
}
- private Team db4oTeam(String jarName, int[] options, Driver[] drivers, ConfigurationSetting[] configurations) {
+ private Team db4oTeam(Db4oEngine engine, String jarName, int[] options, Driver[] drivers, ConfigurationSetting[] configurations) {
try {
Team team = null;
if(jarName == null){
- team = instantiateTeam((Class<? extends Team>)Class.forName(Db4oTeam.class.getName()));
+ team = instantiateTeam(engine, (Class<? extends Team>)Class.forName(Db4oTeam.class.getName()));
}else{
String[] prefixes={"com.db4o.","org.polepos.teams.db4o."};
@@ -82,7 +84,7 @@
urls[urls.length - 1] = jarURL(workspace(), jarName);
ClassLoader loader=new VersionClassLoader(urls, prefixes, Team.class.getClassLoader());
- team = instantiateTeam((Class<? extends Team>)loader.loadClass(Db4oTeam.class.getName()));
+ team = instantiateTeam(engine, (Class<? extends Team>)loader.loadClass(Db4oTeam.class.getName()));
}
team.configure(options, configurations);
if(jarName != null){
@@ -101,9 +103,9 @@
}
}
- private Team instantiateTeam(Class<? extends Team> clazz) throws Exception {
- Constructor<? extends Team> constr = clazz.getConstructor(new Class<?>[] { Boolean.TYPE });
- return constr.newInstance(new Object[] { Boolean.FALSE });
+ private Team instantiateTeam(Db4oEngine engine, Class<? extends Team> clazz) throws Exception {
+ Constructor<? extends Team> constr = clazz.getConstructor(new Class<?>[] { Db4oEngine.class, Boolean.TYPE });
+ return constr.newInstance(new Object[] { engine, Boolean.FALSE });
}
private URL jarURL(String workspace, String jarName) throws MalformedURLException{
Added: trunk/polepos/src/org/polepos/runner/db4o/Db4oEngine.java
===================================================================
--- trunk/polepos/src/org/polepos/runner/db4o/Db4oEngine.java (rev 0)
+++ trunk/polepos/src/org/polepos/runner/db4o/Db4oEngine.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -0,0 +1,92 @@
+/* Copyright (C) 2009 Versant Inc. http://www.db4o.com */
+package org.polepos.runner.db4o;
+
+import java.io.*;
+
+import org.polepos.teams.db4o.*;
+
+import com.db4o.*;
+import com.db4o.config.*;
+import com.db4o.ext.*;
+import com.db4o.io.*;
+
+public class Db4oEngine {
+
+ private ObjectServer _server;
+
+ public static final int SERVER_PORT = 4488;
+
+ public static final String SERVER_HOST = "localhost";
+
+ public static final String SERVER_USER = "db4o";
+
+ public static final String SERVER_PASSWORD = "db4o";
+
+ public static final String FOLDER;
+
+ static {
+ FOLDER = Db4oTeam.class.getResource("/").getPath() + "data/db4o";
+ }
+
+ public static final String DB4O_FILE = "dbbench.yap";
+
+ public static final String PATH = FOLDER + "/" + DB4O_FILE;
+
+ private final Storage _storage =
+// new MemoryStorage();
+ new CachingStorage(new FileStorage());
+
+ private void startServer(Configuration config) {
+// ??? try {
+// deleteDatabaseFile();
+// }
+// catch (IOException e) {
+// throw new RuntimeException(e);
+// }
+ if(_server == null){
+ _server = Db4o.openServer(config, PATH, SERVER_PORT);
+ _server.grantAccess(SERVER_USER, SERVER_PASSWORD);
+ }
+ }
+
+ public void stopServer() {
+ if(_server != null){
+ _server.close();
+ _server = null;
+ }
+ }
+
+ /**
+ * get rid of the database file.
+ * @throws IOException
+ */
+ public void deleteDatabaseFile() throws IOException {
+ stopServer();
+ _storage.delete(PATH);
+ }
+
+ public final String databaseFile(){
+ return PATH;
+ }
+
+ public ExtObjectContainer openFile(Configuration config) {
+ return Db4o.openFile(config(config), PATH).ext();
+ }
+
+ public ExtObjectContainer openNetworkingClient(Configuration config) {
+ Configuration enhConfig = config(config);
+ startServer(enhConfig);
+ return Db4o.openClient(enhConfig, SERVER_HOST, SERVER_PORT, SERVER_USER, SERVER_PASSWORD).ext();
+ }
+
+ public ExtObjectContainer openEmbeddedClient(Configuration config) {
+ Configuration enhConfig = config(config);
+ startServer(enhConfig);
+ return _server.openClient().ext();
+ }
+
+ private Configuration config(Configuration config) {
+ config.storage(_storage);
+ return config;
+ }
+}
Property changes on: trunk/polepos/src/org/polepos/runner/db4o/Db4oEngine.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/polepos/src/org/polepos/teams/db4o/BahrainDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/BahrainDb4o.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/teams/db4o/BahrainDb4o.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -21,6 +21,7 @@
import org.polepos.circuits.bahrain.*;
import org.polepos.data.*;
+import org.polepos.runner.db4o.*;
import com.db4o.*;
import com.db4o.config.*;
@@ -33,6 +34,11 @@
*/
public class BahrainDb4o extends Db4oDriver implements BahrainDriver{
+ public BahrainDb4o(Db4oEngine engine) {
+ super(engine);
+
+ }
+
@Override
public void configure(Configuration config) {
indexField(config, Pilot.class , "mName");
Modified: trunk/polepos/src/org/polepos/teams/db4o/BarcelonaDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/BarcelonaDb4o.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/teams/db4o/BarcelonaDb4o.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -20,6 +20,7 @@
package org.polepos.teams.db4o;
import org.polepos.circuits.barcelona.*;
+import org.polepos.runner.db4o.*;
import com.db4o.*;
import com.db4o.config.*;
@@ -28,6 +29,11 @@
public class BarcelonaDb4o extends Db4oDriver implements BarcelonaDriver{
+ public BarcelonaDb4o(Db4oEngine engine) {
+ super(engine);
+
+ }
+
@Override
public void configure(Configuration config) {
indexField(config, B2.class, "b2");
Modified: trunk/polepos/src/org/polepos/teams/db4o/Db4oCar.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/Db4oCar.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/teams/db4o/Db4oCar.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -20,6 +20,7 @@
package org.polepos.teams.db4o;
import org.polepos.framework.*;
+import org.polepos.runner.db4o.*;
import com.db4o.*;
import com.db4o.config.*;
@@ -53,20 +54,18 @@
/**
* Open database in the configured mode.
*/
- public ExtObjectContainer openObjectContainer(Configuration config)
+ public ExtObjectContainer openObjectContainer(Db4oEngine engine, Configuration config)
{
configure(config);
if (!isClientServer()) {
- return Db4o.openFile(config, Db4oTeam.PATH).ext();
+ return engine.openFile(config);
}
- ObjectServer server = Db4oTeam.openServer(config);
-
if(isClientServerOverTcp()){
- return Db4o.openClient(config, Db4oTeam.SERVER_HOST, Db4oTeam.SERVER_PORT, Db4oTeam.SERVER_USER, Db4oTeam.SERVER_PASSWORD).ext();
+ return engine.openNetworkingClient(config);
}
// embedded client server mode
- return server.openClient().ext();
+ return engine.openEmbeddedClient(config);
}
private boolean isClientServer() {
Modified: trunk/polepos/src/org/polepos/teams/db4o/Db4oDriver.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/Db4oDriver.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/teams/db4o/Db4oDriver.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -20,7 +20,7 @@
package org.polepos.teams.db4o;
import org.polepos.framework.*;
-import org.polepos.util.*;
+import org.polepos.runner.db4o.*;
import com.db4o.*;
import com.db4o.config.*;
@@ -32,12 +32,18 @@
*/
public abstract class Db4oDriver extends Driver {
+ private final Db4oEngine _engine;
+
+ protected Db4oDriver(Db4oEngine engine) {
+ _engine = engine;
+ }
+
private ExtObjectContainer _container;
public void prepare() {
Configuration config = Db4o.newConfiguration();
configure(config);
- _container = ((Db4oCar) car()).openObjectContainer(config);
+ _container = ((Db4oCar) car()).openObjectContainer(_engine, config);
}
public abstract void configure(Configuration config);
@@ -48,10 +54,14 @@
}
public void backToPit() {
+ if(_container == null || _container.ext().isClosed()) {
+ return;
+ }
_container.close();
// give the weak reference collector thread time to end
- ThreadUtil.sleepIgnoreInterruption(500);
+// TODO check whether this is really necessary, if it is, can't we somehow join on this guy?
+// ThreadUtil.sleepIgnoreInterruption(500);
}
public ExtObjectContainer db() {
Modified: trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/teams/db4o/Db4oTeam.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -19,66 +19,50 @@
package org.polepos.teams.db4o;
-import java.io.File;
+import java.io.*;
+import java.lang.reflect.*;
import java.util.*;
import org.polepos.framework.*;
+import org.polepos.runner.db4o.*;
-import com.db4o.*;
-import com.db4o.config.*;
-
public class Db4oTeam extends Team {
+ private final Db4oEngine _engine;
+
private String _name = db4oName();
- private boolean _clientServer = false;
-
private final List<Driver> _drivers;
private int[] _options;
- private ConfigurationSetting[] _configurations;
+ private ConfigurationSetting[] _configurations;
- private static ObjectServer _server;
-
- public static final int SERVER_PORT = 4488;
-
- public static final String SERVER_HOST = "localhost";
-
- public static final String SERVER_USER = "db4o";
-
- public static final String SERVER_PASSWORD = "db4o";
-
- public static final String FOLDER;
-
- static {
- FOLDER = Db4oTeam.class.getResource("/").getPath() + "data/db4o";
- }
-
- public static final String DB4O_FILE = "dbbench.yap";
-
- public static final String PATH = FOLDER + "/" + DB4O_FILE;
-
- public Db4oTeam(boolean loadDrivers) {
+ public Db4oTeam(Db4oEngine engine, boolean loadDrivers) {
+ _engine = engine;
_drivers = new ArrayList<Driver>();
if(loadDrivers) {
- addDrivers();
+ addDrivers(engine);
}
}
+ public Db4oTeam(Db4oEngine engine) {
+ this(engine, true);
+ }
+
public Db4oTeam() {
- this(true);
+ this(new Db4oEngine());
}
- private void addDrivers(){
- addDriver(new MelbourneDb4o());
- addDriver(new SepangDb4o());
- addDriver(new BahrainDb4o());
- addDriver(new ImolaDb4o());
- addDriver(new BarcelonaDb4o());
- addDriver(new MonacoDb4o());
- addDriver(new NurburgringDb4o());
- addDriver(new MontrealDb4o());
+ private void addDrivers(Db4oEngine engine){
+ addDriver(new MelbourneDb4o(engine));
+ addDriver(new SepangDb4o(engine));
+ addDriver(new BahrainDb4o(engine));
+ addDriver(new ImolaDb4o(engine));
+ addDriver(new BarcelonaDb4o(engine));
+ addDriver(new MonacoDb4o(engine));
+ addDriver(new NurburgringDb4o(engine));
+ addDriver(new MontrealDb4o(engine));
}
@Override
@@ -103,7 +87,8 @@
public void addDriver(String driverName){
try {
Class<?> clazz = this.getClass().getClassLoader().loadClass(driverName);
- addDriver((Driver)clazz.newInstance());
+ Constructor<?> constr = clazz.getConstructor(Db4oEngine.class);
+ addDriver((Driver)constr.newInstance(_engine));
} catch (Exception e) {
e.printStackTrace();
@@ -140,7 +125,6 @@
_name += " noflush";
break;
case Db4oOptions.CLIENT_SERVER:
- _clientServer = true;
_name += " C/S";
break;
case Db4oOptions.CLIENT_SERVER_TCP:
@@ -181,39 +165,34 @@
}
protected void setUp() {
- new File(FOLDER).mkdirs();
- deleteDatabaseFile();
+ new File(Db4oEngine.FOLDER).mkdirs();
+ try {
+ _engine.deleteDatabaseFile();
+ }
+ catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
protected void tearDown() {
- if(_server != null){
- _server.close();
- _server = null;
- }
+ _engine.stopServer();
}
public final String databaseFile(){
- return PATH;
+ return _engine.databaseFile();
}
/**
* get rid of the database file.
+ * @throws IOException
*/
- private void deleteDatabaseFile()
+ private void deleteDatabaseFile() throws IOException
{
- new File( databaseFile() ).delete();
+ _engine.deleteDatabaseFile();
}
public void setJarName(String jarName){
_name = _name.replaceAll("db4o", jarName);
}
- public static ObjectServer openServer(Configuration config){
- if(_server == null){
- _server = Db4o.openServer(config, Db4oTeam.PATH, SERVER_PORT);
- _server.grantAccess(SERVER_USER, SERVER_PASSWORD);
- }
- return _server;
- }
-
}
Modified: trunk/polepos/src/org/polepos/teams/db4o/ImolaDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/ImolaDb4o.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/teams/db4o/ImolaDb4o.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -21,12 +21,18 @@
import org.polepos.circuits.imola.*;
import org.polepos.data.*;
+import org.polepos.runner.db4o.*;
import com.db4o.config.*;
public class ImolaDb4o extends Db4oDriver implements ImolaDriver {
+ public ImolaDb4o(Db4oEngine engine) {
+ super(engine);
+
+ }
+
@Override
public void configure(Configuration config) {
Modified: trunk/polepos/src/org/polepos/teams/db4o/MelbourneDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/MelbourneDb4o.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/teams/db4o/MelbourneDb4o.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -21,6 +21,7 @@
import org.polepos.circuits.melbourne.*;
import org.polepos.data.*;
+import org.polepos.runner.db4o.*;
import com.db4o.*;
import com.db4o.config.*;
@@ -33,6 +34,11 @@
public class MelbourneDb4o extends Db4oDriver implements MelbourneDriver{
+ public MelbourneDb4o(Db4oEngine engine) {
+ super(engine);
+
+ }
+
@Override
public void configure(Configuration config) {
Modified: trunk/polepos/src/org/polepos/teams/db4o/MonacoDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/MonacoDb4o.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/teams/db4o/MonacoDb4o.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -21,12 +21,18 @@
package org.polepos.teams.db4o;
import org.polepos.circuits.monaco.*;
+import org.polepos.runner.db4o.*;
import com.db4o.config.*;
public class MonacoDb4o extends Db4oDriver implements MonacoDriver{
+ public MonacoDb4o(Db4oEngine engine) {
+ super(engine);
+
+ }
+
@Override
public void configure(Configuration config) {
Modified: trunk/polepos/src/org/polepos/teams/db4o/MontrealDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/MontrealDb4o.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/teams/db4o/MontrealDb4o.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -3,6 +3,7 @@
package org.polepos.teams.db4o;
import org.polepos.circuits.montreal.*;
+import org.polepos.runner.db4o.*;
import com.db4o.config.*;
import com.db4o.query.*;
@@ -10,6 +11,11 @@
public class MontrealDb4o extends Db4oDriver implements MontrealDriver {
+ public MontrealDb4o(Db4oEngine engine) {
+ super(engine);
+
+ }
+
@Override
public void configure(Configuration config) {
Modified: trunk/polepos/src/org/polepos/teams/db4o/NurburgringDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/NurburgringDb4o.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/teams/db4o/NurburgringDb4o.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -20,6 +20,7 @@
package org.polepos.teams.db4o;
import org.polepos.circuits.nurburgring.*;
+import org.polepos.runner.db4o.*;
import com.db4o.config.*;
@@ -27,6 +28,11 @@
public class NurburgringDb4o extends Db4oDriver implements NurburgringDriver{
+ public NurburgringDb4o(Db4oEngine engine) {
+ super(engine);
+
+ }
+
@Override
public void configure(Configuration config) {
Modified: trunk/polepos/src/org/polepos/teams/db4o/SepangDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/SepangDb4o.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/teams/db4o/SepangDb4o.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -20,6 +20,7 @@
package org.polepos.teams.db4o;
import org.polepos.circuits.sepang.*;
+import org.polepos.runner.db4o.*;
import com.db4o.config.*;
@@ -28,6 +29,11 @@
*/
public class SepangDb4o extends Db4oDriver implements SepangDriver{
+ public SepangDb4o(Db4oEngine engine) {
+ super(engine);
+
+ }
+
@Override
public void configure(Configuration config) {
Modified: trunk/polepos/src/org/polepos/teams/jdbc/JdbcCar.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/JdbcCar.java 2009-10-07 17:46:08 UTC (rev 94)
+++ trunk/polepos/src/org/polepos/teams/jdbc/JdbcCar.java 2010-03-02 13:32:00 UTC (rev 95)
@@ -85,12 +85,16 @@
*
*/
public void close() {
+ if(_connection == null) {
+ return;
+ }
closeStatement();
commit();
closeConnection();
}
private void closeConnection() {
+ closeStatement();
try {
_connection.close();
} catch (SQLException sqlex) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|