mirror of https://github.com/apache/openjpa.git
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
This commit is contained in:
parent
a747db9443
commit
4d336b2a2c
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
* <p>
|
||||
* 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);
|
||||
|
@ -49,6 +64,7 @@ public class TestSerializedFactory
|
|||
(EntityManagerFactory) new ObjectInputStream(
|
||||
new ByteArrayInputStream(baos.toByteArray())).readObject();
|
||||
|
||||
try {
|
||||
// use the deserialized entity manager factory
|
||||
assertTrue("The deserialized entity manager factory is not open",
|
||||
emf2.isOpen());
|
||||
|
@ -65,6 +81,13 @@ public class TestSerializedFactory
|
|||
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) {
|
||||
|
|
Loading…
Reference in New Issue