5. The tests are now failing in the automated build; any idea why this might be?
-Patrick On Jan 30, 2008 6:11 PM, Patrick Linskey <[EMAIL PROTECTED]> wrote: > Hi, > > A few questions: > > 1. Were you seeing this cause problems somewhere? I.e., when do we > serialize BrokerFactory instances? > > 2. Why not just move the initialization code to the declaration line > (instead of the constructor)? > > 3. It looks like there are other transactional structures that might > not be properly handled in serialization / deserialization (lifecycle > listeners, for example). Should we be making more changes there? > > -Patrick > > > On Jan 30, 2008 4:59 PM, <[EMAIL PROTECTED]> wrote: > > Author: dezzio > > Date: Wed Jan 30 16:59:02 2008 > > New Revision: 616972 > > > > URL: http://svn.apache.org/viewvc?rev=616972&view=rev > > Log: > > Allow EntityManagerFactory objects to be serialized and deserialized > > successfully. > > > > Added: > > > > openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestSerializedFactory.java > > (with props) > > Modified: > > > > openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java > > > > Modified: > > openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java > > URL: > > http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java?rev=616972&r1=616971&r2=616972&view=diff > > ============================================================================== > > --- > > openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java > > (original) > > +++ > > openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java > > Wed Jan 30 16:59:02 2008 > > @@ -147,8 +147,7 @@ > > */ > > protected AbstractBrokerFactory(OpenJPAConfiguration config) { > > _conf = config; > > - _pcClassLoaders = new ConcurrentReferenceHashSet( > > - ConcurrentReferenceHashSet.WEAK); > > + getPcClassLoaders(); > > } > > > > /** > > @@ -287,13 +286,13 @@ > > if (needsSub(cls)) > > toRedefine.add(cls); > > } > > - _pcClassLoaders.add(loader); > > + getPcClassLoaders().add(loader); > > _pcClassNames = c; > > } > > _persistentTypesLoaded = true; > > } else { > > // reload with this loader > > - if (_pcClassLoaders.add(loader)) { > > + if (getPcClassLoaders().add(loader)) { > > for (Iterator itr = _pcClassNames.iterator(); > > itr.hasNext();) { > > try { > > Class cls = > > @@ -818,4 +817,15 @@ > > _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; > > + } > > } > > > > Added: > > openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestSerializedFactory.java > > URL: > > http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestSerializedFactory.java?rev=616972&view=auto > > ============================================================================== > > --- > > openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestSerializedFactory.java > > (added) > > +++ > > openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestSerializedFactory.java > > Wed Jan 30 16:59:02 2008 > > @@ -0,0 +1,74 @@ > > +/* > > + * Licensed to the Apache Software Foundation (ASF) under one > > + * or more contributor license agreements. See the NOTICE file > > + * distributed with this work for additional information > > + * regarding copyright ownership. The ASF licenses this file > > + * to you 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.openjpa.persistence.simple; > > + > > +import java.io.*; > > + > > +import javax.persistence.EntityManager; > > +import javax.persistence.EntityManagerFactory; > > +import javax.persistence.EntityTransaction; > > + > > +import junit.textui.TestRunner; > > +import org.apache.openjpa.persistence.OpenJPAEntityManager; > > +import org.apache.openjpa.persistence.test.SingleEMFTestCase; > > + > > +/** > > + * Tests that a EntityManagerFactory can be used after serialization. > > + * > > + * @author David Ezzio > > + */ > > +public class TestSerializedFactory > > + extends SingleEMFTestCase { > > + > > + public void setUp() { > > + setUp(AllFieldTypes.class); > > + } > > + > > + public void testSerializedEntityManagerFactory() throws Exception { > > + // serialize and deserialize the entity manager factory > > + ByteArrayOutputStream baos = new ByteArrayOutputStream(); > > + ObjectOutputStream oos = new ObjectOutputStream(baos); > > + oos.writeObject(emf); > > + 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()); > > + } > > + > > + public static void main(String[] args) { > > + TestRunner.run(TestSerializedFactory.class); > > + } > > +} > > + > > > > Propchange: > > openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestSerializedFactory.java > > ------------------------------------------------------------------------------ > > svn:eol-style = native > > > > > > > > > > -- > Patrick Linskey > 202 669 5907 > -- Patrick Linskey 202 669 5907
