I have a simple test program that uses OpenJPA 0.9.6 to insert an object into a db in one transaction (t1) and retrieve it in another transaction (t2). The program hangs in 30-50% of the executions right before the call to entitymanager.find() (used to retrieve the object in t2). I'm using OpenJPA runtime enhancement.
By looking at the JVM dump, I can see the following deadlock:
1LKDEADLOCK Deadlock detected !!!
NULL ---------------------
NULL
2LKDEADLOCKTHR Thread "main" (0x0015EC00)
3LKDEADLOCKWTR is waiting for:
4LKDEADLOCKMON sys_mon_t:0x41E40548 infl_mon_t: 0x41E40588:
4LKDEADLOCKOBJ java/lang/Object@00D41010/00D4101C:
3LKDEADLOCKOWN which is owned by:
2LKDEADLOCKTHR Thread "Finalizer thread" (0x41B36200)
3LKDEADLOCKWTR which is waiting for:
4LKDEADLOCKMON sys_mon_t:0x0035CD38 infl_mon_t: 0x0035CD78:
4LKDEADLOCKOBJ sun/misc/Launcher$
AppClassLoader@00D4E5B0/00D4E5BC:
3LKDEADLOCKOWN which is owned by:
2LKDEADLOCKTHR Thread "main" (0x0015EC00)