From 4d336b2a2cf354fecce2f8931ca1f6702efbe1d5 Mon Sep 17 00:00:00 2001 From: David Ezzio Date: Fri, 1 Feb 2008 17:53:48 +0000 Subject: [PATCH] Rolledback change to AbstractBrokerFactory pending resolution of issues arising from r616972. Modified TestSerializedFactory to expect failure: it expects created EntityManagerFactory objects to be instances of Serialization, but to not be useful after serialization. git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@617577 13f79535-47bb-0310-9956-ffa450edef68 --- .../openjpa/kernel/AbstractBrokerFactory.java | 18 ++---- .../simple/TestSerializedFactory.java | 55 +++++++++++++------ 2 files changed, 43 insertions(+), 30 deletions(-) diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java b/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java index 470f6012b..31472930d 100644 --- a/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java +++ b/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java @@ -147,7 +147,8 @@ public abstract class AbstractBrokerFactory */ protected AbstractBrokerFactory(OpenJPAConfiguration config) { _conf = config; - getPcClassLoaders(); + _pcClassLoaders = new ConcurrentReferenceHashSet( + ConcurrentReferenceHashSet.WEAK); } /** @@ -286,13 +287,13 @@ public abstract class AbstractBrokerFactory if (needsSub(cls)) toRedefine.add(cls); } - getPcClassLoaders().add(loader); + _pcClassLoaders.add(loader); _pcClassNames = c; } _persistentTypesLoaded = true; } else { // reload with this loader - if (getPcClassLoaders().add(loader)) { + if (_pcClassLoaders.add(loader)) { for (Iterator itr = _pcClassNames.iterator(); itr.hasNext();) { try { Class cls = @@ -817,15 +818,4 @@ public abstract class AbstractBrokerFactory _transactional.remove (_trans); } } - - /** - * Method insures that deserialized EMF has this reference re-instantiated - */ - private Collection getPcClassLoaders() { - if (_pcClassLoaders == null) - _pcClassLoaders = new ConcurrentReferenceHashSet( - ConcurrentReferenceHashSet.WEAK); - - return _pcClassLoaders; - } } diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestSerializedFactory.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestSerializedFactory.java index d7cb92f33..9b3cb26a0 100644 --- a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestSerializedFactory.java +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestSerializedFactory.java @@ -40,7 +40,22 @@ public class TestSerializedFactory setUp(AllFieldTypes.class); } + /** + * This test case assumes that OpenJPA creates EMF objects that are + * instances of the Serializable interface. If this changes, the test + * logic has to change. + *

+ * Currently, although the EMF objects implement Serializable, they + * do not successfully pass through serialization. Once they do + * (assuming they should), the catch block in the test and the + * fail method invocation can be removed. + */ public void testSerializedEntityManagerFactory() throws Exception { + // correct the logic if and when EMFs do not implement + // the serializable interface + assertTrue("EntityManagerFactory object is not serializable", + emf instanceof Serializable); + // serialize and deserialize the entity manager factory ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); @@ -48,23 +63,31 @@ public class TestSerializedFactory EntityManagerFactory emf2 = (EntityManagerFactory) new ObjectInputStream( new ByteArrayInputStream(baos.toByteArray())).readObject(); - - // use the deserialized entity manager factory - assertTrue("The deserialized entity manager factory is not open", - emf2.isOpen()); - EntityManager em = emf2.createEntityManager(); - assertTrue("The newly created entity manager is not open", em.isOpen()); - // exercise the entity manager produced from the deserialized EMF - em.getTransaction().begin(); - em.persist(new AllFieldTypes()); - em.getTransaction().commit(); - - // close the extra resources - em.close(); - assertFalse("The entity manager is not closed", em.isOpen()); - emf2.close(); - assertFalse("The entity manager factory is not closed", emf2.isOpen()); + try { + // use the deserialized entity manager factory + assertTrue("The deserialized entity manager factory is not open", + emf2.isOpen()); + EntityManager em = emf2.createEntityManager(); + assertTrue("The newly created entity manager is not open", em.isOpen()); + + // exercise the entity manager produced from the deserialized EMF + em.getTransaction().begin(); + em.persist(new AllFieldTypes()); + em.getTransaction().commit(); + + // close the extra resources + em.close(); + assertFalse("The entity manager is not closed", em.isOpen()); + emf2.close(); + assertFalse("The entity manager factory is not closed", emf2.isOpen()); + + // Correct the logic when EMF's are supposed to serialize + fail("This test is expected to fail until the issue of serializing an EMF is settled"); + } + catch (Exception e) { + // failure is currently expected + } } public static void main(String[] args) {