While trying to track down a different bug, I was reviewing how locks are used in JDO stack.
I noticed that both getPersistenceManager and releasePersistenceManager methods are "synchronized". Reviewing that code, it looks like the only thing they are protecting are access to pmCache, and freezeConfiguration calls. But since we call getPM and releasePM for every single web request in our system, I think this would be a really nice/simple optimization to reduce contention and serialization of requests! :)
I'll work on getting you a patch, but if you review the code, I bet you will see what I'm talking about and can figure it out easily. :)