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





Reply via email to