test case for OPENJPA-102 and OPENJPA-104

git-svn-id: https://svn.apache.org/repos/asf/incubator/openjpa/trunk@497547 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Patrick Linskey 2007-01-18 19:26:39 +00:00
parent fa5eb3a7af
commit 4f0c54211d
1 changed files with 120 additions and 0 deletions

View File

@ -0,0 +1,120 @@
package org.apache.openjpa.persistence.detachment;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.RollbackException;
import org.apache.openjpa.enhance.PersistenceCapable;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
import org.apache.openjpa.persistence.OpenJPAPersistence;
import junit.framework.TestCase;
public class TestGetReferenceAndImplicitDetachment
extends TestCase {
private OpenJPAEntityManagerFactory emf;
public void setUp() {
String types = DetachmentOneManyParent.class.getName() + ";"
+ DetachmentOneManyChild.class.getName();
Map props = new HashMap(System.getProperties());
props.put("openjpa.MetaDataFactory", "jpa(Types=" + types + ")");
props.put("openjpa.DetachState", "fgs");
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 DetachmentOneManyChild").
executeUpdate();
em.createQuery("delete from DetachmentOneManyParent").
executeUpdate();
em.getTransaction().commit();
em.close();
}
public void testNonexistentGetReferenceDetachmentInTxWithCommit() {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
DetachmentOneManyParent o =
em.getReference(DetachmentOneManyParent.class, 0);
em.getTransaction().commit();
em.close();
// the close detachment should leave these invalid objects in a
// transient state
assertFalse(((PersistenceCapable) o).pcIsTransactional());
assertFalse(((PersistenceCapable) o).pcIsPersistent());
// pcIsDetached() will give a false positive in this configuration
// assertFalse(((PersistenceCapable) o).pcIsDetached());
}
public void testNonexistentGetReferenceDetachmentOutsideTx() {
EntityManager em = emf.createEntityManager();
DetachmentOneManyParent o =
em.getReference(DetachmentOneManyParent.class, 0);
em.close();
// the close detachment should leave these invalid objects in a
// transient state
assertFalse(((PersistenceCapable) o).pcIsTransactional());
assertFalse(((PersistenceCapable) o).pcIsPersistent());
// pcIsDetached() will give a false positive in this configuration
// assertFalse(((PersistenceCapable) o).pcIsDetached());
}
public void testNonexistentGetReferenceDetachmentInTxWithRollback() {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
DetachmentOneManyParent o =
em.getReference(DetachmentOneManyParent.class, 0);
em.getTransaction().rollback();
// the rollback should cause a detachment
assertFalse(OpenJPAPersistence.cast(em).isTransactional(o));
assertFalse(OpenJPAPersistence.cast(em).isPersistent(o));
// pcIsDetached() will give a false positive in this configuration
// assertFalse(OpenJPAPersistence.cast(em).isDetached(o));
em.close();
}
public void testNonexistentGetReferenceDetachmentInTxWithFailedCommit() {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
DetachmentOneManyParent o =
em.getReference(DetachmentOneManyParent.class, 0);
em.getTransaction().setRollbackOnly();
try {
em.getTransaction().commit();
} catch (RollbackException re) {
// expected
}
// the failed commit should cause a detachment
assertFalse(OpenJPAPersistence.cast(em).isTransactional(o));
assertFalse(OpenJPAPersistence.cast(em).isPersistent(o));
// pcIsDetached() will give a false positive in this configuration
// assertFalse(OpenJPAPersistence.cast(em).isDetached(o));
em.close();
}
}