You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jdo-commits@db.apache.org by mc...@apache.org on 2005/04/04 21:44:00 UTC

svn commit: r160090 [50/63] - in incubator/jdo/trunk: ./ tck20/ tck20/assertions/ tck20/iut_jars/ tck20/test/ tck20/test/conf/ tck20/test/java/ tck20/test/java/org/ tck20/test/java/org/apache/ tck20/test/java/org/apache/jdo/ tck20/test/java/org/apache/jdo/tck/ tck20/test/java/org/apache/jdo/tck/api/ tck20/test/java/org/apache/jdo/tck/api/instancecallbacks/ tck20/test/java/org/apache/jdo/tck/api/jdohelper/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/cache/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/close/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/extent/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/flags/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/getobject/ tck20/test/java/org/apache/jdo/tck/api/persistencemanager/lifecycle/ tck20/test/java/org/apache/jdo/tck/api/persistencemanagerfactory/ tck20/test/java/org/apache/jdo/tck/enhancement/ tck20/test/java/org/apache/jdo/tck/extents/ tck20/test/java/org/apache/jdo/tck/lifecycle/ tck20/test/java/org/apache/jdo/tck/lifecycle/nontransactional/ tck20/test/java/org/apache/jdo/tck/models/ tck20/test/java/org/apache/jdo/tck/models/embedded/ tck20/test/java/org/apache/jdo/tck/models/fieldtypes/ tck20/test/java/org/apache/jdo/tck/models/inheritance/ tck20/test/java/org/apache/jdo/tck/pc/ tck20/test/java/org/apache/jdo/tck/pc/company/ tck20/test/java/org/apache/jdo/tck/pc/fieldtypes/ tck20/test/java/org/apache/jdo/tck/pc/inheritance/ tck20/test/java/org/apache/jdo/tck/pc/instancecallbacks/ tck20/test/java/org/apache/jdo/tck/pc/lifecycle/ tck20/test/java/org/apache/jdo/tck/pc/mylib/ tck20/test/java/org/apache/jdo/tck/query/ tck20/test/java/org/apache/jdo/tck/query/operators/ tck20/test/java/org/apache/jdo/tck/transactions/ tck20/test/java/org/apache/jdo/tck/util/ tck20/test/jdo/ tck20/test/jdo/applicationidentity/ tck20/test/jdo/applicationidentity/org/ tck20/test/jdo/applicationidentity/org/apache/ tck20/test/jdo/applicationidentity/org/apache/jdo/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/company/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/inheritance/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/instancecallbacks/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/lifecycle/ tck20/test/jdo/applicationidentity/org/apache/jdo/tck/pc/mylib/ tck20/test/jdo/datastoreidentity/ tck20/test/jdo/datastoreidentity/org/ tck20/test/jdo/datastoreidentity/org/apache/ tck20/test/jdo/datastoreidentity/org/apache/jdo/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/company/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/fieldtypes/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/inheritance/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/instancecallbacks/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/lifecycle/ tck20/test/jdo/datastoreidentity/org/apache/jdo/tck/pc/mylib/ tck20/test/orm/ tck20/test/orm/applicationidentity/ tck20/test/orm/applicationidentity/org/ tck20/test/orm/applicationidentity/org/apache/ tck20/test/orm/applicationidentity/org/apache/jdo/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/company/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/fieldtypes/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/inheritance/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/instancecallbacks/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/lifecycle/ tck20/test/orm/applicationidentity/org/apache/jdo/tck/pc/mylib/ tck20/test/orm/datastoreidentity/ tck20/test/orm/datastoreidentity/org/ tck20/test/orm/datastoreidentity/org/apache/ tck20/test/orm/datastoreidentity/org/apache/jdo/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/company/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/fieldtypes/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/inheritance/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/instancecallbacks/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/lifecycle/ tck20/test/orm/datastoreidentity/org/apache/jdo/tck/pc/mylib/ tck20/test/sql/ tck20/test/sql/derby/

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/SignInversion.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/SignInversion.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/SignInversion.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/SignInversion.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,127 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+package org.apache.jdo.tck.query.operators;
+
+import java.util.Collection;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.pc.mylib.PrimitiveTypes;
+import org.apache.jdo.tck.query.QueryTest;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ *<B>Title:</B> Sign Inversion Query Operator
+ *<BR>
+ *<B>Keywords:</B> query
+ *<BR>
+ *<B>Assertion ID:</B> A14.6.2-29.
+ *<BR>
+ *<B>Assertion Description: </B>
+The numeric sign inversion operator (<code>-</code>) is supported for all types
+as they are defined in the Java language. This includes the following types:
+<UL>
+<LI><code>byte, short, int, long, char, Byte, Short Integer, Long, Character</code></LI>
+<LI><code>float, double, Float, Double</code></LI>
+<LI><code>BigDecimal, BigInteger</code></LI></UL>
+The operation on object-valued fields of wrapper types (<code>Boolean, Byte,
+Short, Integer, Long, Float</code>, and <code>Double</code>), and numeric types
+(<code>BigDecimal</code> and <code>BigInteger</code>)
+use the wrapped values as operands.
+
+ */
+
+public class SignInversion extends QueryTest {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A14.6.2-29 (SignInversion) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(SignInversion.class);
+    }
+    
+    /** */
+    public void test() {
+        pm = getPM();
+
+        try {
+            loadPrimitiveTypes(pm);
+            runTest(pm);
+        }
+        finally {
+            cleanupDatabase(pm, PrimitiveTypes.class);
+            pm.close();
+            pm = null;
+        }
+    }
+    
+    /** */
+    void runTest(PersistenceManager pm) {
+        Transaction tx = pm.currentTransaction();
+        tx.begin();
+        
+        Collection instance9 = (Collection)pm.newQuery(
+            PrimitiveTypes.class, "id == 9").execute();
+        Collection allOddInstances = (Collection)pm.newQuery(
+            PrimitiveTypes.class, "booleanNull").execute();
+        
+        runSimplePrimitiveTypesQuery("-id == -9", 
+                                     pm, instance9, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-byteNotNull == -9",
+                                     pm, instance9, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-shortNotNull == -9", 
+                                     pm, instance9, ASSERTION_FAILED);            
+        runSimplePrimitiveTypesQuery("-intNotNull == -9", 
+                                     pm, instance9, ASSERTION_FAILED);            
+        runSimplePrimitiveTypesQuery("-longNotNull == -9", 
+                                     pm, instance9, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-floatNotNull == -9", 
+                                     pm, instance9, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-doubleNotNull == -9", 
+                                     pm, instance9, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-byteNull == -9", 
+                                     pm, instance9, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-shortNull == -9", 
+                                     pm, instance9, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-intNull == -9", 
+                                     pm, instance9, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-longNull == -9", 
+                                     pm, instance9, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-floatNull == -9", 
+                                     pm, instance9, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-doubleNull == -9", 
+                                     pm, instance9, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-bigDecimal == -9", 
+                                     pm, instance9, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-bigInteger == -9", 
+                                     pm, instance9, ASSERTION_FAILED);
+
+        runSimplePrimitiveTypesQuery("-charNull == -79", 
+                                     pm, allOddInstances, ASSERTION_FAILED);
+        runSimplePrimitiveTypesQuery("-charNotNull == -79", 
+                                     pm, allOddInstances, ASSERTION_FAILED);
+
+        tx.commit();
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/SignInversion.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/StringConcatenation.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/StringConcatenation.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/StringConcatenation.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/StringConcatenation.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,104 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+package org.apache.jdo.tck.query.operators;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Query;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.query.QueryTest;
+import org.apache.jdo.tck.pc.company.Employee;
+import org.apache.jdo.tck.pc.company.CompanyModelReader;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ *<B>Title:</B> String Concatenation Query Operator
+ *<BR>
+ *<B>Keywords:</B> query
+ *<BR>
+ *<B>Assertion ID:</B> A14.6.2-27.
+ *<BR>
+ *<B>Assertion Description: </B>
+The <code>String</code> concatenation operator (<code>+</code>) is supported
+for the <code>String</code> type only.
+
+ */
+
+public class StringConcatenation extends QueryTest {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A14.6.2-27 (StringConcatenation) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(StringConcatenation.class);
+    }
+    
+    /** */
+    public void test() {
+        pm = getPM();
+                
+        try {
+            // read test data
+            CompanyModelReader reader = 
+                loadCompanyModel(pm, "org/apache/jdo/tck/query/company.xml");
+            runTest(pm, reader);
+        }
+        finally {
+            cleanupCompanyModel(pm);
+            pm.close();
+            pm = null;
+        }
+    }
+    
+    /** */
+    void runTest(PersistenceManager pm, CompanyModelReader reader) {
+        Query q;
+        Object result;
+        Collection expected;
+        
+        Transaction tx = pm.currentTransaction();
+        tx.begin();
+
+        // string literal + string literal 
+        q = pm.newQuery(Employee.class);
+        q.setFilter("firstname == \"emp1\" + \"First\"");
+        result = q.execute();
+        expected = new HashSet();
+        expected.add(reader.getFullTimeEmployee("emp1"));
+        checkQueryResultWithoutOrder(ASSERTION_FAILED, result, expected);
+        
+        // string field + string literal 
+        q = pm.newQuery(Employee.class);
+        q.declareParameters("String param");
+        q.setFilter("firstname + \"Ext\" == param");
+        result = q.execute("emp1FirstExt");
+        expected = new HashSet();
+        expected.add(reader.getFullTimeEmployee("emp1"));
+        checkQueryResultWithoutOrder(ASSERTION_FAILED, result, expected);
+        
+        tx.commit();
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/StringConcatenation.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/UnaryPlus.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/UnaryPlus.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/UnaryPlus.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/UnaryPlus.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,93 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+
+package org.apache.jdo.tck.query.operators;
+
+import java.util.Collection;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.pc.mylib.PrimitiveTypes;
+import org.apache.jdo.tck.query.QueryTest;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ *<B>Title:</B> Unary Addition Query Operator
+ *<BR>
+ *<B>Keywords:</B> query
+ *<BR>
+ *<B>Assertion ID:</B> A14.6.2-25.
+ *<BR>
+ *<B>Assertion Description: </B>
+The unary addition operator (<code>+</code>) is supported for all types as they
+are defined in the Java language. This includes the following types:
+<UL>
+<LI><code>byte, short, int, long, char, Byte, Short Integer, Long, Character</code></LI>
+<LI><code>float, double, Float, Double</code></LI>
+<LI><code>BigDecimal, BigInteger</code></LI>
+</UL>
+The operation on object-valued fields of wrapper types <code>(Boolean, Byte,
+Short, Integer, Long, Float</code>, and <code>Double</code>), and numeric types
+(<code>BigDecimal and BigInteger</code>) use the wrapped values as operands.
+
+ */
+
+public class UnaryPlus extends QueryTest {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A14.6.2-25 (UnaryPlus) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(UnaryPlus.class);
+    }
+    
+    /** */
+    public void test() {
+        pm = getPM();
+
+        try {
+            loadPrimitiveTypes(pm);
+            runTestBinaryAddition(pm);
+        }
+        finally {
+            cleanupDatabase(pm, PrimitiveTypes.class);
+            pm.close();
+            pm = null;
+        }
+    }
+
+    /** */
+    void runTestBinaryAddition(PersistenceManager pm) {
+        if (debug) logger.debug("\nExecuting test BinaryAddition() ...");
+
+        Transaction tx = pm.currentTransaction();
+        tx.begin();
+        
+        Collection instance9 = (Collection)pm.newQuery(
+            PrimitiveTypes.class, "id == 9").execute();
+                
+        runSimplePrimitiveTypesQuery("+id == 9", 
+                                     pm, instance9, ASSERTION_FAILED);
+        tx.commit();
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/query/operators/UnaryPlus.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/AfterCompletionMethodCalledWhenCommitted.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/AfterCompletionMethodCalledWhenCommitted.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/AfterCompletionMethodCalledWhenCommitted.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/AfterCompletionMethodCalledWhenCommitted.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,128 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.mylib.PCPoint;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> After Completion Method Called When Committed
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.3-6.
+ *<BR>
+ *<B>Assertion Description: </B>
+The afterCompletionmethod of the Synchronization instance registered with a Transaction
+will be called during the behavior specified for the transaction completion method commit with a value of
+Status.STATUS_COMMITTE
+ */
+
+
+ /*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/11/01     1.0
+ */
+public class AfterCompletionMethodCalledWhenCommitted 
+    extends JDO_Test 
+    implements Synchronization {
+    
+    private boolean afterCompletionCalled;
+    private Transaction tx;
+    
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.3-6 (AfterCompletionMethodCalledWhenCommitted) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(AfterCompletionMethodCalledWhenCommitted.class);
+    }   
+    
+    /** */
+    public void test() {
+        pm = getPM();
+
+        runTestAfterCompletionMethodCalledWhenCommitted(pm); 
+
+        pm.close(); 
+        pm = null;
+    }
+
+    /** */
+    public void beforeCompletion() {
+        try {
+            if (debug) 
+                logger.debug("before Complition isActive returns" +
+                             tx.isActive());
+        }
+        catch (Exception ex) {
+            fail(ASSERTION_FAILED,
+                 "tx.isActive called in beforeCompletion throws unexpected exception: " + ex);
+        }        
+    }
+
+    /** */
+    public void afterCompletion(int status) {
+        if (status == javax.transaction.Status.STATUS_COMMITTED) {
+            afterCompletionCalled = true;
+        }
+        else { 
+            fail(ASSERTION_FAILED,
+                 "afterCompletion: incorrect status, expected " + 
+                 Status.STATUS_COMMITTED + ", got " + status);
+        }
+    }
+ 
+    /** test transactions.setSynchronization() */
+    void runTestAfterCompletionMethodCalledWhenCommitted(PersistenceManager pm) {
+        tx = pm.currentTransaction();
+        try {
+            tx.begin();
+            PCPoint p1 = new PCPoint(1,3);
+            pm.makePersistent(p1);
+            
+            tx.setSynchronization(this);
+            afterCompletionCalled = false ; 
+            tx.commit();
+            tx = null;
+
+            if (!afterCompletionCalled) {
+                fail(ASSERTION_FAILED,
+                     "commit didn't invoke afterCompletion method");
+            }
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/AfterCompletionMethodCalledWhenCommitted.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/AfterCompletionMethodCalledWhenRolledback.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/AfterCompletionMethodCalledWhenRolledback.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/AfterCompletionMethodCalledWhenRolledback.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/AfterCompletionMethodCalledWhenRolledback.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,128 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.mylib.PCPoint;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> After Completion Method Called When Rolledback
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.3-7.
+ *<BR>
+ *<B>Assertion Description: </B>
+ * The afterCompletion method of the Synchronization instance registered with a 
+ * Transaction will be called after the behavior specified for the method
+ * rollback with a value of Status.STATUS_ROLLEDBACK. 
+ */
+
+
+ /*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/11/01     1.0
+ */
+public class AfterCompletionMethodCalledWhenRolledback 
+    extends JDO_Test 
+    implements Synchronization {
+    
+    private boolean afterCompletionCalled;
+    private Transaction tx;
+    
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.3-7 (AfterCompletionMethodCalledWhenRolledback) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(AfterCompletionMethodCalledWhenRolledback.class);
+    }   
+    
+    /** */
+    public void test() {
+        pm = getPM();
+                    
+        runTestAfterCompletionMethodCalledWhenRolledback(pm); 
+
+        pm.close(); 
+        pm = null;
+    }
+
+    /** */
+    public void beforeCompletion() {
+        try {
+            if (debug) 
+                logger.debug("before Complition isActive returns :" +
+                             tx.isActive());
+        }
+        catch (Exception ex) {
+            fail(ASSERTION_FAILED,
+                 "tx.isActive called in beforeCompletion throws unexpected exception: " + ex);
+        }        
+    }
+
+    /** */
+    public void afterCompletion(int status) {
+        if (status == javax.transaction.Status.STATUS_ROLLEDBACK) {
+            afterCompletionCalled = true;
+        }
+        else { 
+            fail(ASSERTION_FAILED, 
+                 "afterCompletion: incorrect status, expected " + 
+                 Status.STATUS_ROLLEDBACK + ", got " + status);
+        }
+    }
+
+    /** test transactions.setSynchronization() */
+    void runTestAfterCompletionMethodCalledWhenRolledback(PersistenceManager pm) {
+        tx = pm.currentTransaction();
+        try {
+            tx.begin();
+            PCPoint p1 = new PCPoint(1,3);
+            pm.makePersistent(p1);
+            
+            tx.setSynchronization(this);
+            afterCompletionCalled = false ; 
+            tx.rollback();
+            tx = null;
+
+            if (!afterCompletionCalled) {
+                fail(ASSERTION_FAILED,
+                     "rollback didn't invoke afterCompletion method");
+            }
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/AfterCompletionMethodCalledWhenRolledback.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/BeforeCompletionMethodCalled.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/BeforeCompletionMethodCalled.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/BeforeCompletionMethodCalled.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/BeforeCompletionMethodCalled.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,119 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.mylib.PCPoint;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Before Completion Method Called 
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.3-4.
+ *<BR>
+ *<B>Assertion Description: </B>
+The beforeCompletion method of the
+Synchronization instance registered with a Transaction will be
+called during the behavior specified for the transaction completion
+method commit. 
+
+ */
+
+
+ /*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/15/01     1.0
+ */
+public class BeforeCompletionMethodCalled 
+    extends JDO_Test 
+    implements Synchronization {
+
+    private boolean beforeCompletionCalled;
+    
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.3-4 (BeforeCompletionMethodCalled) failed: ";
+  
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(BeforeCompletionMethodCalled.class);
+    }   
+    
+    /** */
+    public void test() {
+        pm = getPM();
+         
+        runTestBeforeCompletionMethodCalled(pm); 
+
+        pm.close();
+        pm = null;
+    }
+
+    /** */
+    public void beforeCompletion(){
+        beforeCompletionCalled = true;
+        if (debug) logger.debug ("beforeCompletion called ");
+    }
+      
+    /** */
+    public void afterCompletion(int status) {
+        if (status != javax.transaction.Status.STATUS_COMMITTED) {
+            fail(ASSERTION_FAILED,
+                 "afterCompletion: incorrect status, expected " + 
+                 Status.STATUS_COMMITTED + ", got " + status);
+        }
+    }
+      
+    /** test transactions.setSynchronization() */
+    void runTestBeforeCompletionMethodCalled(PersistenceManager pm) {
+        Transaction tx = pm.currentTransaction();
+        try {
+            tx.begin();
+            PCPoint p1 = new PCPoint(1,3);
+            pm.makePersistent(p1);
+            
+            tx.setSynchronization(this);
+            beforeCompletionCalled = false ; 
+            tx.commit();
+            tx = null;
+
+            if (!beforeCompletionCalled) {
+                fail(ASSERTION_FAILED,
+                     "commit didn't invoke beforeCompletion method");
+            }
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/BeforeCompletionMethodCalled.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/BeforeCompletionMethodNotCalledBeforeRollback.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/BeforeCompletionMethodNotCalledBeforeRollback.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/BeforeCompletionMethodNotCalledBeforeRollback.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/BeforeCompletionMethodNotCalledBeforeRollback.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,114 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.mylib.PCPoint;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+/**
+ *<B>Title:</B> Before Completion Method Not Called Before Rolledback
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.3-5.
+ *<BR>
+ *<B>Assertion Description: </B>
+ The beforeCompletion method of the Synchronization instance registered with a Transaction will not be
+called before rollback. 
+
+ */
+
+
+ /*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/15/01     1.0
+ */
+public class BeforeCompletionMethodNotCalledBeforeRollback 
+    extends JDO_Test 
+    implements Synchronization {
+    
+    private boolean         beforeCompletionCalled;
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.3-5 (BeforeCompletionMethodNotCalledBeforeRollback) failed: ";
+  
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(BeforeCompletionMethodNotCalledBeforeRollback.class);
+    }   
+    
+    /** */
+    public void test() {
+        pm = getPM();
+                    
+        runTestBeforeCompletionMethodNotCalledBeforeRollback(pm); 
+
+        pm.close(); 
+        pm = null;
+    }
+
+    /** */
+    public void beforeCompletion() {
+        beforeCompletionCalled = true ;
+    }
+
+    /** */
+    public void afterCompletion(int status) {
+        if (status != javax.transaction.Status.STATUS_ROLLEDBACK) {
+            fail(ASSERTION_FAILED,
+                 "afterCompletion: incorrect status, expected " + 
+                 Status.STATUS_ROLLEDBACK + ", got " + status);
+        }
+    }
+
+    /** test transactions.rollback() */
+    void runTestBeforeCompletionMethodNotCalledBeforeRollback(PersistenceManager pm) {
+        Transaction tx = pm.currentTransaction();
+        try {
+            tx.begin();
+            PCPoint p1 = new PCPoint(1,3);
+            pm.makePersistent(p1);
+            
+            tx.setSynchronization(this);
+            beforeCompletionCalled = false ; 
+            tx.rollback();
+            tx = null;
+            
+            if (beforeCompletionCalled) {
+                fail(ASSERTION_FAILED,
+                     "rollback invoked beforeCompletion, but it should not.");
+            }
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/BeforeCompletionMethodNotCalledBeforeRollback.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/Commit.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/Commit.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/Commit.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/Commit.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,143 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.JDOHelper;
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.mylib.PCPoint;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Commit
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.4-1.
+ *<BR>
+ *<B>Assertion Description: </B>
+ The <code>commit</code> method performs the following operations:
+ <UL>
+ <LI>calls the <code>beforeCompletion</code> method of the
+ <code>Synchronization</code> instance registered with the
+ <code>Transaction</code>;</LI>
+ <LI>flushes dirty persistent instances;</LI>
+ <LI>notifies the underlying data store to commit the transaction
+ (this cannot be tested)</LI>
+ <LI>transitions persistent instances according to the life cycle specification;</LI>
+ <LI>calls the <code>afterCompletion</code> method of the <code>Synchronization</code>
+ instance registered with the <code>Transaction</code> with the results of the
+ data store commit operation.</LI>
+ </UL>
+ */
+
+
+/*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/15/01     1.0
+ */
+public class Commit extends JDO_Test implements Synchronization {
+    
+    private boolean beforeCompletionCalled;
+    private boolean afterCompletionCalled;
+    
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.4-1 (Commit) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(Commit.class);
+    }   
+    
+    /** */
+    public void test() {
+        pm = getPM();
+         
+        runTestCommit(pm); 
+
+        pm.close();
+        pm = null;
+    }
+
+    /** */
+    public void beforeCompletion(){
+        beforeCompletionCalled = true;
+        if (debug) logger.debug("beforeCompletion called ");
+    }
+    
+    /** */
+    public void afterCompletion(int status) {
+        if (status == Status.STATUS_COMMITTED) {
+            afterCompletionCalled = true;
+            if (debug) logger.debug("afterCompletion called\n ");
+        }
+        else { 
+            fail(ASSERTION_FAILED,
+                 "afterCompletion: incorrect status, expected " + 
+                 Status.STATUS_COMMITTED + ", got " + status);
+        }
+    }
+
+    /** test transactions.setSynchronization() */
+    void runTestCommit(PersistenceManager pm) {
+        Transaction tx = pm.currentTransaction();
+        try {
+            tx.begin();
+            PCPoint p1 = new PCPoint(1,3);
+            pm.makePersistent(p1);
+            if (!JDOHelper.isDirty(p1)) {
+                fail(ASSERTION_FAILED,
+                     "P-NEW instance expected to be dirty, JDOHelper.isDirty returns false.");
+            }
+            
+            tx.setSynchronization(this);
+            beforeCompletionCalled = false; 
+            afterCompletionCalled = false; 
+            tx.commit();
+            tx = null;
+            
+            if (JDOHelper.isDirty(p1)) {
+                fail(ASSERTION_FAILED,
+                     "P-NEW instance should transition to HOLLOW or P-NONTX and then it should not be dirty, JDOHelper.isDirty returns true.");
+            }
+            if (!beforeCompletionCalled) {
+                fail(ASSERTION_FAILED,
+                     "commit didn't invoke beforeCompletion method");
+            }
+            if (!afterCompletionCalled) {
+                fail(ASSERTION_FAILED,
+                     "commit didn't invoke afterCompletion method");
+            }
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/Commit.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetOptimistic.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetOptimistic.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetOptimistic.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetOptimistic.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,112 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.PersistenceManagerFactory;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.query.BoundParameterCheck;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Get Optimistic
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.1-2.
+ *<BR>
+ *<B>Assertion Description: </B>
+ The transactions.getOptimistic method 
+ */
+
+
+/*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/09/01     1.0
+ */
+public class GetOptimistic extends JDO_Test {
+    private PersistenceManagerFactory   pmf;
+    private PersistenceManager          pm;
+    private PersistenceManager          pm1;
+    private Transaction                 transaction;
+    private boolean         flag;
+    private boolean         flag2;
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.1-2 (BoundParameterCheck) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(BoundParameterCheck.class);
+    }
+
+    /** */
+    public void test() {
+        pm = getPM();
+          
+        runTestGetOptimistic(pm);
+
+        pm.close(); 
+        pm = null;
+    }
+
+    /** test transactions.getOptimistic() */
+    public void runTestGetOptimistic(PersistenceManager pm) {
+        Transaction tx = pm.currentTransaction();
+        try {
+            if (isOptimisticSupported()) {
+                tx.setOptimistic(true);
+                tx.begin();
+                if (!tx.getOptimistic()) {
+                    fail(ASSERTION_FAILED,
+                         "tx.getOptimistic() returns false after setting the flag to true.");
+                }
+                tx.commit();
+                if (!tx.getOptimistic()) {
+                    fail(ASSERTION_FAILED,
+                         "tx.getOptimistic() returns false after setting the flag to true.");
+                }
+            }
+            
+            tx.setOptimistic(false);
+            tx.begin();
+            if (tx.getOptimistic()) {
+                fail(ASSERTION_FAILED,
+                     "tx.getOptimistic() returns true after setting the flag to false.");
+            }
+            tx.commit();
+            if (tx.getOptimistic()) {
+                fail(ASSERTION_FAILED,
+                     "tx.getOptimistic() returns true after setting the flag to false.");
+            }
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetOptimistic.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetPersistenceManager.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetPersistenceManager.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetPersistenceManager.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetPersistenceManager.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,92 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.mylib.PCPoint;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Get Persistence Manager
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.1-1.
+ *<BR>
+ *<B>Assertion Description: </B>
+ The transactions.getPersistenceManager method returns associated persistence manager 
+ if the object parameter ia not null and implements persistenceCapable.
+ evaluating to true when == is used. 
+ */
+
+
+/*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   9/26/01      1.0
+ */
+public class GetPersistenceManager extends JDO_Test {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.1-1 (GetPersistenceManager) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(GetPersistenceManager.class);
+    }
+
+    /** */
+    public void test() {
+        pm = getPM();
+       
+        runTestGetPersistenceManager(pm);
+
+        pm.close(); 
+        pm = null;
+    }
+    
+    /** test transactions.getPersistenceManager() */
+    void runTestGetPersistenceManager(PersistenceManager pm) {
+        Transaction tx = pm.currentTransaction();
+        try {
+            tx.begin();
+            PCPoint p1 = new PCPoint(1,3);
+            pm.makePersistent(p1);
+            PersistenceManager pm1 = tx.getPersistenceManager();
+            tx.commit();
+            tx = null;
+
+            if (pm1 != pm)
+                fail(ASSERTION_FAILED,
+                     "tx.getPersistenceManager() returned unexpected pm, expected " + pm + ", got " + pm1);
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetPersistenceManager.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetRetainValues.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetRetainValues.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetRetainValues.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetRetainValues.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,103 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Get Retain Values
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.2-17.
+ *<BR>
+ *<B>Assertion Description: </B>
+ Transaction.getRetainValues returns the currently active setting for the 
+ RetainValues flag.
+ */
+
+
+/*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/09/01     1.0
+ */
+public class GetRetainValues extends JDO_Test {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+    "Assertion A13.4.2-17 (GetRetainValues) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(GetRetainValues.class);
+    }
+
+    /** */
+    public void test() {
+        pm = getPM();
+        
+        runTestGetRetainValues(pm);   
+
+        pm.close(); 
+        pm = null;
+    }
+
+    /** test transaction.getRetainValues()*/
+    public void runTestGetRetainValues(PersistenceManager pm) {
+        Transaction tx = pm.currentTransaction();
+        try {
+            tx.setRetainValues(true);
+            tx.begin();
+            if (!tx.getRetainValues()) {
+                fail(ASSERTION_FAILED,
+                     "tx.getRetainValues returns false after setting the flag to true.");
+            }
+            tx.commit();
+            if (!tx.getRetainValues()) {
+                fail(ASSERTION_FAILED,
+                     "tx.getRetainValues returns false after setting the flag to true.");
+            }
+            
+            tx.setRetainValues(false);
+            tx.begin();
+            if (tx.getRetainValues()) {
+                fail(ASSERTION_FAILED,
+                     "tx.getRetainValues returns true after setting the flag to false.");
+            }
+            tx.commit();
+            if (tx.getRetainValues()) {
+                fail(ASSERTION_FAILED,
+                     "tx.getRetainValues returns true after setting the flag to false.");
+            }
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetRetainValues.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetSynchronization.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetSynchronization.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetSynchronization.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetSynchronization.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,126 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+import javax.transaction.Synchronization;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.mylib.PCPoint;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Get Synchronization
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.3-8.
+ *<BR>
+ *<B>Assertion Description: </B>
+ A call to Transaction.getSynchronization
+ retrieves the Synchronization instance that has been registered via
+ setSynchronization. 
+ */
+
+
+/*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/11/01     1.0
+ */
+public class GetSynchronization 
+    extends JDO_Test 
+    implements Synchronization {
+    
+    private Transaction tx;
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.3-8 (GetSynchronization) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(GetSynchronization.class);
+    }
+
+    /** */
+    public void beforeCompletion(){
+        try {
+            if (debug) 
+                logger.debug("before Complition isActive returns :" +
+                             tx.isActive());
+        }
+        catch (Exception ex) {
+            fail(ASSERTION_FAILED,
+                 "tx.isActive called in beforeCompletion throws unexpected exception: " + ex);
+        }
+    }
+
+    /** */
+    public void afterCompletion(int status) {
+        try {
+            if (debug) 
+                logger.debug("after Complition isActive returns :" +
+                             tx.isActive()); 
+        }
+        catch (Exception ex) {
+            fail(ASSERTION_FAILED,
+                 "tx.isActive called in afterCompletion throws unexpected exception: " + ex);
+        }
+    }
+      
+    /** */
+    public void test() {
+        pm = getPM();
+         
+        runTestGetSynchronization(pm); 
+
+        pm.close(); 
+        pm = null;
+    }
+
+    /** test transactions.getSynchronization() */
+    void runTestGetSynchronization(PersistenceManager pm) {
+        tx = pm.currentTransaction();
+        try {
+            tx.begin();
+            PCPoint p1 = new PCPoint(1,3);
+            pm.makePersistent(p1);
+            
+            tx.setSynchronization(this);
+            Synchronization s = tx.getSynchronization();
+            if (s != this) {
+                fail(ASSERTION_FAILED,
+                     "wrong synchronization instance, expected " + this + ", got " + s);
+            }
+            
+            tx.commit();
+            tx = null;
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/GetSynchronization.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/IsActive.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/IsActive.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/IsActive.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/IsActive.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,101 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Is Active
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.1-2.
+ *<BR>
+ *<B>Assertion Description: </B>
+ The transactions.isActive method tells whether there is an active 
+ transaction. There will be an active transaction if the begin method
+ has been executed but neither commit nor rollback has been executed.
+ */
+
+
+/*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/09/01     1.0
+ */
+public class IsActive extends JDO_Test {
+    
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.1-2 (IsActive) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(IsActive.class);
+    }
+
+    /** */
+    public void test() {
+        pm = getPM();
+          
+        runTestIsActive(pm);
+
+        pm.close(); 
+        pm = null;
+    }
+
+    /** test transactions.isActive() */
+    void runTestIsActive(PersistenceManager pm) {
+        Transaction tx = pm.currentTransaction();
+        try {
+            tx.begin();
+            if (!tx.isActive()) {
+                fail(ASSERTION_FAILED,
+                     "tx.isActive returns false after tx.begin");
+            }
+            tx.commit();
+          
+            if (tx.isActive()) {
+                fail(ASSERTION_FAILED,
+                     "tx.isActive returns true after tx.commit");
+            }
+
+            tx.begin();
+            tx.rollback();
+            if (tx.isActive()) {
+                fail(ASSERTION_FAILED,
+                     "tx.isActive returns true after tx.rollback");
+            }
+            
+            tx = null;
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/IsActive.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/IsActiveUntilAfterCompletionMethodCalled.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/IsActiveUntilAfterCompletionMethodCalled.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/IsActiveUntilAfterCompletionMethodCalled.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/IsActiveUntilAfterCompletionMethodCalled.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,128 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+import javax.transaction.Synchronization;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.mylib.PCPoint;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Is Active Until After Completion Method Called
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.1-3.
+ *<BR>
+ *<B>Assertion Description: </B>
+ Transaction.isActive returns true after the transaction has been started, until the afterCompletion
+ synchronization method is called
+ */
+
+
+/*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/09/01     1.0
+ */
+public class IsActiveUntilAfterCompletionMethodCalled 
+    extends JDO_Test 
+    implements Synchronization {
+    
+    private Transaction tx;
+    
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.1-3 (IsActiveUntilAfterCompletionMethodCalled) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(IsActiveUntilAfterCompletionMethodCalled.class);
+    }
+
+    /** */
+    public void beforeCompletion() {
+        try {
+            if (!tx.isActive()) {
+                fail(ASSERTION_FAILED,
+                     "tx.isActive returns false in beforeCompletion.");
+            }
+        }
+        catch (Exception ex) {
+            fail(ASSERTION_FAILED,
+                 "tx.isActive called in beforeCompletion throws unexpected exception: " + ex);
+        }
+    }
+
+    /** */
+    public void afterCompletion(int status) {
+        try {
+            if (tx.isActive()) {
+                fail(ASSERTION_FAILED,
+                     "tx.isActive returns true in afterCompletion.");
+            }
+        }
+        catch (Exception ex) {
+            fail(ASSERTION_FAILED,
+                 "tx.isActive called in afterCompletion throws unexpected exception: " + ex);
+        }
+    }
+    
+    /** */
+    public void test() {
+        pm = getPM();
+                    
+        runTestIsActiveUntilAfterCompletionMethodCalled(pm);
+ 
+        pm.close(); 
+        pm = null;
+    }
+    
+    /** test transactions.isActive() */
+    void runTestIsActiveUntilAfterCompletionMethodCalled(PersistenceManager pm) {
+        tx = pm.currentTransaction();
+        try {
+            tx.begin();
+            PCPoint p1 = new PCPoint(1,3);
+            pm.makePersistent(p1);
+            tx.setSynchronization(this);
+            if (!tx.isActive()) {
+                fail(ASSERTION_FAILED,
+                     "tx.isActive returns false after tx.begin before tx.commit is completed.");
+            }
+            
+            tx.commit();
+            if (tx.isActive()) {
+                fail(ASSERTION_FAILED,
+                     "tx.isActive returns true after tx.commit.");
+            }
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/IsActiveUntilAfterCompletionMethodCalled.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/Rollback.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/Rollback.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/Rollback.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/Rollback.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,154 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.JDOHelper;
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.mylib.PCPoint;
+import org.apache.jdo.tck.query.BoundParameterCheck;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Rollback
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.4-2.
+ *<BR>
+ *<B>Assertion Description: </B>
+ The <code>commit</code> method performs the following operations:
+ <UL>
+ <LI>transitions persistent instances
+ according to the life cycle specification;</LI>
+ <LI>rolls back changes made in this transaction from the data store;</LI>
+ <LI>calls the <code>afterCompletion</code> method of the
+ <code>Synchronization</code> instance registered with the
+ <code>Transaction</code>.</LI>
+ </UL>
+
+ */
+
+
+/*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/17/01     1.0
+ */
+public class Rollback 
+    extends JDO_Test 
+    implements Synchronization {
+    
+    private boolean beforeCompletionCalled;
+    private boolean afterCompletionCalled;
+    
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.4-2 (BoundParameterCheck) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(BoundParameterCheck.class);
+    }
+   
+    /** */
+    public void beforeCompletion(){
+        beforeCompletionCalled = true;
+        if (debug) logger.debug ("beforeCompletion called ");
+    }
+     
+    /** */
+    public void afterCompletion(int status) {
+        if (status == javax.transaction.Status.STATUS_ROLLEDBACK) {
+            afterCompletionCalled = true;
+            if (debug) logger.debug("afterCompletion called\n ");
+        }
+        else { 
+            fail(ASSERTION_FAILED,
+                 "afterCompletion: incorrect status, expected " + 
+                 Status.STATUS_ROLLEDBACK + ", got " + status);
+        }
+    }
+      
+    /** */
+    public void test() {
+        pm = getPM();
+                    
+        runTestRollback(pm);
+
+        pm.close(); 
+        pm = null;
+    }
+    
+    /** test transactions.setSynchronization() */
+    void runTestRollback(PersistenceManager pm) {
+        Transaction tx = pm.currentTransaction();
+        try {
+            tx.begin();
+            PCPoint p1 = new PCPoint(1,3);
+            pm.makePersistent(p1);
+            tx.commit();
+          
+            tx.begin();
+            p1.setX(55);
+                    
+            if (!JDOHelper.isDirty(p1)) {
+                fail(ASSERTION_FAILED,
+                     "JDOHelper.isDirty returns false when called for dirty instance.");
+            }
+          
+            tx.setSynchronization(this);
+            beforeCompletionCalled = false; 
+            afterCompletionCalled = false ; 
+            tx.rollback(); 
+         
+            if (JDOHelper.isDirty(p1)) {
+                fail(ASSERTION_FAILED,
+                     "P-NEW instance should transition to HOLLOW or P-NONTX and then it should not be dirty, JDOHelper.isDirty returns true.");
+            }
+            int x = p1.getX();
+            if (x != 1) {
+                fail(ASSERTION_FAILED,
+                     "tx.rollback should rollback change of ip1.x, expected 1, got " + x);
+            }
+            
+            if (beforeCompletionCalled) {
+                fail(ASSERTION_FAILED,
+                     "rollback did invoke beforeCompletion method.");
+            }
+            if (!afterCompletionCalled) {
+                fail(ASSERTION_FAILED,
+                     "commit didn't invoke afterCompletion method.");
+            }
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/Rollback.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalRead.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalRead.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalRead.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalRead.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,155 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+
+import javax.jdo.PersistenceManager;
+import javax.jdo.Query;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.pc.company.Company;
+import org.apache.jdo.tck.pc.company.Department;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Set Nontransactional Read
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.2-9.
+ *<BR>
+ *<B>Assertion Description: </B>
+ If an implementation supports nontransactional read, then a call to
+ <code>Transaction.setNontransactionalRead</code> with a parameter value of
+ <code>true</code> will set the flag to <code>true</code> and allows persistent
+ instances to be read outside of a transaction.
+ Queries and navigation will be allowed without an active transaction.
+ */
+
+
+/*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/18/01     1.0
+ */
+public class SetNontransactionalRead extends JDO_Test {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.2-9 (SetNontransactionalRead) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(SetNontransactionalRead.class);
+    }
+
+    /** */
+    public void test() {
+        pm = getPM();
+          
+        runTestSetNontransactionalRead(pm);
+
+        pm.close(); 
+        pm = null;
+    }
+
+    /** test transactions.setNonteansactionalRead() */
+    public void runTestSetNontransactionalRead(PersistenceManager pm) {
+        if (!isNontransactionalReadSupported()) {
+            if (debug)
+                logger.debug("Implementation does not support non transactional read");
+            return;
+        }
+        
+        Transaction tx = pm.currentTransaction();
+        try {
+            tx.setNontransactionalRead(true);
+            tx.begin();
+            Company c = new Company(1L, "MyCompany", new Date(), null);
+            Department d = new Department(999, "MyDepartment", c);
+            pm.makePersistent(c);
+            pm.makePersistent(d);
+            Object oid = pm.getObjectId(d);
+            if (!tx.getNontransactionalRead()) {
+                fail(ASSERTION_FAILED,
+                     "tx.getNontransactionalRead returns false after setting the flag to true.");
+            }
+            tx.commit();
+            if (!tx.getNontransactionalRead()) {
+                fail(ASSERTION_FAILED,
+                     "tx.getNontransactionalRead returns false after setting the flag to true.");
+            }
+
+            // make sure transaction is not active
+            if (tx.isActive()) {
+                fail(ASSERTION_FAILED,
+                     "transaction still active after tx.commit.");
+            }
+            tx = null;
+
+            // read department
+            d = (Department)pm.getObjectById(oid, true);
+            long deptid = d.getDeptid();
+            if (deptid != 999) {
+                fail("Reading department outside of a transaction returns unexpected value of d.deptid, expected 999, got " + deptid);
+            }
+
+            // navigate from department to company
+            c = d.getCompany();
+            if (c == null) {
+                 fail("Navigating from department to company outside of a transaction returns null.");
+            }
+            String companyName = c.getName();
+            if (!"MyCompany".equals(companyName)) {
+                fail("Navigated company returns unexpected value of c.name, expected MyCompany, got " + companyName);
+            }
+
+            // run query
+            Query q = pm.newQuery(Department.class);
+            q.setFilter("name == \"MyDepartment\"");
+            Collection result = (Collection)q.execute();
+            Iterator i = result.iterator();
+            if (!i.hasNext()) {
+                fail(ASSERTION_FAILED,
+                     "Query outside of a transaction returned empty collection.");
+            }
+            d = (Department)i.next();
+            String deptName = d.getName();
+            if (!"MyDepartment".equals(deptName)) {
+                fail("Department in query result returns unexpected value of d.name, expected MyDepartment, got " + deptName);
+            }
+            if (i.hasNext()) {
+                fail(ASSERTION_FAILED,
+                     "Query outside of a transaction returns more than one instance.");
+            }
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalRead.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalReadCalledDuringTxCompletion.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalReadCalledDuringTxCompletion.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalReadCalledDuringTxCompletion.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalReadCalledDuringTxCompletion.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,144 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.JDOUserException;
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+import javax.transaction.Synchronization;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Set Nontransactional Read Called During TX Completion
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.2-1.
+ *<BR>
+ *<B>Assertion Description: </B>
+ If the setNontransactionalRead method of the Transaction interface is
+ called during commit or rollback processing (within the beforeCompletion and afterCompletion
+ synchronization methods), a JDOUserException is thrown. 
+
+ */
+
+
+/*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/18/01     1.0
+ */
+public class SetNontransactionalReadCalledDuringTxCompletion 
+    extends JDO_Test 
+    implements Synchronization {
+
+    private Transaction tx;
+    
+    private boolean nonTransactionalReadFlag;
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.2-1 (SetNontransactionalReadCalledDuringTxCompletion) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(SetNontransactionalReadCalledDuringTxCompletion.class);
+    }
+    
+    /** */
+    public void beforeCompletion() {
+        if (debug) logger.debug("beforeCompletion.");
+        try {
+            tx.setNontransactionalRead(nonTransactionalReadFlag);
+            fail(ASSERTION_FAILED,
+                 "tx.setNontransactionalRead called in beforeCompletion should throw JDOUserException.");
+        }
+        catch (JDOUserException ex) {
+            // expected exception
+            if (debug) logger.debug("caught expected exception " + ex);
+        }
+        catch (Exception ex) {
+            fail(ASSERTION_FAILED,
+                 "tx.setNontransactionalRead called in beforeCompletion throws unexpected exception: " + ex);
+        }
+    }
+    
+    /** */
+    public void afterCompletion(int status) {
+        if (debug) logger.debug("afterCompletion.");
+        try {
+            tx.setNontransactionalRead(nonTransactionalReadFlag);
+        }
+        catch (JDOUserException ex) {
+            // TBD: need to remove this catch block as soon as the JDORI is
+            // fixed see 'Issue 61: Transaction.isActive issues'
+            if (debug) logger.debug("caught exception " + ex);
+        }
+        catch (Exception ex) {
+            fail(ASSERTION_FAILED,
+                 "tx.setNontransactionalRead called in afterCompletion throws unexpected exception: " + ex);
+        }
+    }
+      
+    /** */
+    public void test() {
+        pm = getPM();
+        
+        runTestSetNontransactionalReadCalledDuringTxCompletion(pm);
+        
+        pm.close(); 
+        pm = null;
+    }
+    
+    /** test transactions.setNonteansactionalRead() */
+    public void runTestSetNontransactionalReadCalledDuringTxCompletion(PersistenceManager pm) {
+        /**
+        if (!isNontransactionalReadSupported()) {
+            if (verbose) println("Implementation does not support non transactional read");
+            return;
+        }
+        */
+        tx = pm.currentTransaction();
+        try {
+            tx.setSynchronization(this);          
+            
+            nonTransactionalReadFlag = false;
+            tx.begin();
+            tx.commit();
+
+            if (isNontransactionalReadSupported()) {
+                nonTransactionalReadFlag = true;
+                tx.begin();
+                tx.commit();
+            }
+            
+            tx = null;
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalReadCalledDuringTxCompletion.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalReadTrueWhenNotSupported.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalReadTrueWhenNotSupported.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalReadTrueWhenNotSupported.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalReadTrueWhenNotSupported.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,94 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.JDOUnsupportedOptionException;
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Set Nontransactional Read True When Not Supported
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.2-5.
+ *<BR>
+ *<B>Assertion Description: </B>
+ If an implementation does not support nontransactional read, then a
+ call to Transaction.setNontransactionalRead with a parameter value of true will
+ * cause a JDOUnsupportedOptionException to be thrown.
+ */
+
+
+/*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/18/01     1.0
+ */
+public class SetNontransactionalReadTrueWhenNotSupported extends JDO_Test {
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.2-5 (SetNontransactionalReadTrueWhenNotSupported) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(SetNontransactionalReadTrueWhenNotSupported.class);
+    }
+
+    /** */
+    public void test() {
+        pm = getPM();
+          
+        runTestSetNontransactionalReadTrueWhenNotSupported(pm);   
+
+        pm.close(); 
+        pm = null;
+    }
+    
+    /* test transactions.setNonteansactionalRead()
+     *  
+     */
+    public void runTestSetNontransactionalReadTrueWhenNotSupported(
+        PersistenceManager pm) {
+        if (isNontransactionalReadSupported()) {
+            if (debug)
+                logger.debug("Implementation does support non transactional read.");
+            return;
+        }
+
+        Transaction tx = pm.currentTransaction();
+        try {
+            tx.setNontransactionalRead(true);
+            fail(ASSERTION_FAILED,
+                 "tx.setNontransactionalRead(true) should throw JDOUnsupportedOptionException, if the implementation does not support non transactional read.");
+        }
+        catch (JDOUnsupportedOptionException ex) {
+            // expected excepted
+            if (debug) logger.debug("caught expected exception " + ex);
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalReadTrueWhenNotSupported.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalWriteCalledDuringTxCompletion.java
URL: http://svn.apache.org/viewcvs/incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalWriteCalledDuringTxCompletion.java?view=auto&rev=160090
==============================================================================
--- incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalWriteCalledDuringTxCompletion.java (added)
+++ incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalWriteCalledDuringTxCompletion.java Mon Apr  4 12:41:23 2005
@@ -0,0 +1,140 @@
+/*
+ * Copyright 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.
+ * You may obtain a copy of the License at 
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ */
+ 
+package org.apache.jdo.tck.transactions;
+
+import javax.jdo.JDOUserException;
+import javax.jdo.PersistenceManager;
+import javax.jdo.Transaction;
+import javax.transaction.Synchronization;
+
+import org.apache.jdo.tck.JDO_Test;
+import org.apache.jdo.tck.util.BatchTestRunner;
+
+
+/**
+ *<B>Title:</B> Set Nontransactional Write Called During TX Completion
+ *<BR>
+ *<B>Keywords:</B> transactions
+ *<BR>
+ *<B>Assertion ID:</B> A13.4.2-1.
+ *<BR>
+ *<B>Assertion Description: </B>
+ If the setNontransactionalWrite method of the Transaction interface is
+ called during commit or rollback processing (within the beforeCompletion
+ and afterCompletion synchronization methods), a JDOUserException is thrown. 
+
+ */
+
+
+/*
+ * Revision History
+ * ================
+ * Author         :     Date   :    Version  
+ * Azita Kamangar   10/18/01     1.0
+ */
+public class SetNontransactionalWriteCalledDuringTxCompletion 
+    extends JDO_Test 
+    implements Synchronization {
+
+    private Transaction tx;
+    
+    private boolean nonTransactionalWriteFlag;
+
+    /** */
+    private static final String ASSERTION_FAILED = 
+        "Assertion A13.4.2-2 (SetNontransactionalWriteCalledDuringTxCompletion) failed: ";
+    
+    /**
+     * The <code>main</code> is called when the class
+     * is directly executed from the command line.
+     * @param args The arguments passed to the program.
+     */
+    public static void main(String[] args) {
+        BatchTestRunner.run(SetNontransactionalWriteCalledDuringTxCompletion.class);
+    }
+    
+    /** */
+    public void beforeCompletion() {
+        if (debug) logger.debug("beforeCompletion.");
+        try {
+            tx.setNontransactionalWrite(nonTransactionalWriteFlag);
+            fail(ASSERTION_FAILED,
+                 "tx.setNontransactionalWrite called in beforeCompletion should throw JDOUserException.");
+        }
+        catch (JDOUserException ex) {
+            // expected exception
+            if (debug) logger.debug("Caught expected exception " + ex);
+        }
+        catch (Exception ex) {
+            fail(ASSERTION_FAILED,
+                 "tx.setNontransactionalWrite called in beforeCompletion throws unexpected exception: " + ex);
+        }
+    }
+    
+    /** */
+    public void afterCompletion(int status) {
+        if (debug) logger.debug("afterCompletion.");
+        try {
+            tx.setNontransactionalWrite(nonTransactionalWriteFlag);
+        }
+        catch (JDOUserException ex) {
+            // TBD: need to remove this catch block as soon as the JDORI is
+            // fixed see 'Issue 61: Transaction.isActive issues'
+            if (debug) logger.debug("caught exception " + ex);
+        }
+        catch (Exception ex) {
+            fail(ASSERTION_FAILED,
+                 "tx.setNontransactionalWrite called in afterCompletion throws unexpected exception: " + ex);
+        }
+    }
+      
+    /** */
+    public void test() {
+        pm = getPM();
+        
+        runTestSetNontransactionalWriteCalledDuringTxCompletion(pm);
+        
+        pm.close(); 
+        pm = null;
+    }
+    
+    /** test transactions.setNonteansactionalWrite() */
+    public void runTestSetNontransactionalWriteCalledDuringTxCompletion(PersistenceManager pm) {
+        tx = pm.currentTransaction();
+        try {
+            tx.setSynchronization(this);          
+            
+            nonTransactionalWriteFlag = false;
+            tx.begin();
+            tx.commit();
+
+            if (isNontransactionalWriteSupported()) {
+                nonTransactionalWriteFlag = true;
+                tx.begin();
+                tx.commit();
+            }
+            else if (debug)
+              logger.debug("Implementation does not support nontransactional write");
+            
+            tx = null;
+        }
+        finally {
+            if ((tx != null) && tx.isActive())
+                tx.rollback();
+        }
+    }
+}

Propchange: incubator/jdo/trunk/tck20/test/java/org/apache/jdo/tck/transactions/SetNontransactionalWriteCalledDuringTxCompletion.java
------------------------------------------------------------------------------
    svn:executable = *