You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2006/07/15 16:54:39 UTC

svn commit: r422241 - in /db/ojb/trunk/src/test/org/apache/ojb/odmg: ./ shared/

Author: arminw
Date: Sat Jul 15 07:54:38 2006
New Revision: 422241

URL: http://svn.apache.org/viewvc?rev=422241&view=rev
Log:
merge trunk with 1.0.x

Modified:
    db/ojb/trunk/src/test/org/apache/ojb/odmg/DMapTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/DSetTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/FieldConversionTest_4.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/InheritanceMultipleTableTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/LockingMultithreadedTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/LockingTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/ManyToManyTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/NamedRootsTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/ODMGRollbackTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/OQLOrOnForeignKeyTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/OQLTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/ObjectImageTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/OdmgExamples.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/PersonWithArrayTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/RITest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/ScrollableQueryResultsTest.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/UserTestCases.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/shared/Article.java
    db/ojb/trunk/src/test/org/apache/ojb/odmg/shared/ProductGroup.java

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/DMapTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/DMapTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/DMapTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/DMapTest.java Sat Jul 15 07:54:38 2006
@@ -4,8 +4,6 @@
 import org.apache.ojb.junit.ODMGTestCase;
 import org.apache.ojb.odmg.shared.Article;
 import org.apache.ojb.odmg.shared.ProductGroup;
-import org.apache.ojb.odmg.collections.DMapExt;
-import org.apache.commons.lang.SerializationUtils;
 import org.odmg.DMap;
 import org.odmg.Transaction;
 
@@ -33,7 +31,7 @@
         Transaction tx = odmg.newTransaction();
         tx.begin();
         productGroup = new ProductGroup();
-        productGroup.setName("DMapTest_" + System.currentTimeMillis() + "_");
+        productGroup.setGroupName("DMapTest_" + System.currentTimeMillis() + "_");
         database.makePersistent(productGroup);
         tx.commit();
     }
@@ -42,7 +40,7 @@
     {
 
         Article a = new Article();
-        a.setArticleName(productGroup.getName() + name);
+        a.setArticleName(productGroup.getGroupName() + name);
         a.setStock(234);
         a.setProductGroup(productGroup);
         return a;
@@ -158,62 +156,5 @@
         val2A = (Article) mapA.get(key2);
         assertNull(val2A);
         tx.commit();
-    }
-
-    /**
-     * current implementation doesn't support serialized objects,
-     * the DMap interface doesn't extend Serializable
-     * @throws Exception
-     */
-    public void YYYtestSerialize() throws Exception
-    {
-        String name = "testSerialize";
-        String namedObject = "testSerialize_" + System.currentTimeMillis();
-        TransactionExt tx = (TransactionExt) odmg.newTransaction();
-
-        tx.begin();
-        DMap map = odmg.newDMap();
-
-        database.bind(map, namedObject);
-        Article key1 = createArticle(name + "_key1");
-        Article val1 = createArticle(name + "_val1");
-        Article key2 = createArticle(name + "_key2");
-        Article val2 = createArticle(name + "_val2");
-
-        map.put(key1, val1);
-        map.put(key2, val2);
-        tx.commit();
-
-
-        tx = (TransactionExt) odmg.newTransaction();
-        tx.begin();
-        tx.getBroker().clearCache();
-
-        DMapExt mapA = (DMapExt) database.lookup(namedObject);
-        assertNotNull(mapA);
-        Article val1A = (Article) mapA.get(key1);
-        assertNotNull(val1A);
-        assertEquals(val1.getArticleId(), val1A.getArticleId());
-        Article val2A = (Article) mapA.get(key2);
-        assertNotNull(val2A);
-        assertEquals(val2.getArticleId(), val2A.getArticleId());
-        tx.commit();
-
-        // serialize object
-        mapA = (DMapExt) SerializationUtils.clone(mapA);
-        tx.begin();
-        tx.lock(mapA, Transaction.WRITE);
-        mapA.remove(key1);
-        tx.commit();
-
-        tx.begin();
-        mapA = (DMapExt) database.lookup(namedObject);
-        tx.commit();
-        assertNotNull(mapA);
-        val1A = (Article) mapA.get(key1);
-        assertNull(val1A);
-        val2A = (Article) mapA.get(key2);
-        assertNotNull(val2A);
-        assertEquals(val2.getArticleId(), val2A.getArticleId());
     }
 }

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/DSetTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/DSetTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/DSetTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/DSetTest.java Sat Jul 15 07:54:38 2006
@@ -104,7 +104,7 @@
         lookedUp = (DSet) database.lookup(name);
         iter = lookedUp.iterator();
         iter1 = list.iterator();
-        assertEquals("Wrong number of DListEntry found", 8, list.size());
+        assertEquals("Wrong number of DListEntry found", list.size(), lookedUp.size());
         while (iter.hasNext())
         {
             DListTest.DObject a = (DListTest.DObject) iter.next();

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/FieldConversionTest_4.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/FieldConversionTest_4.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/FieldConversionTest_4.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/FieldConversionTest_4.java Sat Jul 15 07:54:38 2006
@@ -27,6 +27,57 @@
         junit.textui.TestRunner.main(arr);
     }
 
