01: /*
02: This file is part of the PolePosition database benchmark
03: http://www.polepos.org
04:
05: This program is free software; you can redistribute it and/or
06: modify it under the terms of the GNU General Public License
07: as published by the Free Software Foundation; either version 2
08: of the License, or (at your option) any later version.
09:
10: This program is distributed in the hope that it will be useful,
11: but WITHOUT ANY WARRANTY; without even the implied warranty of
12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13: GNU General Public License for more details.
14:
15: You should have received a copy of the GNU General Public
16: License along with this program; if not, write to the Free
17: Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18: MA 02111-1307, USA. */
19:
20: package org.polepos.teams.db4o;
21:
22: import org.polepos.framework.*;
23:
24: import com.db4o.*;
25: import com.db4o.ext.*;
26: import com.db4o.query.*;
27:
28: /**
29: * @author Herkules
30: */
31: public abstract class Db4oDriver extends Driver {
32:
33: private ExtObjectContainer mDB;
34:
35: public void takeSeatIn(Car car, TurnSetup setup)
36: throws CarMotorFailureException {
37: super .takeSeatIn(car, setup);
38: ((Db4oCar) car).initialize();
39: }
40:
41: public void prepare() {
42: mDB = ((Db4oCar) car()).createObjectContainer();
43: }
44:
45: public void backToPit() {
46: mDB.close();
47:
48: // give the weak reference collector thread time to end
49: try {
50: Thread.sleep(500);
51: } catch (InterruptedException e) {
52: e.printStackTrace();
53: }
54: }
55:
56: public ExtObjectContainer db() {
57: return mDB;
58: }
59:
60: protected void doQuery(Query q) {
61: ObjectSet result = q.execute();
62: while (result.hasNext()) {
63: Object o = result.next();
64: if (o instanceof CheckSummable) {
65: addToCheckSum(((CheckSummable) o).checkSum());
66: }
67: }
68: }
69:
70: protected void readExtent(Class clazz) {
71: Query q = db().query();
72: q.constrain(clazz);
73: doQuery(q);
74: }
75:
76: protected void begin() {
77: // db4o always works in a transaction so a begin call
78: // is not needed.
79: }
80:
81: protected void commit() {
82: mDB.commit();
83: }
84:
85: protected void store(Object obj) {
86: mDB.set(obj);
87: }
88: }
|