db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Bouschen <mbo.t...@spree.de>
Subject Re: pmf not closed
Date Mon, 02 May 2005 22:09:38 GMT
Hi Michelle,

good catch! Now its clear why my change could not help: it was never 
executed :-).

I looked at class PersistenceManagerTest and I would like to propose two 
changes:
- Method cleanupMylib should delete the PCPoint and PCRect instances in 
a single transaction.
- Method tearDown needs to be changed such that closePMF is called in 
any case.

You find a new version of PersistenceManagerTest attached. Could you do 
me a favor and check whether this solves the problem (together with the 
other change of JDO_Test). If yes I would check in 
PersistenceManagerTest  and JDO_Test as fix for  JIRA issue JDO-32.

Thanks!

Regards Michael

> Okay, here's what was going on.  PersistenceManagerTest extends 
> JDO_Test and overrides its tearDown() method.  The former's tearDown() 
> calls cleanupMylib() before calling closePMF(). cleanupMylib() fails 
> on trying to clean up the database, throws an exception, and never 
> returns to tearDown, so closePMF() does not get executed.
>
> cleanupMylib() fails because it attempts to delete PCPoint objects 
> before deleting PCRect objects that hold foreign keys to the 
> PCPoints.  I changed the order of execution and the tests now pass.  I 
> will accept advice on how to avoid this problem in the future if 
> cleanupMylib() fails.  Here is the offending code:
>
>    /** */
>    protected void tearDown() {
>        try {
>            cleanup();
>            cleanupMylib();
>            closePMF();
>        }
>        catch (Throwable ex) {
>            if (debug) ex.printStackTrace();
>            if (testSucceeded) {
>                // runTest succeeded, but closePMF throws exception =>
>                // failure
>                fail("Exception during tearDown: " + ex);
>            }
>            else {
>                // runTest failed and closePMF throws exception =>
>                // just print the closePMF exception, otherwise the
>                // closePMF exception would swallow the test case failure
>                if (debug)
>                    logger.debug("Exception during tearDown: " + ex);
>            }
>        }
>    }
>      /** */
>    protected void cleanupMylib() {
>        PersistenceManager pm = getPM();
>        Transaction tx = null;
>        try {
>            pm = pmf.getPersistenceManager();
>            tx = pm.currentTransaction();
>            tx.begin();
>            Collection c = getAllObjects(pm, PCRect.class);
>            pm.deletePersistentAll(c);
>            tx.commit();
>                  tx.begin();
>            c = getAllObjects(pm, PCPoint.class);
>            pm.deletePersistentAll(c);
>            tx.commit();
>        }
>        finally {
>            if ((tx != null) && tx.isActive())
>                tx.rollback();
>            if ((pm != null) && pm.isClosed())
>                pm.close();
>        }
>    }
>
> -- Michelle
>
> Michael Bouschen wrote:
>
>> Hi Michelle,
>>
>>> Hi, Michael,
>>>
>>> When you get a chance to look at the tests that don't close pmf when 
>>> they fail, the JIRA number is JDO-32.
>>
>>
>>
>> I looked into this. Attached you find an updated version of 
>> JDO_Test.java. It checks whether pmf.close throws an exception 
>> because of open pms. If so it closes the pms and closes the pmf again.
>>
>> However, I was not able to reproduce the issue. I removed the heap 
>> size increase from project.properties. I also added some debug 
>> messages to the pm cleanup code I added to the method closing the 
>> pmf. It got never printed. I tried the tck default configuration and 
>> used the JPOX nightly builds from April 1 and May 1.
>>
>> Could you please try the attached version of JDO_Test and let me know 
>> whether it makes any difference? It might be good to check it in 
>> anyway, even if todays tests do not need it.The attached file works 
>> for tck20 and tck11 and I'm planning a similar change for ri11.
>>
>> Thanks!
>>
>> Regards Michael
>>
>>>
>>> Thanks,
>>> Michelle
>>
>>
>>


-- 
Michael Bouschen		Tech@Spree Engineering GmbH
mailto:mbo.tech@spree.de	http://www.tech.spree.de/
Tel.:++49/30/235 520-33		Buelowstr. 66			
Fax.:++49/30/2175 2012		D-10783 Berlin			


Mime
View raw message