+    public void testSelfReferingParent() throws Exception
+    {
+        String strQuery = "select allNodes from " + Node.class.getName();
+        long id = System.currentTimeMillis();
+        Node node = new Node(id, null, true);
+        node.setParent(node);
+
+        List result;
+        int before;
+        TransactionExt tx = (TransactionExt) odmg.newTransaction();
+        try
+        {
+            tx.begin();
+
+            OQLQuery query = odmg.newOQLQuery();
+            query.create(strQuery);
+            result = (List) query.execute();
+            before = result.size();
+
+            database.makePersistent(node);
+            tx.commit();
+
+            tx.begin();
+            tx.getBroker().clearCache();
+            query = odmg.newOQLQuery();
+            query.create(strQuery);
+            result = (List) query.execute();
+            tx.commit();
+        }
+        finally
+        {
+          if (tx != null && tx.isOpen())
+          {
+              tx.abort();
+          }
+        }
+        int after = result.size();
+        assertFalse(after == 0);
+        assertEquals(before + 1, after);
+
+        tx.begin();
+        database.deletePersistent(node);
+        tx.commit();
+
+        OQLQuery query = odmg.newOQLQuery();
+        query.create(strQuery);
+        result = (List) query.execute();
+        after = result.size();
+        assertEquals(before, after);
+    }
+
     public void testMakePersistentNode() throws Exception
     {
         String strQuery = "select allNodes from " + Node.class.getName();
@@ -200,6 +251,16 @@
         public void setUid(long uid)
         {
             this.uid = uid;
+        }
+
+        public boolean isNodeState()
+        {
+            return nodeState;
+        }
+
+        public void setNodeState(boolean nodeState)
+        {
+            this.nodeState = nodeState;
         }
 
         public boolean isState()

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/InheritanceMultipleTableTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/InheritanceMultipleTableTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/InheritanceMultipleTableTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/InheritanceMultipleTableTest.java Sat Jul 15 07:54:38 2006
@@ -146,11 +146,6 @@
 
     public void testQuery_3() throws Exception
     {
-        if(ojbSkipKnownIssueProblem("References of classes (1:1, 1:n) mapped to multiple joined tables only" +
-                " return base class type instances, same thing with queries against a base type"))
-        {
-            return;
-        }
         long timestamp = System.currentTimeMillis();
         Long id_2 = new Long(timestamp);
         String name = "testInsert" + timestamp;
@@ -186,11 +181,6 @@
 
     public void testQuery_2() throws Exception
     {
-        if(ojbSkipKnownIssueProblem("References of classes (1:1, 1:n) mapped to multiple joined tables only" +
-                " return base class type instances, same thing with queries against a base type"))
-        {
-            return;
-        }
         long timestamp = System.currentTimeMillis();
         Long id_2 = new Long(timestamp);
         String name = "testInsert" + timestamp;
@@ -769,7 +759,7 @@
 
         long timestamp = System.currentTimeMillis();
         Long id_2 = new Long(timestamp);
-        String name = "testUpdate" + timestamp;
+        String name = "testDelete_" + timestamp;
         Employee em1 = new Employee(id_2, "employee_" + name);
         Executive ex1 = new Executive(id_2, "executive_" + name, "department_1", null);
         Executive ex2 = new Executive(id_2, "executive_" + name, "department_2", null);
@@ -819,6 +809,52 @@
         assertNull(newEm1);
         assertNull(newEx1);
         assertNull(newM1);
+    }
+
+    public void testDelete_2() throws Exception
+    {
+        // not all objects will be deleted
+        // arminw: fixed
+        // if (ojbSkipKnownIssueProblem()) return;
+
+        long timestamp = System.currentTimeMillis();
+        Long id_2 = new Long(timestamp);
+        String name = "testDelete_2_" + timestamp;
+        Manager m1 = new Manager(id_2, "manager_" + name);
+
+        TransactionExt tx = (TransactionExt) odmg.newTransaction();
+        tx.begin();
+        database.makePersistent(m1);
+        tx.commit();
+
+        tx.begin();
+        Identity m1_oid = tx.getBroker().serviceIdentity().buildIdentity(m1);
+        tx.getBroker().clearCache();
+        Manager newM1 = (Manager) tx.getBroker().getObjectByIdentity(m1_oid);
+        tx.commit();
+
+        assertNotNull(newM1);
+        //*************************************
+        tx.begin();
+        database.deletePersistent(newM1);
+        tx.commit();
+        //*************************************
+
+        tx.begin();
+        newM1 = (Manager) tx.getBroker().getObjectByIdentity(m1_oid);
+        tx.commit();
+
+        assertNull(newM1);
+
+        tx.begin();
+        OQLQuery query = odmg.newOQLQuery();
+        // search for entry in base class table, this should removed too
+        query.create("select m from " + Employee.class.getName() + " where name = $1");
+        query.bind(m1.getName());
+        Collection result = (Collection) query.execute();
+        tx.commit();
+
+        assertEquals(0, result.size());
     }
 
     //************************************************************

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/LockingMultithreadedTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/LockingMultithreadedTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/LockingMultithreadedTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/LockingMultithreadedTest.java Sat Jul 15 07:54:38 2006
@@ -28,7 +28,7 @@
     // number of updates each thread performs against the object
     private final int objectUpdates = 30;
     // max number of attemps to get a lock
-    private static final int maxAttempts = 100;
+    private static final int maxAttempts = 150;
     private static final int nearMax = (int) (maxAttempts * 0.75);
 
 
@@ -66,6 +66,8 @@
         LockObject targetObject = createLockObjectWithRef();
         storeObject(targetObject);
 
+        System.out.println("** Start multithreaded lock test **");
+        Thread.sleep(500);
         TestCaseRunnable tct [] = new TestCaseRunnable[concurrentThreads];
         for (int i = 0; i < concurrentThreads; i++)
         {
@@ -83,6 +85,8 @@
         System.out.println("*** Result of multithreaded lock test ***");
         System.out.println(result.toString());
         //System.out.println(targetObject.getReference().getName());
+        String statistic = ((ImplementationImpl) odmg).getLockManager().getLockInfo();
+        System.out.println("Lock-Statistic: " + statistic);
     }
 
     private LockObject createLockObjectWithRef()

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/LockingTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/LockingTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/LockingTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/LockingTest.java Sat Jul 15 07:54:38 2006
@@ -8,6 +8,7 @@
 import org.apache.ojb.broker.PersistenceBroker;
 import org.apache.ojb.broker.PersistenceBrokerFactory;
 import org.apache.ojb.broker.TestHelper;
+import org.apache.ojb.broker.Identity;
 import org.apache.ojb.broker.query.Criteria;
 import org.apache.ojb.broker.query.QueryFactory;
 import org.apache.ojb.junit.OJBTestCase;
@@ -71,6 +72,11 @@
         super.tearDown();
     }
 
+    protected Identity createIdentity(TransactionImpl tx, Object obj)
+    {
+        return tx.getBrokerInternal().serviceIdentity().buildIdentity(obj);
+    }
+
     public void testWrite_1() throws Exception
     {
         String name = "testWrite_1_" + System.currentTimeMillis();
@@ -222,10 +228,10 @@
         tx1.begin();
         tx2.begin();
         LockManager lm = ((ImplementationExt) odmg1).getLockManager();
-        boolean success1 = lm.writeLock(tx1, a);
-        boolean success2 = lm.writeLock(tx2, a);
+        boolean success1 = lm.writeLock(tx1, createIdentity(tx1, a));
+        boolean success2 = lm.writeLock(tx2, createIdentity(tx2, a));
 
-        boolean success3 = lm.releaseLock(tx1, a);
+        boolean success3 = lm.releaseLock(tx1, createIdentity(tx1, a));
 
         assertTrue("1st lock should succeed", success1);
         assertTrue("2nd lock should not succeed", !success2);
@@ -258,19 +264,19 @@
 
         assertFalse(tx1.getGUID().equals(tx2.getGUID()));
 
-        assertTrue("1st lock should succeed", lm.writeLock(tx1, a1));
-        assertFalse("2nd lock should not succeed", lm.writeLock(tx2, a2));
-        lm.releaseLock(tx2, a2);
-        lm.releaseLock(tx2, a1);
-        assertFalse(lm.checkWrite(tx2, a1));
-        assertFalse(lm.checkWrite(tx2, a2));
-        assertTrue(lm.checkWrite(tx1, a1));
-        assertTrue(lm.checkWrite(tx1, a2));
+        assertTrue("1st lock should succeed", lm.writeLock(tx1, createIdentity(tx1, a1)));
+        assertFalse("2nd lock should not succeed", lm.writeLock(tx2, createIdentity(tx2, a2)));
+        lm.releaseLock(tx2, createIdentity(tx2, a2));
+        lm.releaseLock(tx2, createIdentity(tx1, a1));
+        assertFalse(lm.checkWrite(tx2, createIdentity(tx1, a1)));
+        assertFalse(lm.checkWrite(tx2, createIdentity(tx1, a2)));
+        assertTrue(lm.checkWrite(tx1, createIdentity(tx1, a1)));
+        assertTrue(lm.checkWrite(tx1, createIdentity(tx1, a2)));
         //assertFalse("2nd release should not succeed", lm.releaseLock(tx2, a2));
         //assertFalse("2nd release should not succeed", lm.releaseLock(tx2, a1));
-        assertTrue("release should succeed", lm.releaseLock(tx1, a2));
-        assertTrue("2nd object lock should succeed", lm.writeLock(tx2, a2));
-        assertTrue("release 2nd object lock should succeed", lm.releaseLock(tx2, a2));
+        assertTrue("release should succeed", lm.releaseLock(tx1, createIdentity(tx1, a2)));
+        assertTrue("2nd object lock should succeed", lm.writeLock(tx2, createIdentity(tx1, a2)));
+        assertTrue("release 2nd object lock should succeed", lm.releaseLock(tx2, createIdentity(tx1, a2)));
 
         try
         {
@@ -323,6 +329,45 @@
         }
     }
 
+    /**
+     * test proper treatment of Optimistic Locking in
+     * ODMG transactions
+     */
+    public void testOptimisticLockBasics_2() throws Exception
+    {
+        TransactionImpl tx1 = (TransactionImpl) odmg1.newTransaction();
+        TransactionImpl tx2 = (TransactionImpl) odmg2.newTransaction();
+
+        LockObjectOpt obj = new LockObjectOpt();
+
+
+        tx1.begin();
+
+        tx1.lock(obj, Transaction.WRITE);
+        obj.setValue("tx1");
+        tx1.commit();
+
+        obj.setVersion(obj.getVersion() - 1);
+        tx2.begin();
+        db2.deletePersistent(obj);
+        try
+        {
+            tx2.commit();
+// OL exceptions should be signalled as ODMG LockNotGrantedExceptions
+// so that users can react accordingly
+            fail("Optimistic locking exception expected");
+        }
+        catch(LockNotGrantedException ex)
+        {
+            assertTrue("expected that a OL exception is caught", true);
+        }
+        catch(Exception e)
+        {
+            e.printStackTrace();
+            fail("Wrong kind of exception thrown, expected 'LockNotGrantedException', but was " + e.getMessage());
+        }
+    }
+
 
     /**
      * factory method that createa an Article
@@ -361,13 +406,13 @@
             tx.lock(arr[i], Transaction.WRITE);
         }
         LockManager lm = ((ImplementationExt) odmg1).getLockManager();
-        boolean success = lm.writeLock(tx, arr[(loops - 2)]);
+        boolean success = lm.writeLock(tx, createIdentity(tx, arr[(loops - 2)]));
         assertTrue("lock should succeed", success);
         tx.commit();
 
         TransactionImpl tx2 = (TransactionImpl) odmg2.newTransaction();
         tx2.begin();
-        success = lm.writeLock(tx2, arr[(loops - 2)]);
+        success = lm.writeLock(tx2, createIdentity(tx2, arr[(loops - 2)]));
         assertTrue("lock should succeed", success);
 
         OQLQuery query = odmg2.newOQLQuery();

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/ManyToManyTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/ManyToManyTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/ManyToManyTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/ManyToManyTest.java Sat Jul 15 07:54:38 2006
@@ -169,8 +169,8 @@
     public void testMtoNTogether() throws Exception
     {
         long timestamp = System.currentTimeMillis();
-        Fish tuna = new Fish("tuna_" + timestamp, 242, "salt");
-        Fish trout = new Fish("trout_" + timestamp, 52, "fresh water");
+        Fish tuna = new Fish("tuna_2" + timestamp, 100, "salt_2");
+        Fish trout = new Fish("trout_2" + timestamp, 101, "fresh water_2");
 
         ODMGGourmet paula = new ODMGGourmet("a_testMtoNTogether");
         ODMGGourmet candy = new ODMGGourmet("b_testMtoNTogether");

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/NamedRootsTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/NamedRootsTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/NamedRootsTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/NamedRootsTest.java Sat Jul 15 07:54:38 2006
@@ -47,8 +47,8 @@
     private Article createArticle()
     {
         Article example = new Article();
-        example.setArticleName(testProductGroup.getName());
-        example.setProductGroupId(testProductGroup.getId());
+        example.setArticleName(testProductGroup.getGroupName());
+        example.setProductGroupId(testProductGroup.getGroupId());
         return example;
     }
 

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/ODMGRollbackTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/ODMGRollbackTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/ODMGRollbackTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/ODMGRollbackTest.java Sat Jul 15 07:54:38 2006
@@ -632,8 +632,9 @@
 
     protected void deleteAll(Implementation odmg, Class target) throws Exception
     {
-        Transaction tx = odmg.newTransaction();
+        TransactionExt tx = (TransactionExt) odmg.newTransaction();
         tx.begin();
+        tx.setCascadingDelete(target, true);
         OQLQuery query = odmg.newOQLQuery();
         query.create("select allObjects from " + target.getName());
         List list = (List) query.execute();

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/OQLOrOnForeignKeyTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/OQLOrOnForeignKeyTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/OQLOrOnForeignKeyTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/OQLOrOnForeignKeyTest.java Sat Jul 15 07:54:38 2006
@@ -1,6 +1,6 @@
 package org.apache.ojb.odmg;
 
-/* Copyright 2002-2004 The Apache Software Foundation
+/* Copyright 2002-2005 The Apache Software Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/OQLTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/OQLTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/OQLTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/OQLTest.java Sat Jul 15 07:54:38 2006
@@ -179,7 +179,7 @@
         tx.commit();
 	}
 
-    public void testQueryIn() throws Exception
+	public void testQueryIn() throws Exception
 	{
 		// deleteData(database, odmg, Article.class);
 
@@ -654,6 +654,11 @@
             return age;
         }
 
+        public void setAge(int age)
+        {
+            this.age = age;
+        }
+
         public int getNumLegs()
         {
             return numLegs;
@@ -688,6 +693,11 @@
         public int getAge()
         {
             return age;
+        }
+
+        public void setAge(int age)
+        {
+            this.age = age;
         }
 
         public int getAnimalId()

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/ObjectImageTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/ObjectImageTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/ObjectImageTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/ObjectImageTest.java Sat Jul 15 07:54:38 2006
@@ -20,10 +20,15 @@
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
+import java.util.Iterator;
 
 import org.apache.commons.lang.SerializationUtils;
+import org.apache.commons.lang.SystemUtils;
+import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.ojb.broker.Identity;
-import org.apache.ojb.broker.PersistenceBrokerInternal;
+import org.apache.ojb.broker.query.Criteria;
+import org.apache.ojb.broker.query.Query;
+import org.apache.ojb.broker.query.QueryFactory;
 import org.apache.ojb.broker.core.proxy.CollectionProxy;
 import org.apache.ojb.broker.core.proxy.CollectionProxyListener;
 import org.apache.ojb.broker.core.proxy.IndirectionHandler;
@@ -42,15 +47,270 @@
  *
  * Test cases for refactored odmg-api implementation. These tests asserts previously outstanding
  * ODMG-issues and proxy object handling in the ODMG API.
- * 
+ *
  * @author <a href="mailto:arminw@apache.org">Armin Waibel</a>
  * @version $Id$
  */
 public class ObjectImageTest extends ODMGTestCase
 {
+    static final int NONE = ObjectReferenceDescriptor.CASCADE_NONE;
+    static final int LINK = ObjectReferenceDescriptor.CASCADE_LINK;
+    static final int OBJECT = ObjectReferenceDescriptor.CASCADE_OBJECT;
+    static final String EOL = SystemUtils.LINE_SEPARATOR;
+
+    public static void main(String[] args)
+    {
+        junit.textui.TestRunner.main(new String[]{ObjectImageTest.class.getName()});
+    }
+
+    public void testReplaceOneToOneReference() throws Exception
+    {
+        String prefix = "testReplaceOneToOneReference_" + System.currentTimeMillis();
+        ojbChangeReferenceSetting(Book.class, "reviews", true, NONE, NONE, false);
+
+        TransactionExt tx = (TransactionExt) odmg.newTransaction();
+        tx.begin();
+        Book book = new Book(prefix, null, null);
+        Publisher p_1 = new PublisherImpl(prefix);
+        Publisher p_2 = new PublisherImpl(prefix + "_replaced");
+        book.setPublisher(p_1);
+        database.makePersistent(book);
+        database.makePersistent(p_1);
+        database.makePersistent(p_2);
+        tx.commit();
+
+        Integer book_version = book.getVersion();
+        Integer p1_version = p_1.getVersion();
+        Integer p2_version = p_2.getVersion();
+
+        tx.begin();
+        tx.lock(book, Transaction.WRITE);
+        tx.lock(book.getPublisher(), Transaction.READ);
+        tx.lock(p_2, Transaction.READ);
+        book.setPublisher(p_2);
+        tx.commit();
+
+        assertEquals(book_version.intValue() + 1, book.getVersion().intValue());
+        assertEquals(p1_version, p_1.getVersion());
+        assertEquals(p2_version, p_2.getVersion());
+    }
+
+    public void testAddCollectionObjectToExistingObject() throws Exception
+    {
+        String prefix = "testAddCollectionObjectToExistingObject_" + System.currentTimeMillis();
+        ojbChangeReferenceSetting(Book.class, "reviews", true, NONE, NONE, false);
+
+        TransactionExt tx = (TransactionExt) odmg.newTransaction();
+        tx.begin();
+        Book book = new Book(prefix, null, null);
+        Review r1 = new Review(prefix + "_1");
+        database.makePersistent(book);
+        database.makePersistent(r1);
+        tx.commit();
+
+        Integer book_version = book.getVersion();
+        Integer r_1_version = r1.getVersion();
+
+        Review r2 = new Review(prefix + "_2");
+        tx.begin();
+        tx.lock(r1, Transaction.WRITE);
+        tx.lock(book, Transaction.READ);
+        book.addReview(r1);
+        book.addReview(r2);
+        database.makePersistent(r2);
+        tx.commit();
+
+        assertEquals(book_version, book.getVersion());
+        assertTrue(book.getId() != null);
+
+        Integer r_2_version = r2.getVersion();
+
+        tx.begin();
+        tx.getBroker().clearCache();
+        Book loadedCopy = (Book) tx.getBroker().getObjectByIdentity(
+                tx.getBroker().serviceIdentity().buildIdentity(Book.class, book.getId()));
+        assertNotNull(loadedCopy);
+        assertNotNull(loadedCopy.getReviews());
+        assertEquals(2, loadedCopy.getReviews().size());
+        assertEquals(book_version, loadedCopy.getVersion());
+        Review new_r1 = (Review) loadedCopy.getReviews().get(0);
+        Review new_r2 = (Review) loadedCopy.getReviews().get(1);
+        assertEquals(r_1_version.intValue() + 1, new_r1.getVersion().intValue());
+        assertEquals(r_2_version, new_r2.getVersion());
+
+        tx.getBroker().clearCache();
+        Criteria criteria = new Criteria();
+        criteria.addLike("title", prefix);
+        Query q = QueryFactory.newQuery(Book.class, criteria);
+        Collection books = tx.getBroker().getCollectionByQuery(q);
+        assertNotNull(books);
+        assertEquals(1, books.size());
+        Book new_book = (Book) books.iterator().next();
+        tx.commit();
+        assertEquals(book_version, new_book.getVersion());
+
+        tx.begin();
+        tx.lock(loadedCopy, Transaction.WRITE);
+        Review removed = (Review) loadedCopy.getReviews().remove(0);
+        Review stayed =  (Review) loadedCopy.getReviews().get(0);
+        tx.commit();
+        // expect same version, nothing should be changed
+        assertEquals(r_2_version, stayed.getVersion());
+        //
+        //assertEquals(r_1_version, removed.getVersion());
+
+        tx.begin();
+        OQLQuery query = odmg.newOQLQuery();
+        query.create("select books from " + Book.class.getName() + " where title like $1");
+        query.bind(prefix);
+        Collection result = (Collection) query.execute();
+        assertEquals(1, result.size());
+        Book b = (Book) result.iterator().next();
+        tx.commit();
+
+        assertEquals(1, b.getReviews().size());
+        Review r = (Review) b.getReviews().get(0);
+        if(!r.equals(r1) && !r.equals(r2))
+        {
+            fail("Wrong object or wrong object version returned. Returned obj was "
+                    + EOL + r + " expected object was " + EOL + r1 + " or " + EOL + r2);
+        }
+    }
+
+    /**
+     * test persistence by reachability of collection reference objects
+     */
+    public void testPersistenceByReachability_1() throws Exception
+    {
+        String name = "testPersistenceByReachability_1_" + System.currentTimeMillis();
+        ojbChangeReferenceSetting(Book.class, "reviews", true, NONE, NONE, true);
+
+        Date date = new Date();
+        byte[] cover = new byte[]{2,3,4,5,6,7,8,9};
+        Book book = new Book(name, date, cover);
+        Review r1 = new Review(name);
+        Review r2 = new Review(name);
+        Review r3 = new Review(name + "_not_persistent");
+        ArrayList reviews = new ArrayList();
+        reviews.add(r1);
+        reviews.add(r2);
+        reviews.add(r3);
+        book.setReviews(reviews);
+
+        TransactionExt tx = (TransactionExt) odmg.newTransaction();
+        tx.begin();
+        database.makePersistent(book);
+        Review r4 = new Review(name + "_new_added");
+        // add a new review after make persistent main object
+        book.addReview(r4);
+        tx.setCascadingDelete(Book.class, true);
+        // remove object after make persistent main object
+        book.removeReview(r3);
+        tx.commit();
+        // System.err.println("## Insert main object with 3 referecnes");
+
+        tx.begin();
+        tx.getBroker().clearCache();
+
+        OQLQuery query = odmg.newOQLQuery();
+        query.create("select books from " + Book.class.getName() + " where title like $1");
+        query.bind(name);
+        Collection result = (Collection) query.execute();
+        assertEquals(1, result.size());
+        Book b = (Book) result.iterator().next();
+        assertNotNull(b.getReviews());
+        assertEquals(3, b.getReviews().size());
+
+        query = odmg.newOQLQuery();
+        query.create("select reviews from " + Review.class.getName() + " where summary like $1");
+        query.bind(name + "_new_added");
+        result = (Collection) query.execute();
+        // we expect the delayed added Review object
+        assertEquals(1, result.size());
+
+        query = odmg.newOQLQuery();
+        query.create("select reviews from " + Review.class.getName() + " where summary like $1");
+        query.bind(name + "_not_persistent");
+        result = (Collection) query.execute();
+        // we expect the removed Review object wasn't persistet
+        assertEquals(0, result.size());
+        tx.commit();
+    }
+
+    /**
+     * test persistence by reachability of collection reference objects
+     */
+    public void testPersistenceByReachability_2() throws Exception
+    {
+        String name = "testPersistenceByReachability_2_" + System.currentTimeMillis();
+        ojbChangeReferenceSetting(Book.class, "reviews", true, NONE, NONE, true);
+
+        Date date = new Date();
+        byte[] cover = new byte[]{2,3,4,5,6,7,8,9};
+        Book book = new Book(name, date, cover);
+        Review r1 = new Review(name);
+        Review r2 = new Review(name);
+        Review r3 = new Review(name + "_not_persistent");
+        ArrayList reviews = new ArrayList();
+        reviews.add(r1);
+        reviews.add(r2);
+        reviews.add(r3);
+        book.setReviews(reviews);
+
+        TransactionExt tx = (TransactionExt) odmg.newTransaction();
+        tx.begin();
+        database.makePersistent(book);
+        Review r4 = new Review(name + "_new_added");
+        // add a new review after make persistent main object
+        book.addReview(r4);
+        tx.setCascadingDelete(Book.class, true);
+        // remove object after make persistent main object
+        book.removeReview(r3);
+        tx.checkpoint();
+
+        //tx.begin();
+        tx.getBroker().clearCache();
+
+        OQLQuery query = odmg.newOQLQuery();
+        query.create("select books from " + Book.class.getName() + " where title like $1");
+        query.bind(name);
+        Collection result = (Collection) query.execute();
+        assertEquals(1, result.size());
+        Book b = (Book) result.iterator().next();
+        assertNotNull(b.getReviews());
+        assertEquals(3, b.getReviews().size());
+
+        query = odmg.newOQLQuery();
+        query.create("select reviews from " + Review.class.getName() + " where summary like $1");
+        query.bind(name + "_new_added%");
+        result = (Collection) query.execute();
+        // we expect the delayed added Review object
+        assertEquals(1, result.size());
+
+        query = odmg.newOQLQuery();
+        query.create("select reviews from " + Review.class.getName() + " where summary like $1");
+        query.bind(name + "_not_persistent");
+        result = (Collection) query.execute();
+        // we expect the removed Review object wasn't persistet
+        assertEquals(0, result.size());
+
+        b.setTitle(name + "_updated");
+        tx.commit();
+
+        query = odmg.newOQLQuery();
+        query.create("select books from " + Book.class.getName() + " where title like $1");
+        query.bind(name + "_updated");
+        result = (Collection) query.execute();
+        assertEquals(1, result.size());
+        Book b_updated = (Book) result.iterator().next();
+        assertNotNull(b_updated.getReviews());
+        assertEquals(3, b_updated.getReviews().size());
+        assertEquals(name+"_updated", b_updated.getTitle());
+    }
+
     public void testAddPersistentObjectTo1toN() throws Exception
     {
-        String name = "testAddPersistentObjectOnNSide_" + System.currentTimeMillis();
+        String name = "testAddPersistentObjectTo1toN_" + System.currentTimeMillis();
         Review review = new Review(name);
         TransactionExt tx = (TransactionExt) odmg.newTransaction();
         tx.begin();
@@ -87,7 +347,7 @@
 
     public void testAddPersistentObjectToMtoN() throws Exception
     {
-        String name = "testAddPersistentObjectOnNSide_" + System.currentTimeMillis();
+        String name = "testAddPersistentObjectToMtoN_" + System.currentTimeMillis();
         Author author = new Author(name, null);
         TransactionExt tx = (TransactionExt) odmg.newTransaction();
         tx.begin();
@@ -265,9 +525,8 @@
     public void testChangeOneToOneReference_1b() throws Exception
     {
         String name = "testChangeOneToOneReference_1b_" + System.currentTimeMillis();
-        ojbChangeReferenceSetting(Book.class, "publisher", true,
-                ObjectReferenceDescriptor.CASCADE_LINK,
-                ObjectReferenceDescriptor.CASCADE_LINK, true);
+        ojbChangeReferenceSetting(Book.class, "publisher", true, NONE, NONE, true);
+
         Date date = new Date();
         byte[] cover = new byte[]{2,3,4,5,6,7,8,9};
         Book book = new Book(name, date, cover);
@@ -445,9 +704,7 @@
      */
     public void testChangeOneToOneReference_4() throws Exception
     {
-        ojbChangeReferenceSetting(Book.class, "publisher", true,
-                ObjectReferenceDescriptor.CASCADE_LINK,
-                ObjectReferenceDescriptor.CASCADE_LINK, true);
+        ojbChangeReferenceSetting(Book.class, "publisher", true, NONE, NONE, true);
         String name = "testChangeOneToOneReference_4_" + System.currentTimeMillis();
         Date date = new Date();
         byte[] cover = new byte[]{2,3,4,5,6,7,8,9};
@@ -470,7 +727,7 @@
         Collection result = (Collection) query.execute();
         assertEquals(1, result.size());
         Book b = (Book) result.iterator().next();
-        IndirectionHandler handler = ((PersistenceBrokerInternal)tx.getBroker()).getProxyFactory().getIndirectionHandler(b.getPublisher());
+        IndirectionHandler handler = getProxyFactory(tx).getIndirectionHandler(b.getPublisher());
         assertNotNull(handler);
         assertFalse(handler.alreadyMaterialized());
         handler.addListener(
@@ -497,9 +754,7 @@
      */
     public void testChangeOneToOneReference_5() throws Exception
     {
-        ojbChangeReferenceSetting(Book.class, "publisher", true,
-                ObjectReferenceDescriptor.CASCADE_LINK,
-                ObjectReferenceDescriptor.CASCADE_LINK, true);
+        ojbChangeReferenceSetting(Book.class, "publisher", true, NONE, NONE, true);
         String name = "testChangeOneToOneReference_5_" + System.currentTimeMillis();
         Date date = new Date();
         byte[] cover = new byte[]{2,3,4,5,6,7,8,9};
@@ -524,7 +779,7 @@
         Collection result = (Collection) query.execute();
         assertEquals(1, result.size());
         Book b = (Book) result.iterator().next();
-        IndirectionHandler handler = ((PersistenceBrokerInternal)tx.getBroker()).getProxyFactory().getIndirectionHandler(b.getPublisher());
+        IndirectionHandler handler = getProxyFactory(tx).getIndirectionHandler(b.getPublisher());
         assertNotNull(handler);
         assertFalse(handler.alreadyMaterialized());
         handler.addListener(
@@ -564,6 +819,7 @@
         assertEquals(1, result.size());
         b = (Book) result.iterator().next();
         Publisher newP = b.getPublisher();
+        assertNotNull(newP);
         assertEquals(name+"_new", newP.getName());
     }
 
@@ -783,10 +1039,7 @@
     public void testCollectionReference_1() throws Exception
     {
         String name = "testCollectionReference_1_" + System.currentTimeMillis();
-
-        ojbChangeReferenceSetting(Book.class, "reviews", true,
-                ObjectReferenceDescriptor.CASCADE_LINK,
-                ObjectReferenceDescriptor.CASCADE_NONE, true);
+        ojbChangeReferenceSetting(Book.class, "reviews", true, NONE, NONE, true);
 
         Date date = new Date();
         byte[] cover = new byte[]{2,3,4,5,6,7,8,9};
@@ -814,7 +1067,7 @@
         Collection result = (Collection) query.execute();
         assertEquals(1, result.size());
         Book b = (Book) result.iterator().next();
-        CollectionProxy handler = ((PersistenceBrokerInternal)tx.getBroker()).getProxyFactory().getCollectionProxy(b.getReviews());
+        CollectionProxy handler = getProxyFactory(tx).getCollectionProxy(b.getReviews());
         assertFalse("Don't expect an materialized collection proxy", handler.isLoaded());
         handler.addListener(new CollectionProxyListener()
         {
@@ -920,9 +1173,7 @@
     {
         String name = "testCollectionReference_2b_" + System.currentTimeMillis();
 
-        ojbChangeReferenceSetting(Book.class, "reviews", true,
-                ObjectReferenceDescriptor.CASCADE_LINK,
-                ObjectReferenceDescriptor.CASCADE_NONE, true);
+        ojbChangeReferenceSetting(Book.class, "reviews", true, NONE, NONE, true);
 
         Date date = new Date();
         byte[] cover = new byte[]{2,3,4,5,6,7,8,9};
@@ -1357,8 +1608,18 @@
         assertNotNull(b.getAuthors());
         assertEquals(2, b.getAuthors().size());
         Author newA = (Author) b.getAuthors().get(0);
-        // as we have circular references we expect the same object instance
-        assertTrue(newA==((Review) b.getReviews().get(0)).getAuthor());
+        boolean failed = true;
+        for(Iterator iterator = b.getReviews().iterator(); iterator.hasNext();)
+        {
+            Review review =  (Review) iterator.next();
+            if(newA.equals(review.getAuthor()))
+            {
+                // as we have circular references we expect the same object instance
+                assertSame(newA, review.getAuthor());
+                failed = false;
+            }
+        }
+        if(failed) fail("Expect the same object instance, but not found for " + newA);
 
         // Book instance should be already locked
         // now mark Book for delete and disable cascading delete
@@ -1396,11 +1657,6 @@
         assertEquals(0, result.size());
     }
 
-    public static void main(String[] args)
-    {
-        junit.textui.TestRunner.main(new String[]{ObjectImageTest.class.getName()});
-    }
-
     //=======================================================
     // inner test classes
     //=======================================================
@@ -1445,6 +1701,12 @@
             reviews.add(review);
         }
 
+        public boolean removeReview(Review review)
+        {
+            if(reviews != null) return reviews.remove(review);
+            else return false;
+        }
+
         public Integer getId()
         {
             return id;
@@ -1714,6 +1976,23 @@
         public void setAuthor(Author author)
         {
             this.author = author;
+        }
+
+        public boolean equals(Object obj)
+        {
+            boolean result = false;
+            if(obj instanceof Review)
+            {
+                Review other = (Review) obj;
+                result = new EqualsBuilder()
+                        .append(id, other.id)
+                        .append(summary, other.summary)
+                        .append(version, other.version)
+                        .append(fkBook, other.fkBook)
+                        .append(author, other.author)
+                        .isEquals();
+            }
+            return result;
         }
     }
 

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/OdmgExamples.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/OdmgExamples.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/OdmgExamples.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/OdmgExamples.java Sat Jul 15 07:54:38 2006
@@ -4,8 +4,9 @@
 
 import org.apache.ojb.broker.Identity;
 import org.apache.ojb.broker.PersistenceBroker;
+import org.apache.ojb.broker.TestHelper;
 import org.apache.ojb.broker.metadata.ClassDescriptor;
-import org.apache.ojb.junit.ODMGTestCase;
+import org.apache.ojb.junit.OJBTestCase;
 import org.apache.ojb.odmg.collections.DListImpl;
 import org.apache.ojb.odmg.shared.Article;
 import org.apache.ojb.odmg.shared.ProductGroup;
@@ -22,7 +23,7 @@
 /** Demo Application that shows basic concepts for Applications using the OJB ODMG
  * implementation as an transactional object server.
  */
-public class OdmgExamples extends ODMGTestCase
+public class OdmgExamples extends OJBTestCase
 {
     public static void main(String[] args)
     {
@@ -30,24 +31,38 @@
         junit.textui.TestRunner.main(arr);
     }
 
+    private String databaseName;
+
     public OdmgExamples(String name)
     {
         super(name);
     }
 
-    public void setUp() throws Exception
+    public void setUp()
     {
-        super.setUp();
+        databaseName = TestHelper.DEF_DATABASE_NAME;
     }
 
-    public void tearDown() throws Exception
+    public void tearDown()
     {
-        super.tearDown();
+        databaseName = null;
     }
 
     /**TestThreadsNLocks state transition of modification states*/
     public void testModificationStates()
     {
+        // get facade instance
+        Implementation odmg = OJB.getInstance();
+        Database db = odmg.newDatabase();
+        //open database
+        try
+        {
+            db.open(databaseName, Database.OPEN_READ_WRITE);
+        }
+        catch (ODMGException ex)
+        {
+            fail("ODMGException: " + ex.getMessage());
+        }
         ModificationState oldState = StateNewClean.getInstance();
         ModificationState newState = oldState.markDirty();
         assertEquals(StateNewDirty.getInstance(), newState);
@@ -55,10 +70,33 @@
         oldState = newState;
         newState = oldState.markDirty();
         assertEquals(oldState, newState);
+
+        // close database
+        try
+        {
+            db.close();
+        }
+        catch (ODMGException ex)
+        {
+            fail("ODMGException: " + ex.getMessage());
+        }
+
     }
 
     public void testOdmgSession()
     {
+        // get facade instance
+        Implementation odmg = OJB.getInstance();
+        Database db = odmg.newDatabase();
+        //open database
+        try
+        {
+            db.open(databaseName, Database.OPEN_READ_WRITE);
+        }
+        catch (ODMGException ex)
+        {
+            fail("ODMGException: " + ex.getMessage());
+        }
         Transaction tx = odmg.newTransaction();
 
         //perform transaction
@@ -67,11 +105,11 @@
             tx.begin();
 
             ProductGroup pg = new ProductGroup();
-            pg.setName("PG A");
+            pg.setGroupName("PG A");
             Article example = new Article();
             example.setProductGroup(pg);
             pg.addArticle(example);
-            database.makePersistent(pg);
+            db.makePersistent(pg);
 
             // modify Object after persist call is allowed
             example.setStock(333);
@@ -86,10 +124,32 @@
         {
             tx.abort();
         }
+
+        // close database
+        try
+        {
+            db.close();
+        }
+        catch (ODMGException ex)
+        {
+            fail("ODMGException: " + ex.getMessage());
+        }
     }
 
     public void testOQLQuery()
     {
+        // get facade instance
+        Implementation odmg = OJB.getInstance();
+        Database db = odmg.newDatabase();
+        //open database
+        try
+        {
+            db.open(databaseName, Database.OPEN_READ_WRITE);
+        }
+        catch (ODMGException ex)
+        {
+            fail("ODMGException: " + ex.getMessage());
+        }
         Transaction tx = odmg.newTransaction();
 
         //perform transaction
@@ -107,7 +167,7 @@
             // 1. get OID
             Article example = new Article();
             example.setArticleId(60);
-            Identity oid = new Identity(example, ((TransactionImpl) tx).getBroker());
+            Identity oid = ((TransactionExt) tx).getBroker().serviceIdentity().buildIdentity(example);
             // 2. lookup object by OID
             PersistenceBroker broker = ((TransactionImpl) tx).getBroker();
             broker.clearCache();
@@ -123,10 +183,32 @@
             tx.abort();
             fail("ODMGException: " + ex.getMessage());
         }
+
+        // close database
+        try
+        {
+            db.close();
+        }
+        catch (ODMGException ex)
+        {
+            fail("ODMGException: " + ex.getMessage());
+        }
     }
 
     public void testPathExpressionOqlQuery() throws Exception
     {
+        // get facade instance
+        Implementation odmg = OJB.getInstance();
+        Database db = odmg.newDatabase();
+        //open database
+        try
+        {
+            db.open(databaseName, Database.OPEN_READ_WRITE);
+        }
+        catch (ODMGException ex)
+        {
+            fail("ODMGException: " + ex.getMessage());
+        }
         Transaction tx = odmg.newTransaction();
 
         // perform transaction
@@ -147,14 +229,32 @@
                     "select aPG from " + ProductGroup.class.getName() + " where groupName like \"Fruit*\"");
         ProductGroup pg = (ProductGroup) check.get(0);
 
-        assertEquals(pg.getAllArticlesInGroup().size(), results.size());
         assertTrue((results.size() > 0));
+        assertNotNull(pg.getAllArticlesInGroup());
+        assertEquals(pg.getAllArticlesInGroup().size(), results.size());
 
         tx.commit();
+
+
+        // close database
+
+        db.close();
     }
 
     public void testNrmAndDlists() throws Exception
     {
+        // get facade instance
+        Implementation odmg = OJB.getInstance();
+        Database db = odmg.newDatabase();
+        //open database
+        try
+        {
+            db.open(databaseName, Database.OPEN_READ_WRITE);
+        }
+        catch (ODMGException ex)
+        {
+            fail("ODMGException: " + ex.getMessage());
+        }
         Transaction tx = odmg.newTransaction();
 
         //perform transaction
@@ -162,7 +262,7 @@
         {
             //=============================
             // this test needs DList impl as oql query collection class
-            odmg.setOqlCollectionClass(DListImpl.class);
+            ((ImplementationImpl) odmg).setOqlCollectionClass(DListImpl.class);
             //=============================
 
             tx.begin();
@@ -178,7 +278,7 @@
 
             String name = "gimme fruits_" + System.currentTimeMillis();
 
-            database.bind(results, name);
+            db.bind(results, name);
             tx.commit();
 
             tx = odmg.newTransaction();
@@ -187,7 +287,7 @@
             ((TransactionImpl) tx).getBroker().clearCache();
 
             // look it up again
-            List newResults = (List) database.lookup(name);
+            List newResults = (List) db.lookup(name);
 
             assertEquals(originalSize, newResults.size());
             Article art = (Article) newResults.get(0);
@@ -203,10 +303,32 @@
             tx.abort();
             throw e;
         }
+
+        // close database
+        try
+        {
+            db.close();
+        }
+        catch (ODMGException ex)
+        {
+            fail("ODMGException: " + ex.getMessage());
+        }
     }
 
     public void testOQLQueryBind()
     {
+        // get facade instance
+        Implementation odmg = OJB.getInstance();
+        Database db = odmg.newDatabase();
+        //open database
+        try
+        {
+            db.open(databaseName, Database.OPEN_READ_WRITE);
+        }
+        catch (ODMGException ex)
+        {
+            fail("ODMGException: " + ex.getMessage());
+        }
         Transaction tx = odmg.newTransaction();
 
         //perform transaction
@@ -226,7 +348,7 @@
             // 1. get OID
             Article example = new Article();
             example.setArticleId(30);
-            Identity oid = new Identity(example, ((TransactionImpl) tx).getBroker());
+            Identity oid = ((TransactionImpl) tx).getBroker().serviceIdentity().buildIdentity(example);
 
             // 2. lookup object by OID
             PersistenceBroker broker = ((TransactionImpl) tx).getBroker();
@@ -244,32 +366,55 @@
             tx.abort();
             fail("ODMGException: " + ex.getMessage());
         }
+
+        // close database
+        try
+        {
+            db.close();
+        }
+        catch (ODMGException ex)
+        {
+            fail("ODMGException: " + ex.getMessage());
+        }
     }
 
     public void YYYtestOQLQueryOnCollections() throws Exception
     {
+        // get facade instance
+        Implementation odmg = OJB.getInstance();
+        Database db = odmg.newDatabase();
+        //open database
+        db.open(databaseName, Database.OPEN_READ_WRITE);
         Transaction tx = odmg.newTransaction();
 
         //perform transaction
-        tx.begin();
-        OQLQuery query = odmg.newOQLQuery();
-        query.create("select aLotOfArticles from " + Article.class.getName() + " where productGroupId = 4");
+        try
+        {
+            tx.begin();
+            OQLQuery query = odmg.newOQLQuery();
+            query.create("select aLotOfArticles from " + Article.class.getName() + " where productGroupId = 4");
 
-        DCollection results = (DCollection) query.execute();
-        results = results.query("price > 35");
+            DCollection results = (DCollection) query.execute();
+            results = results.query("price > 35");
 
-        // now perform control query
-        query = odmg.newOQLQuery();
-        query.create(
-                "select aLotOfArticles from "
-                + Article.class.getName()
-                + " where productGroupId = 4 and price  > 35");
+            // now perform control query
+            query = odmg.newOQLQuery();
+            query.create(
+                    "select aLotOfArticles from "
+                    + Article.class.getName()
+                    + " where productGroupId = 4 and price  > 35");
 
-        DCollection check = (DCollection) query.execute();
+            DCollection check = (DCollection) query.execute();
 
-        assertEquals(results, check);
+            assertEquals(results, check);
 
-        tx.commit();
+            tx.commit();
+        }
+                // close database
+        finally
+        {
+            db.close();
+        }
     }
 
     /**try to open non-existing db*/
@@ -288,18 +433,29 @@
         }
         catch (ODMGException ex)
         {
-            // expected exception
-            assertTrue(true);
+            return;
         }
     }
 
     /**try to crash odmg and broker tx*/
     public void YYYtestBrokerCrash()
     {
-        PersistenceBroker broker;
+        // get facade instance
+        Implementation odmg = OJB.getInstance();
+        Database db = odmg.newDatabase();
+        PersistenceBroker broker = null;
         ClassDescriptor cld = null;
         String tablename = null;
 
+        //open database
+        try
+        {
+            db.open(databaseName, Database.OPEN_READ_WRITE);
+        }
+        catch (ODMGException ex)
+        {
+            fail("ODMGException: " + ex.getMessage());
+        }
         try
         {
             Transaction tx = odmg.newTransaction();
@@ -330,7 +486,9 @@
         }
         finally
         {
-            if(tablename != null) cld.setTableName(tablename);
+            cld.setTableName(tablename);
+            broker.getDescriptorRepository().setClassDescriptor(cld);
         }
+
     }
 }

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/PersonWithArrayTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/PersonWithArrayTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/PersonWithArrayTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/PersonWithArrayTest.java Sat Jul 15 07:54:38 2006
@@ -8,10 +8,13 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.List;
 
 import org.apache.ojb.junit.ODMGTestCase;
 import org.apache.ojb.odmg.shared.Person;
 import org.apache.ojb.odmg.shared.PersonImpl;
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.collections.ListUtils;
 import org.odmg.OQLQuery;
 import org.odmg.Transaction;
 
@@ -262,10 +265,14 @@
         assertNotNull(lookupFather);
         assertEquals(returnedFather.getFirstname(), lookupFather.getFirstname());
         // unfortunately, PersonImpl does not have a suitable equals method.
-        assertEquals(
-                "children's names are equal",
-                Arrays.asList(getFirstNames(returnedChildren)),
-                Arrays.asList(getFirstNames(children)));
+// comment out, because of child object order problem (it's not a bug, it's bad test writing)
+//        assertEquals(
+//                "children's names are equal",
+//                Arrays.asList(getFirstNames(returnedChildren)),
+//                Arrays.asList(getFirstNames(children)));
+        // we expect the same names in both array, thus intersection result have to be '2'
+        List list = ListUtils.intersection(Arrays.asList(getFirstNames(returnedChildren)), Arrays.asList(getFirstNames(children)));
+        assertEquals(2, list.size());
         // System.out.println(Arrays.asList(getFirstNames(returnedChildren)));
         tx.commit();
 

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/RITest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/RITest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/RITest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/RITest.java Sat Jul 15 07:54:38 2006
@@ -1,7 +1,11 @@
 package org.apache.ojb.odmg;
 
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
 import org.apache.ojb.broker.Contract;
-import org.apache.ojb.broker.Identity;
 import org.apache.ojb.junit.ODMGTestCase;
 import org.apache.ojb.odmg.shared.DetailFKinPK;
 import org.apache.ojb.odmg.shared.DetailFKnoPK;
@@ -10,11 +14,6 @@
 import org.odmg.OQLQuery;
 import org.odmg.Transaction;
 
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Vector;
-import java.util.List;
-
 /** Demo Application that shows basic concepts for Applications using the OJB ODMG
  * implementation as an transactional object server.
  */
@@ -97,7 +96,7 @@
         Master master = new Master();
         master.masterText = "Master_timestamp_" + timestamp;
         master.collDetailFKnoPK = new Vector();
-        new Identity(master, ((HasBroker) tx).getBroker());
+        ((TransactionExt) tx).getBroker().serviceIdentity().buildIdentity(master);
         for (int i = 0; i < countDetailObjects; i++)
         {
             DetailFKnoPK aDetail = new DetailFKnoPK();
@@ -114,7 +113,7 @@
         Master master = new Master();
         master.masterText = "Master_timestamp_" + timestamp;
         master.collDetailFKinPK = new Vector();
-        new Identity(master, ((HasBroker) tx).getBroker());
+        ((TransactionExt) tx).getBroker().serviceIdentity().buildIdentity(master);
         for (int i = 0; i < countDetailObjects; i++)
         {
             DetailFKinPK aDetail = new DetailFKinPK();

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/ScrollableQueryResultsTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/ScrollableQueryResultsTest.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/ScrollableQueryResultsTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/ScrollableQueryResultsTest.java Sat Jul 15 07:54:38 2006
@@ -119,7 +119,7 @@
         // 3. Get a list of some articles
         Transaction tx = odmg.newTransaction();
         tx.begin();
-        EnhancedOQLQuery query = odmg.newOQLQuery();
+        EnhancedOQLQuery query = (EnhancedOQLQuery) odmg.newOQLQuery();
         String sql = "select somePersons from " + Person.class.getName();
         query.create(sql, start, end);
         Collection somePersons = (Collection) query.execute();
@@ -162,7 +162,7 @@
             Transaction tx = odmg.newTransaction();
             tx.begin();
 
-            EnhancedOQLQuery query = odmg.newOQLQuery();
+            EnhancedOQLQuery query = (EnhancedOQLQuery) odmg.newOQLQuery();
             String sql = "select somePersons from " + Person.class.getName();
             query.create(sql, start, end);
             Collection somePersons = (Collection) query.execute();
@@ -221,7 +221,7 @@
             return;
         }
 
-        EnhancedOQLQuery query = odmg.newOQLQuery();
+        EnhancedOQLQuery query = (EnhancedOQLQuery) odmg.newOQLQuery();
         String sql = "select somePersons from " + Person.class.getName();
         query.create(sql, start, end);
         Collection somePersons = (Collection) query.execute();
@@ -256,7 +256,7 @@
         try
         {
             tx.begin();
-            EnhancedOQLQuery query = odmg.newOQLQuery();
+            EnhancedOQLQuery query = (EnhancedOQLQuery) odmg.newOQLQuery();
             String sql = "select somePersons from " + Person.class.getName();
             query.create(sql, start, end);
             query.execute();
@@ -282,7 +282,7 @@
         {
             tx = odmg.newTransaction();
             tx.begin();
-            EnhancedOQLQuery query = odmg.newOQLQuery();
+            EnhancedOQLQuery query = (EnhancedOQLQuery) odmg.newOQLQuery();
             String sql = "select somePersons from " + Person.class.getName();
             query.create(sql, start, end);
             query.execute();

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/UserTestCases.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/UserTestCases.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/UserTestCases.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/UserTestCases.java Sat Jul 15 07:54:38 2006
@@ -1,6 +1,8 @@
 package org.apache.ojb.odmg;
 
 import java.util.List;
+import java.util.ArrayList;
+import java.util.Collection;
 
 import org.apache.ojb.broker.Identity;
 import org.apache.ojb.junit.ODMGTestCase;
@@ -252,12 +254,14 @@
     {
         try
         {
+            TransactionExt txn = (TransactionExt) odmg.newTransaction();
+            txn.begin();
             // construct an id that does not exist in the database
-            Identity id = new Identity(Person.class, Person.class, new Integer[]{new Integer(-1)});
-            TransactionImpl txn = (TransactionImpl) odmg.newTransaction();
+            Identity id = txn.getBroker().serviceIdentity().buildIdentity(Person.class, Person.class, new Integer[]{new Integer(-1)});
+            txn.commit();
             try
             {
-                txn.getObjectByIdentity(id);
+                txn.getBroker().getObjectByIdentity(id);
                 fail("expected TransactionNotInProgressException not thrown");
             }
             catch(TransactionNotInProgressException exc)
@@ -269,6 +273,184 @@
         {
             exc.printStackTrace();
             fail("caught unexpected exception: " + exc.toString());
+        }
+    }
+
+    /**
+     * Test for OJB-118
+     */
+    public void testFKConstraintIssue() throws Exception
+    {
+        int startId = (int) (System.currentTimeMillis() % Integer.MAX_VALUE);
+
+        String queryA = "select allA from " + A.class.getName() + " where id = $1";
+        String queryB = "select allB from " + B.class.getName() + " where id = $1";
+
+
+        Transaction tx = odmg.newTransaction();
+        tx.begin();
+        // Create A and B objects and make persistent
+        A a = new A();
+        a.setId(new Integer(startId));
+        a.setName("Ten_1");
+        tx.lock(a, Transaction.WRITE);
+        B b = new B();
+        b.setId(a.getId());
+        b.setDescription("Detail_1");
+        a.getItems().add(b);
+        tx.lock(b, Transaction.WRITE);
+        // Delete A and B
+        database.deletePersistent(a);
+        database.deletePersistent(b);
+        tx.commit();
+        tx.begin();
+        OQLQuery query = odmg.newOQLQuery();
+        query.create(queryA);
+        query.bind(new Integer(startId));
+        Collection result = (Collection) query.execute();
+        assertEquals(0, result.size());
+
+        query = odmg.newOQLQuery();
+        query.create(queryB);
+        query.bind(new Integer(startId));
+        result = (Collection) query.execute();
+        assertEquals(0, result.size());
+        tx.commit();
+
+
+        ++startId;
+        tx.begin();
+        // Create A and B objects and make persistent
+        a = new A();
+        a.setId(new Integer(startId));
+        a.setName("Ten_2");
+        b = new B();
+        b.setId(a.getId());
+        b.setDescription("Detail_2");
+        a.getItems().add(b);
+        database.makePersistent(b);
+        database.makePersistent(a);
+        // Delete A and B
+        database.deletePersistent(a);
+        database.deletePersistent(b);
+        tx.commit();
+        tx.begin();
+        query = odmg.newOQLQuery();
+        query.create(queryA);
+        query.bind(new Integer(startId));
+        result = (Collection) query.execute();
+        assertEquals(0, result.size());
+
+        query = odmg.newOQLQuery();
+        query.create(queryB);
+        query.bind(new Integer(startId));
+        result = (Collection) query.execute();
+        assertEquals(0, result.size());
+        tx.commit();
+
+        ++startId;
+        tx = odmg.newTransaction();
+        tx.begin();
+        // Create A and B objects and make persistent
+        a = new A();
+        a.setId(new Integer(startId));
+        a.setName("Ten");
+        tx.lock(a, Transaction.WRITE);
+        b = new B();
+        b.setId(a.getId());
+        b.setDescription("Detail");
+        a.getItems().add(b);
+        tx.lock(b, Transaction.WRITE);
+        tx.checkpoint();
+        // Delete A and B
+        database.deletePersistent(a);
+        database.deletePersistent(b);
+        tx.commit();
+        tx.begin();
+        query = odmg.newOQLQuery();
+        query.create(queryA);
+        query.bind(new Integer(startId));
+        result = (Collection) query.execute();
+        assertEquals(0, result.size());
+
+        query = odmg.newOQLQuery();
+        query.create(queryB);
+        query.bind(new Integer(startId));
+        result = (Collection) query.execute();
+        assertEquals(0, result.size());
+        tx.commit();
+    }
+
+
+    public static class A
+    {
+        private Integer id;
+        private String name;
+        private List items;
+
+        public A()
+        {
+            items = new ArrayList();
+        }
+
+        public Integer getId()
+        {
+            return id;
+        }
+
+        public void setId(Integer id)
+        {
+            this.id = id;
+        }
+
+        public String getName()
+        {
+            return name;
+        }
+
+        public void setName(String name)
+        {
+            this.name = name;
+        }
+
+        public List getItems()
+        {
+            return items;
+        }
+
+        public void setItems(List items)
+        {
+            this.items = items;
+        }
+    }
+
+    public static class B
+    {
+        private Integer id;
+        private String description;
+
+        public B()
+        {
+        }
+
+        public Integer getId()
+        {
+            return id;
+        }
+
+        public void setId(Integer id)
+        {
+            this.id = id;
+        }
+
+        public String getDescription()
+        {
+            return description;
+        }
+
+        public void setDescription(String description)
+        {
+            this.description = description;
         }
     }
 }

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/shared/Article.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/shared/Article.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/shared/Article.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/shared/Article.java Sat Jul 15 07:54:38 2006
@@ -1,6 +1,5 @@
 package org.apache.ojb.odmg.shared;
 
-import org.apache.ojb.odmg.shared.ProductGroup;
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.commons.lang.builder.EqualsBuilder;
 
@@ -17,7 +16,7 @@
         return new ToStringBuilder(this)
                 .append("articleId", articleId)
                 .append("articleName", articleName)
-                .append("productGroup", (productGroup != null ? productGroup.getName() : null))
+                .append("productGroup", (productGroup != null ? productGroup.getGroupName() : null))
                 .append("productGroupId", productGroupId)
                 .append("isSelloutArticle", isSelloutArticle)
                 .append("minimumStock", minimumStock)

Modified: db/ojb/trunk/src/test/org/apache/ojb/odmg/shared/ProductGroup.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/odmg/shared/ProductGroup.java?rev=422241&r1=422240&r2=422241&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/odmg/shared/ProductGroup.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/odmg/shared/ProductGroup.java Sat Jul 15 07:54:38 2006
@@ -1,18 +1,25 @@
 package org.apache.ojb.odmg.shared;
 
 import java.io.Serializable;
+import java.util.Vector;
 import java.util.List;
-import java.util.ArrayList;
 
 /** represents a product group containing a set of Articles.
  * @see org.apache.ojb.odmg.shared.Article
  */
 public class ProductGroup implements org.apache.ojb.odmg.TransactionAware, Serializable
 {
-    /** return group id*/
-    public int getId()
+    /** collection containing all articles of a given product group*/
+    private List allArticlesInGroup;
+    /** a textual description of the group*/
+    private String description;
+    /** the unique id of a product group*/
+    private int groupId;
+    /** the name of a group*/
+    private String groupName;
+
+    public ProductGroup()
     {
-        return groupId;
     }
 
     /**return string representation*/
@@ -26,96 +33,39 @@
                 "articles in group: " + allArticlesInGroup;
     }
 
-    public ProductGroup(int pGroupId, String pGroupName,
-                        String pDescription)
+    public int getGroupId()
     {
-        groupId = pGroupId;
-        groupName = pGroupName;
-        description = pDescription;
+        return groupId;
     }
 
-    public ProductGroup()
+    public void setGroupId(int groupId)
     {
+        this.groupId = groupId;
     }
 
-    /** return groupname*/
-    public String getName()
+    public String getGroupName()
     {
         return groupName;
     }
 
-    /** collection containing all articles of a given product group*/
-    private List allArticlesInGroup;
-    /** a textual description of the group*/
-    private String description;
-    /** the unique id of a product group*/
-    private int groupId;
-    /** the name of a group*/
-    private String groupName;
+    public void setGroupName(String groupName)
+    {
+        this.groupName = groupName;
+    }
 
     public String getDescription()
     {
         return description;
     }
 
-    /**
-     * Sets the description.
-     * @param description The description to set
-     */
     public void setDescription(String description)
     {
         this.description = description;
     }
 
     /**
-     * afterAbort will be called after a transaction has been aborted.
-     * The values of fields which get persisted will have changed to
-     * what they were at the begining of the transaction.  This method
-     * should be overridden to reset any transient or non-persistent
-     * fields.
-     */
-    public void afterAbort()
-    {
-        //System.out.println("afterAbort: " + new Identity(this));
-    }
-
-    /**
-     * afterCommit is called only after a successful commit has taken
-     * place.
-     */
-    public void afterCommit()
-    {
-        //System.out.println("afterCommit: " + new Identity(this));
-    }
-
-    /**
-     * beforeAbort is called before a transaction is aborted.
-     */
-    public void beforeAbort()
-    {
-        //System.out.println("beforeAbort: " + new Identity(this));
-    }
-
-    /**
-     * beforeCommit will give an object a chance to kill a
-     * transaction before it is committed.
-     *
-     * To kill a transaction, throw a new TransactionAbortedException.
-     */
-    public void beforeCommit() throws org.odmg.TransactionAbortedException
-    {
-        //System.out.println("beforeCommit: " + new Identity(this));
-    }
-
-
-    /** set groupname*/
-    public void setName(String newName)
-    {
-        groupName = newName;
-    }
-    /**
      * Gets the allArticlesInGroup.
-     * @return Returns a Vector
+     * @return Returns a List
      */
     public List getAllArticlesInGroup()
     {
@@ -135,45 +85,48 @@
     {
         if(allArticlesInGroup == null)
         {
-            allArticlesInGroup = new ArrayList();
+            allArticlesInGroup = new Vector();
         }
         allArticlesInGroup.add(article);
     }
 
     /**
-     * Gets the groupId.
-     * @return Returns a int
+     * afterAbort will be called after a transaction has been aborted.
+     * The values of fields which get persisted will have changed to
+     * what they were at the begining of the transaction.  This method
+     * should be overridden to reset any transient or non-persistent
+     * fields.
      */
-    public int getGroupId()
+    public void afterAbort()
     {
-        return groupId;
+        //System.out.println("afterAbort: " + new Identity(this));
     }
 
     /**
-     * Sets the groupId.
-     * @param groupId The groupId to set
+     * afterCommit is called only after a successful commit has taken
+     * place.
      */
-    public void setGroupId(int groupId)
+    public void afterCommit()
     {
-        this.groupId = groupId;
+        //System.out.println("afterCommit: " + new Identity(this));
     }
 
     /**
-     * Gets the groupName.
-     * @return Returns a String
+     * beforeAbort is called before a transaction is aborted.
      */
-    public String getGroupName()
+    public void beforeAbort()
     {
-        return groupName;
+        //System.out.println("beforeAbort: " + new Identity(this));
     }
 
     /**
-     * Sets the groupName.
-     * @param groupName The groupName to set
+     * beforeCommit will give an object a chance to kill a
+     * transaction before it is committed.
+     *
+     * To kill a transaction, throw a new TransactionAbortedException.
      */
-    public void setGroupName(String groupName)
+    public void beforeCommit() throws org.odmg.TransactionAbortedException
     {
-        this.groupName = groupName;
+        //System.out.println("beforeCommit: " + new Identity(this));
     }
-
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org