You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pc...@apache.org on 2007/02/07 03:01:55 UTC

svn commit: r504411 - in /incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/callbacks: ./ ExceptionsFromCallbacksEntity.java TestExceptionsFromCallbacks.java

Author: pcl
Date: Tue Feb  6 18:01:54 2007
New Revision: 504411

URL: http://svn.apache.org/viewvc?view=rev&rev=504411
Log:
test cases for agreed-upon callback behavior

Added:
    incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/callbacks/
    incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/callbacks/ExceptionsFromCallbacksEntity.java
    incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/callbacks/TestExceptionsFromCallbacks.java

Added: incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/callbacks/ExceptionsFromCallbacksEntity.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/callbacks/ExceptionsFromCallbacksEntity.java?view=auto&rev=504411
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/callbacks/ExceptionsFromCallbacksEntity.java (added)
+++ incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/callbacks/ExceptionsFromCallbacksEntity.java Tue Feb  6 18:01:54 2007
@@ -0,0 +1,57 @@
+package org.apache.openjpa.persistence.callbacks;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.PostLoad;
+import javax.persistence.PrePersist;
+import javax.persistence.PreUpdate;
+import javax.persistence.Version;
+
+
+@Entity
+public class ExceptionsFromCallbacksEntity {
+    @Id private long id;
+    @Version private int version;
+    private boolean throwOnPrePersist;
+    private boolean throwOnPreUpdate;
+    private boolean throwOnPostLoad;
+    private String stringField;
+    
+    public void setThrowOnPrePersist(boolean b) {
+        throwOnPrePersist = b;
+    }
+
+    public void setThrowOnPostLoad(boolean b) {
+        throwOnPostLoad = b;
+    }
+
+    public void setThrowOnPreUpdate(boolean b) {
+        throwOnPreUpdate = b;
+    }
+
+    public void setStringField(String s) {
+        stringField = s;
+    }
+
+    @PrePersist
+    public void prePersist() {
+        if (throwOnPrePersist)
+            throw new CallbackTestException();
+    }
+
+    @PreUpdate
+    public void preUpdate() {
+        if (throwOnPreUpdate)
+            throw new CallbackTestException();
+    }
+
+    @PostLoad
+    public void postLoad() {
+        if (throwOnPostLoad)
+            throw new CallbackTestException();
+    }
+    
+    public class CallbackTestException
+        extends RuntimeException {
+    }
+}

Added: incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/callbacks/TestExceptionsFromCallbacks.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/callbacks/TestExceptionsFromCallbacks.java?view=auto&rev=504411
==============================================================================
--- incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/callbacks/TestExceptionsFromCallbacks.java (added)
+++ incubator/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/callbacks/TestExceptionsFromCallbacks.java Tue Feb  6 18:01:54 2007
@@ -0,0 +1,141 @@
+package org.apache.openjpa.persistence.callbacks;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Persistence;
+import javax.persistence.RollbackException;
+
+import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
+import org.apache.openjpa.persistence.OpenJPAPersistence;
+import org.apache.openjpa.persistence.callbacks.ExceptionsFromCallbacksEntity.CallbackTestException;
+
+import junit.framework.TestCase;
+
+
+/**
+ * Tests against JPA section 3.5's description of callback exception handling.
+ */
+public class TestExceptionsFromCallbacks
+    extends TestCase {
+
+    private OpenJPAEntityManagerFactory emf;
+
+    public void setUp() {
+        String types = ExceptionsFromCallbacksEntity.class.getName();
+        Map props = new HashMap(System.getProperties());
+        props.put("openjpa.MetaDataFactory", "jpa(Types=" + types + ")");
+        emf = (OpenJPAEntityManagerFactory) Persistence.
+            createEntityManagerFactory("test", props);
+        deleteAll();
+    }
+
+    public void tearDown() {
+        if (emf == null)
+            return;
+        try {
+            deleteAll();
+            emf.close();
+        } catch (Exception e) {
+        }
+    }
+    
+    private void deleteAll() {
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+        em.createQuery("delete from ExceptionsFromCallbacksEntity").
+            executeUpdate();
+        em.getTransaction().commit();
+        em.close();
+    }
+
+    public void testPrePersistException() {
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+        ExceptionsFromCallbacksEntity o = new ExceptionsFromCallbacksEntity();
+        o.setThrowOnPrePersist(true);
+        try {
+            em.persist(o);
+            fail("persist should have failed");
+        } catch (CallbackTestException cte) {
+            // transaction should be still active, but marked for rollback
+            assertTrue(em.getTransaction().isActive());
+            assertTrue(em.getTransaction().getRollbackOnly());
+        } finally {
+            if (em.getTransaction().isActive())
+                em.getTransaction().rollback();
+            em.close();
+        }
+    }
+
+    public void testPreUpdateExceptionDuringFlush() {
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+        ExceptionsFromCallbacksEntity o = new ExceptionsFromCallbacksEntity();
+        o.setThrowOnPreUpdate(true);
+        em.persist(o);
+        o.setStringField("foo");
+        try {
+            em.flush();
+            fail("flush should have failed");
+        } catch (CallbackTestException cte) {
+            // transaction should be still active, but marked for rollback
+            assertTrue(em.getTransaction().isActive());
+            assertTrue(em.getTransaction().getRollbackOnly());
+        } finally {
+            if (em.getTransaction().isActive())
+                em.getTransaction().rollback();
+            em.close();
+        }
+    }
+
+    public void testPreUpdateExceptionDuringCommit() {
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+        ExceptionsFromCallbacksEntity o = new ExceptionsFromCallbacksEntity();
+        o.setThrowOnPreUpdate(true);
+        em.persist(o);
+        o.setStringField("foo");
+        try {
+            em.getTransaction().commit();
+            fail("commit should have failed");
+        } catch (RollbackException re) {
+            assertEquals(CallbackTestException.class,
+                re.getCause().getClass());
+            
+            // transaction should be rolled back at this point
+            assertFalse(em.getTransaction().isActive());
+        } finally {
+            if (em.getTransaction().isActive())
+                em.getTransaction().rollback();
+            em.close();
+        }
+    }
+    
+    public void testPostLoadException() {
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+        ExceptionsFromCallbacksEntity o = new ExceptionsFromCallbacksEntity();
+        o.setThrowOnPostLoad(true);
+        em.persist(o);
+        em.getTransaction().commit();
+        Object oid = OpenJPAPersistence.cast(em).getObjectId(o);
+        em.close();
+        
+        em = emf.createEntityManager();
+        em.getTransaction().begin();
+        try {
+            o = em.find(ExceptionsFromCallbacksEntity.class, oid);
+            fail("find should have failed");
+        } catch (CallbackTestException cte) {
+            // transaction should be active but marked for rollback
+            assertTrue(em.getTransaction().isActive());
+            assertTrue(em.getTransaction().getRollbackOnly());
+        } finally {
+            if (em.getTransaction().isActive())
+                em.getTransaction().rollback();
+            em.close();
+        }
+    }
+}