001: /**
002: * Copyright (C) 2001-2006 France Telecom R&D
003: */package inheritance.filtered.disc_outof_pk;
004:
005: import org.objectweb.speedo.api.ExceptionHelper;
006: import org.objectweb.util.monolog.api.BasicLevel;
007:
008: import java.util.ArrayList;
009: import java.util.Collection;
010: import java.util.Iterator;
011:
012: import javax.jdo.Extent;
013: import javax.jdo.JDOException;
014: import javax.jdo.PersistenceManager;
015: import javax.jdo.Query;
016:
017: import common.MainHelper;
018:
019: public class Main extends MainHelper {
020:
021: protected int nbToRetrieve = 0;
022: protected String phone = "123456789";
023:
024: public static void main(String[] args) {
025: new Main().init(args).run().end();
026: }
027:
028: public MainHelper run() {
029: //create the forms
030: createInheritedObjects();
031: //get all the forms
032: iterateExtent(Form.class);
033: //get all the book forms
034: iterateExtent(BookForm.class);
035: //get all the purchase forms
036: iterateExtent(PurchaseForm.class);
037: retrieveAllXXForms(phone);
038: queryTruble("1");
039: removingOfPersistentObject();
040: return this ;
041: }
042:
043: /**
044: * Create persistent objects
045: */
046: private void createInheritedObjects() {
047: PersistenceManager pm = pmf.getPersistenceManager();
048: try {
049: ContactDetails contactDetails1 = new ContactDetails(
050: "Jerry", "Rice", phone);
051: ContactDetails contactDetails2 = new ContactDetails("Ray",
052: "Allen", "987654321");
053:
054: CreditCard card1 = new CreditCard(1, "visa");
055: CreditCard card2 = new CreditCard(2, "american express");
056:
057: BookForm bookForm1 = new BookForm(1, contactDetails1, 1);
058: BookForm bookForm2 = new BookForm(2, contactDetails1, 2);
059: BookForm bookForm3 = new BookForm(3, contactDetails1, 3);
060: PurchaseForm purchaseForm1 = new PurchaseForm(4,
061: contactDetails1, 400, card1);
062: PurchaseForm purchaseForm2 = new PurchaseForm(5,
063: contactDetails1, 500, card2);
064:
065: BookForm bookForm4 = new BookForm(6, contactDetails2, 6);
066: BookForm bookForm5 = new BookForm(7, contactDetails2, 7);
067:
068: Collection forms = new ArrayList();
069: forms.add(bookForm1);
070: forms.add(bookForm2);
071: forms.add(bookForm3);
072: forms.add(bookForm4);
073: forms.add(bookForm5);
074: forms.add(purchaseForm1);
075: forms.add(purchaseForm2);
076:
077: Iterator it = forms.iterator();
078: nbToRetrieve = 0;
079: while (it.hasNext()) {
080: Form f = (Form) it.next();
081: if (f.getContactDetails().getPhoneNumber()
082: .equals(phone))
083: nbToRetrieve++;
084: }
085: // make persistent all the forms
086: pm.currentTransaction().begin();
087: pm.makePersistentAll(forms);
088: pm.currentTransaction().commit();
089: } catch (Exception e) {
090: logger.log(BasicLevel.ERROR, e);
091: } finally {
092: if (pm.currentTransaction().isActive())
093: pm.currentTransaction().rollback();
094: //remove all the objects from the cache
095: pm.evictAll();
096: pm.close();
097: }
098: }
099:
100: //iterate over all the instances of a class
101: private void iterateExtent(Class cl) {
102: logger.log(BasicLevel.INFO,
103: "Search all form (including sub classes):");
104: PersistenceManager pm = pmf.getPersistenceManager();
105: try {
106: pm.currentTransaction().begin();
107: Extent extent = pm.getExtent(cl, true);
108: Iterator it = extent.iterator();
109: while (it.hasNext()) {
110: Form f = (Form) it.next();
111: logger.log(BasicLevel.INFO, "\t- form.id=" + f.getId());
112: }
113: extent.close(it);
114: pm.currentTransaction().commit();
115: } catch (Exception e) {
116: logger.log(BasicLevel.ERROR, e);
117: } finally {
118: if (pm.currentTransaction().isActive())
119: pm.currentTransaction().rollback();
120: pm.evictAll();
121: pm.close();
122: }
123: }
124:
125: private void retrieveAllXXForms(String phoneNumber) {
126: logger.log(BasicLevel.INFO,
127: "Search all form having a contact with the phone number "
128: + phoneNumber);
129: PersistenceManager pm = pmf.getPersistenceManager();
130: try {
131: Query query = pm.newQuery(Form.class,
132: "contactDetails.phoneNumber==" + phoneNumber);
133: Collection results = (Collection) query.execute();
134: logger.log(BasicLevel.DEBUG, "All " + phoneNumber
135: + " forms:");
136: Iterator it = results.iterator();
137: while (it.hasNext()) {
138: Form f = (Form) it.next();
139: logger.log(BasicLevel.INFO, "\t- form.id=" + f.getId());
140: }
141: query.closeAll();
142: } catch (Exception e) {
143: logger.log(BasicLevel.ERROR, e);
144: } finally {
145: pm.evictAll();
146: pm.close();
147: }
148: }
149:
150: //problem sent by a user
151: private void queryTruble(String myId) {
152: PersistenceManager pm = pmf.getPersistenceManager();
153: try {
154: pm.currentTransaction().begin();
155:
156: BookForm b = null;
157: Query query = pm.newQuery(BookForm.class, "(id == argId)");
158: query.declareParameters("int argId");
159: Integer id = Integer.valueOf(myId);
160: Collection results = (Collection) query.execute(id);
161: Iterator it = results.iterator();
162: if (it.hasNext()) {
163: b = (BookForm) it.next();
164: logger.log(BasicLevel.DEBUG, b.getTitle());
165: }
166: query.closeAll();
167: pm.currentTransaction().commit();
168: } catch (Exception e) {
169: if (pm.currentTransaction().isActive())
170: pm.currentTransaction().rollback();
171: logger.log(BasicLevel.ERROR, e);
172: } finally {
173: pm.close();
174: }
175: }
176:
177: private void removingOfPersistentObject() {
178: PersistenceManager pm = pmf.getPersistenceManager();
179: try {
180: Class[] cs = new Class[] { Form.class, CreditCard.class,
181: ContactDetails.class };
182: pm.currentTransaction().begin();
183: for (int i = 0; i < cs.length; i++) {
184: Query query = pm.newQuery(cs[i]);
185: Collection col = (Collection) query.execute();
186: Iterator it = col.iterator();
187: while (it.hasNext()) {
188: Object o = it.next();
189: pm.deletePersistent(o);
190:
191: }
192: query.close(col);
193: }
194: pm.currentTransaction().commit();
195: } catch (JDOException e) {
196: Exception ie = ExceptionHelper.getNested(e);
197: logger.log(BasicLevel.ERROR, "", ie);
198: } finally {
199: pm.close();
200: }
201: }
202:
203: }
|