01: /**
02: * Copyright (C) 2001-2006 France Telecom R&D
03: */package inheritance.filtered.disc_in_pk;
04:
05: import org.objectweb.util.monolog.api.BasicLevel;
06:
07: import common.MainHelper;
08:
09: import java.util.ArrayList;
10: import java.util.Collection;
11: import java.util.Iterator;
12:
13: import javax.jdo.PersistenceManager;
14: import javax.jdo.Query;
15:
16: public class Main extends MainHelper {
17:
18: public static void main(String[] args) {
19: new Main().init(args).run().end();
20: }
21:
22: public MainHelper run() {
23: E e1 = new E();
24: e1.setMyA(new A("a1"));
25: e1.setMyC(new C("c1"));
26: e1.setMyD(new D("d1"));
27:
28: E e2 = new E();
29: e2.setMyA(new D("d2"));
30: e2.setMyC(new D("d3"));
31: e2.setMyD(new D("d4"));
32: PersistenceManager pm = pmf.getPersistenceManager();
33: pm.currentTransaction().begin();
34: pm.makePersistent(e1);
35: Object oide1 = pm.getObjectId(e1);
36: pm.makePersistent(e2);
37: Object oide2 = pm.getObjectId(e2);
38: e1 = null;
39: e2 = null;
40: pm.currentTransaction().commit();
41:
42: pm.evictAll();
43:
44: pm.currentTransaction().begin();
45: e1 = (E) pm.getObjectById(E.class, oide1);
46: logger.log(BasicLevel.INFO, "e1.myA.aid="
47: + e1.getMyA().getAid());
48: logger.log(BasicLevel.INFO, "e1.myC.aid="
49: + e1.getMyC().getAid());
50: logger.log(BasicLevel.INFO, "e1.myD.aid="
51: + e1.getMyD().getAid());
52: e1 = null;
53: e2 = (E) pm.getObjectById(E.class, oide2);
54: logger.log(BasicLevel.INFO, "e2.myA.aid="
55: + e2.getMyA().getAid());
56: logger.log(BasicLevel.INFO, "e2.myC.aid="
57: + e2.getMyC().getAid());
58: logger.log(BasicLevel.INFO, "e2.myD.aid="
59: + e2.getMyD().getAid());
60: e2 = null;
61: pm.currentTransaction().commit();
62:
63: pm.evictAll();
64:
65: pm.currentTransaction().begin();
66: Query q = pm.newQuery(A.class);
67: Collection c = (Collection) q.execute();
68: // expected "a1", "c1", "d1", "d2", "d3", "d4"
69: logger.log(BasicLevel.INFO,
70: "Search all A (including C and D instances):");
71: for (Iterator it = c.iterator(); it.hasNext();) {
72: A a = (A) it.next();
73: logger.log(BasicLevel.INFO, "\t- " + a.getAid());
74: }
75: q.closeAll();
76: pm.currentTransaction().commit();
77:
78: pm.currentTransaction().begin();
79: q = pm.newQuery(A.class);
80: c = new ArrayList((Collection) q.execute());
81: q.closeAll();
82: q = pm.newQuery(E.class);
83: c.addAll((Collection) q.execute());
84: q.closeAll();
85: pm.deletePersistentAll(c);
86: pm.currentTransaction().commit();
87:
88: pm.close();
89: return this;
90: }
91:
92: }
|