KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jdo > Test


1 package jdo;
2
3
4 import myapp.*;
5 import java.util.Hashtable JavaDoc;
6 import java.util.Vector JavaDoc;
7 import java.util.Enumeration JavaDoc;
8 import java.io.PrintWriter JavaDoc;
9 import java.io.InputStreamReader JavaDoc;
10 import java.io.Serializable JavaDoc;
11 import java.sql.Connection JavaDoc;
12 import java.sql.PreparedStatement JavaDoc;
13 import java.sql.ResultSet JavaDoc;
14 import java.sql.SQLException JavaDoc;
15 import java.sql.DriverManager JavaDoc;
16 import org.xml.sax.ContentHandler JavaDoc;
17 import org.exolab.castor.jdo.JDO;
18 import org.exolab.castor.jdo.Database;
19 import org.exolab.castor.jdo.OQLQuery;
20 import org.exolab.castor.jdo.QueryResults;
21 import org.exolab.castor.util.Logger;
22 import org.exolab.castor.xml.Marshaller;
23 import org.exolab.castor.mapping.Mapping;
24 import org.apache.xml.serialize.*;
25
26
27 /**
28  * This example is only intended to show how castor should be set up
29  * in a standalone environment. For detail examples on the mapping file,
30  * database schemas, supported features and their expected behaviors,
31  * please consult the JDO test cases instead. JDO Test cases can be
32  * found in the full CVS snapshot and located under the directory of
33  * src\tests\jdo.
34  */

35 public class Test
36 {
37
38   public static final String JavaDoc DatabaseFile = "../../src/de/nava/informa/impl/jdo/database.xml";
39     
40   public static final String JavaDoc MappingFile = "../../src/de/nava/informa/impl/jdo/mapping.xml";
41
42   public static final String JavaDoc Usage = "Usage: example jdo";
43
44   
45   private Mapping _mapping;
46
47
48   private JDO _jdo;
49
50
51   public static void main( String JavaDoc[] args )
52   {
53     PrintWriter JavaDoc writer;
54     Test test;
55         
56     writer = new Logger( System.out ).setPrefix( "test" );
57     try {
58       test = new Test( writer );
59       test.run( writer );
60     } catch ( Exception JavaDoc except ) {
61       writer.println( except );
62       except.printStackTrace( writer );
63     }
64   }
65
66
67   public Test( PrintWriter JavaDoc writer )
68     throws Exception JavaDoc
69   {
70     // Load the mapping file
71
_mapping = new Mapping( getClass().getClassLoader() );
72     _mapping.setLogWriter( writer );
73     _mapping.loadMapping( getClass().getResource( MappingFile ) );
74
75     _jdo = new JDO();
76     _jdo.setLogWriter( writer );
77     _jdo.setConfiguration( getClass().getResource( DatabaseFile ).toString() );
78     _jdo.setDatabaseName( "jdotest" );
79   }
80
81
82   public void run( PrintWriter JavaDoc writer )
83     throws Exception JavaDoc
84   {
85     Database db;
86     Product product;
87     ProductGroup group;
88     ProductDetail detail;
89     Computer computer;
90     OQLQuery productOql;
91     OQLQuery groupOql;
92     OQLQuery computerOql;
93     QueryResults results;
94
95     db = _jdo.getDatabase();
96
97     db.begin();
98     writer.println( "Begin transaction" );
99
100     // Look up the product and if found in the database,
101
// delete this object from the database
102
productOql = db.getOQLQuery( "SELECT p FROM myapp.Product p WHERE id = $1" );
103     productOql.bind( 4 );
104     results = productOql.execute();
105     while ( results.hasMore() ) {
106       product = (Product) results.next();
107       writer.println( "Deleting existing product: " + product );
108       db.remove( product );
109     }
110         
111     // Look up the computer and if found in the database,
112
// delete ethis object from the database
113
computerOql = db.getOQLQuery( "SELECT c FROM myapp.Computer c WHERE id = $1" );
114     computerOql.bind( 6 );
115     results = computerOql.execute();
116     while ( results.hasMore() ) {
117       computer = (Computer) results.next();
118       writer.println( "Deleting existing computer: " + computer );
119       db.remove( computer );
120     }
121
122     // Look up the group and if found in the database,
123
// delete this object from the database
124
groupOql = db.getOQLQuery( "SELECT g FROM myapp.ProductGroup g WHERE id = $1" );
125     groupOql.bind( 3 );
126     results = groupOql.execute();
127     while ( results.hasMore() ) {
128       group = (ProductGroup) results.next();
129       writer.println( "Deleting existing group: " + group );
130       db.remove( group );
131     }
132         
133     // Checkpoint commits all the updates to the database
134
// but leaves the transaction (and locks) open
135
writer.println( "Transaction checkpoint" );
136     db.commit();
137
138     db.begin();
139     // If no such group exists in the database, create a new
140
// object and persist it
141
groupOql.bind( 3 );
142     results = groupOql.execute();
143     if ( ! results.hasMore() ) {
144       group = new ProductGroup();
145       group.setId( 3 );
146       group.setName( "a group" );
147       db.create( group );
148       writer.println( "Creating new group: " + group );
149     } else {
150       group = (ProductGroup) results.next();
151       writer.println( "Query result: " + group );
152     }
153
154     // If no such product exists in the database, create a new
155
// object and persist it
156
// Note: product uses group, so group object has to be
157
// created first, but can be persisted later
158
productOql.bind( 4 );
159     results = productOql.execute();
160     if ( ! results.hasMore() ) {
161       product = new Product();
162       product.setId( 4 );
163       product.setName( "some product" );
164       product.setPrice( 55 );
165       product.setGroup( group );
166       detail = new ProductDetail();
167       detail.setId( 1 );
168       detail.setName( "one" );
169       product.addDetail( detail );
170       detail = new ProductDetail();
171       detail.setId( 2 );
172       detail.setName( "two" );
173       product.addDetail( detail );
174       writer.println( "Creating new product: " + product );
175       db.create( product );
176     } else {
177       writer.println( "Query result: " + results.next() );
178     }
179
180     // If no such computer exists in the database, create a new
181
// object and persist it
182
// Note: computer uses group, so group object has to be
183
// created first, but can be persisted later
184
computerOql.bind( 6 );
185     results = computerOql.execute();
186     if ( ! results.hasMore() ) {
187       computer = new Computer();
188       computer.setId( 6 );
189       computer.setCpu( "Pentium" );
190       computer.setName( "MyPC" );
191       computer.setPrice( 300 );
192       computer.setGroup( group );
193       detail = new ProductDetail();
194       detail.setId( 4 );
195       detail.setName( "mouse" );
196       computer.addDetail( detail );
197       detail = new ProductDetail();
198       detail.setId( 5 );
199       detail.setName( "screen" );
200       computer.addDetail( detail );
201       writer.println( "Creating new computer: " + computer );
202       db.create( computer );
203     } else {
204       writer.println( "Query result: " + results.next() );
205     }
206     writer.println( "Commit transaction" );
207     db.commit();
208
209     Marshaller marshaller;
210
211     marshaller = new Marshaller( writer );
212     marshaller.setMapping( _mapping );
213
214     db.begin();
215     marshaller.marshal( db.load( Product.class, new Integer JavaDoc( 4 ) ) );
216     computerOql = db.getOQLQuery( "SELECT c FROM myapp.Computer c" );
217     results = computerOql.execute();
218     while( results.hasMore() )
219       marshaller.marshal( results.next() );
220     db.commit();
221
222     db.close();
223   }
224
225 }
226
Popular Tags