KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4odoc > querymode > QueryModesExample


1 /* Copyright (C) 2004 - 2006 db4objects Inc. http://www.db4o.com */
2
3 package com.db4odoc.querymode;
4
5 import java.io.File JavaDoc;
6 import com.db4o.Db4o;
7 import com.db4o.ObjectContainer;
8 import com.db4o.ObjectSet;
9 import com.db4o.config.QueryEvaluationMode;
10 import com.db4o.query.Query;
11 import com.db4o.tools.QueryStats;
12
13
14
15 public class QueryModesExample {
16     public final static String JavaDoc YAPFILENAME="formula1.yap";
17     
18     public static void main(String JavaDoc[] args) {
19         Db4o.configure().objectClass(Pilot.class).objectField("points").indexed(true);
20         //testImmediateQueries();
21
//testLazyQueries();
22
//testSnapshotQueries();
23
//testLazyConcurrent();
24
//testSnapshotConcurrent();
25
testImmediateChanged();
26     }
27     // end main
28

29     public static void fillUpDB(int pilotCount){
30         new File JavaDoc(YAPFILENAME).delete();
31         ObjectContainer db=Db4o.openFile(YAPFILENAME);
32         try {
33             for (int i=0; i<pilotCount;i++){
34                 addPilot(db,i);
35             }
36         }
37         finally {
38             db.close();
39         }
40     }
41     // end fillUpDB
42

43     private static void addPilot(ObjectContainer db, int points) {
44         Pilot pilot = new Pilot("Tester", points);
45         db.set(pilot);
46     }
47     // end addPilot
48

49     public static void testImmediateQueries() {
50         System.out.println("Testing query performance on 10000 pilot objects in Immediate mode");
51         fillUpDB(10000);
52         ObjectContainer db = Db4o.openFile(YAPFILENAME);
53         try {
54             db.ext().configure().queries().evaluationMode(QueryEvaluationMode.IMMEDIATE);
55             QueryStats stats = new QueryStats();
56             stats.connect(db);
57             Query query = db.query();
58             query.constrain(Pilot.class);
59             query.descend("points").constrain(99).greater();
60             query.execute();
61             long executionTime = stats.executionTime();
62             System.out.println("Query execution time: " + executionTime);
63         } finally {
64             db.close();
65         }
66     }
67     //end testImmediateQueries
68

69     public static void testLazyQueries() {
70         System.out.println("Testing query performance on 10000 pilot objects in Lazy mode");
71         fillUpDB(10000);
72         ObjectContainer db = Db4o.openFile(YAPFILENAME);
73         try {
74             db.ext().configure().queries().evaluationMode(QueryEvaluationMode.LAZY);
75             QueryStats stats = new QueryStats();
76             stats.connect(db);
77             Query query = db.query();
78             query.constrain(Pilot.class);
79             query.descend("points").constrain(99).greater();
80             query.execute();
81             long executionTime = stats.executionTime();
82             System.out.println("Query execution time: " + executionTime);
83         } finally {
84             db.close();
85         }
86     }
87     // end testLazyQueries
88

89     public static void testLazyConcurrent() {
90         System.out.println("Testing lazy mode with concurrent modifications");
91         fillUpDB(10);
92         ObjectContainer db = Db4o.openFile(YAPFILENAME);
93         try {
94             db.ext().configure().queries().evaluationMode(QueryEvaluationMode.LAZY);
95             Query query1 = db.query();
96             query1.constrain(Pilot.class);
97             query1.descend("points").constrain(5).smaller();
98             ObjectSet result1 = query1.execute();
99
100             Query query2 = db.query();
101             query2.constrain(Pilot.class);
102             query2.descend("points").constrain(1);
103             ObjectSet result2 = query2.execute();
104             Pilot pilotToDelete = (Pilot)result2.get(0);
105             System.out.println("Pilot to be deleted: " + pilotToDelete);
106             db.delete(pilotToDelete);
107             Pilot pilot = new Pilot("Tester",2);
108             System.out.println("Pilot to be added: " + pilot);
109             db.set(pilot);
110                 
111             System.out.println("Query result after changing from the same transaction");
112             listResult(result1);
113         } finally {
114             db.close();
115         }
116     }
117     // end testLazyConcurrent
118

119     public static void listResult(ObjectSet result) {
120        while(result.hasNext()) {
121             System.out.println(result.next());
122         }
123     }
124     // end listResult
125

126     public static void testSnapshotQueries() {
127         System.out.println("Testing query performance on 10000 pilot objects in Snapshot mode");
128         fillUpDB(10000);
129         ObjectContainer db = Db4o.openFile(YAPFILENAME);
130         try {
131             db.ext().configure().queries().evaluationMode(QueryEvaluationMode.SNAPSHOT);
132             QueryStats stats = new QueryStats();
133             stats.connect(db);
134             Query query = db.query();
135             query.constrain(Pilot.class);
136             query.descend("points").constrain(99).greater();
137             query.execute();
138             long executionTime = stats.executionTime();
139             System.out.println("Query execution time: " + executionTime);
140         } finally {
141             db.close();
142         }
143     }
144     // end testSnapshotQueries
145

146     public static void testSnapshotConcurrent() {
147         System.out.println("Testing snapshot mode with concurrent modifications");
148         fillUpDB(10);
149         ObjectContainer db = Db4o.openFile(YAPFILENAME);
150         try {
151             db.ext().configure().queries().evaluationMode(QueryEvaluationMode.SNAPSHOT);
152             Query query1 = db.query();
153             query1.constrain(Pilot.class);
154             query1.descend("points").constrain(5).smaller();
155             ObjectSet result1 = query1.execute();
156
157             Query query2 = db.query();
158             query2.constrain(Pilot.class);
159             query2.descend("points").constrain(1);
160             ObjectSet result2 = query2.execute();
161             Pilot pilotToDelete = (Pilot)result2.get(0);
162             System.out.println("Pilot to be deleted: " + pilotToDelete);
163             db.delete(pilotToDelete);
164             Pilot pilot = new Pilot("Tester",2);
165             System.out.println("Pilot to be added: " + pilot);
166             db.set(pilot);
167                 
168             System.out.println("Query result after changing from the same transaction");
169             listResult(result1);
170         } finally {
171             db.close();
172         }
173     }
174     // end testSnapshotConcurrent
175

176     
177     public static void testImmediateChanged() {
178         System.out.println("Testing immediate mode with field changes");
179         fillUpDB(10);
180         ObjectContainer db = Db4o.openFile(YAPFILENAME);
181         try {
182             db.ext().configure().queries().evaluationMode(QueryEvaluationMode.IMMEDIATE);
183             Query query1 = db.query();
184             query1.constrain(Pilot.class);
185             query1.descend("points").constrain(5).smaller();
186             ObjectSet result1 = query1.execute();
187             
188             // change field
189
Query query2 = db.query();
190             query2.constrain(Pilot.class);
191             query2.descend("points").constrain(2);
192             ObjectSet result2 = query2.execute();
193             Pilot pilot2 = (Pilot)result2.get(0);
194             pilot2.addPoints(22);
195             db.set(pilot2);
196             listResult(result1);
197         } finally {
198             db.close();
199         }
200     }
201     // end testImmediateChanged
202
}
203
Popular Tags