On Jan 31, 2008 7:56 PM, Patrick Linskey <[EMAIL PROTECTED]> wrote: > To be honest, I don't really understand why a BrokerFactory needs to > be serializable, so I think probably it'd be good to make sure that > there is good reason for that before going too deep into this > debugging exercise.
I tend to agree with this statement. What is the scenario that requires the EMF (BrokerFactory) to be Serializable? Thanks. Kevin > > > -Patrick > > On Jan 31, 2008 5:52 PM, Patrick Linskey <[EMAIL PROTECTED]> wrote: > > > If the hangup is intolerable, let me know, and I'll back out my change > > > tomorrow. > > > > Personally, I'd rather have the TeamCity build be clean while you > > investigate. As you noted, the error-reporting from surefire is > > frustratingly inaccurate, and this really erodes the benefit of > > continuous integration. > > > > > It would be handy if I knew a few things. How to pass in VM debug > args > > > to Maven for its test runs, where to set the OpenJPA logging when > Maven > > > runs the tests, and how to pass in the appropriate parameters when > > > running the test case outside of Maven. Any insights on these > questions > > > will be appreciated. > > > > I usually just add log configuration to the test cases themselves, in > > the setUp(...) method: > > > > setUp(Class.class, Class2.class, ..., "openjpa.Log", "SQL=TRACE"); > > > > I believe that it is also possible to set this at the command line via > > -Dopenjpa.Log=SQL=TRACE types of clauses. > > > > -Patrick > > > > > > On Jan 31, 2008 4:08 PM, David Ezzio <[EMAIL PROTECTED]> wrote: > > > Hi, > > > > > > Progress has been slow on the test failures apparently introduced by > > > 616972. I have made progress in reproducing the results. > > > > > > The miscounting in TeamCity is gross. Although it lists 33 failing > > > tests complete with a credible stack trace for each, in fact, there is > > > only one failing test. > > > > > > Meanwhile, I believe now, that change 616658 is no longer a suspect. > I > > > get very erratic results here, but they seem to vary more by whether I > > > run "mvn test" after "mvn clean" or "mvn install" after "mvn clean". > By > > > doing just what TeamCity does, "mvn clean compile test", I can finally > > > reproduce the results locally that TeamCity reports in its > Compile-Derby > > > build for this change (395, I think). In spite of this, if I run "mvn > > > -Dtest=TestCaseInsensitiveKeywordsInJPQL clean compile test" the test > > > passes. > > > > > > It would be handy if I knew a few things. How to pass in VM debug > args > > > to Maven for its test runs, where to set the OpenJPA logging when > Maven > > > runs the tests, and how to pass in the appropriate parameters when > > > running the test case outside of Maven. Any insights on these > questions > > > will be appreciated. > > > > > > But at least at this point, I can reproduce locally what TeamCity > > > reports, and although it happened only once out of one try, I am > > > optimistic that it is reproducible. I will continue working this > > > tomorrow. > > > > > > If the hangup is intolerable, let me know, and I'll back out my change > > > tomorrow. > > > > > > David Ezzio > > > > > > > > > David Ezzio wrote: > > > > Hi, > > > > > > > > I am convinced that change 616658 (small change to DBDictionary.java) > is > > > > the source of the two intermittent failures that I am seeing > locally. > > > > One of those intermittent failures is the failure in > > > > TestCaseInsensitiveKeywordsInJPQL.testCaseInsensitiveBooleans which > is > > > > one of the 33 related failures currently seen in TeamCity Derby > builds. > > > > > > > > The other intermittent failure is TestVersion.testVersionTimestampwhich > > > > I reported earlier as occurring locally with change 616658. > > > > > > > > When I revert change 616658 locally, both of these issues go away > even > > > > with the changes that I submitted to AbstractBrokerFactory in change > > > > 616972. > > > > > > > > I have a question: is it possible to run a build in TeamCity without > > > > submitting the change (or conditionally submitting the change) to > SVN? > > > > I'd like to find out if reverting 616658 will fix the issue. If so, > > > > then I can try to figure out why it's a problem. > > > > > > > > Thanks, > > > > > > > > David > > > > > > > > David Ezzio wrote: > > > >> No, but I'm taking a look since my changes appear to be the cause. > > > >> > > > >> Patrick Linskey wrote: > > > >>> 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 > > > > > > -- > Patrick Linskey > 202 669 5907 >
