Vlad, Using your provided class, testcase, and persistence.xml (I'll try to append them and see if it works), I can not reproduce your problem. I have discovered several other anomolies, but not the one you are describing.
One item that I did have to modify is to specify the specific <class> entry in your persistence.xml. Without this, the automatic SchemaMapping doesn't kick in. But, after doing that, whether I use runtime enhancement or static enhancement, I can not reproduce the problem. I am using the following Derby version... databaseProductName: Apache Derby databaseProductVersion: 10.2.1.6 - (452058) driverName: Apache Derby Embedded JDBC Driver driverVersion: 10.2.1.6 - (452058) And, my Java version is as follows... C:\temp\play>java -version java version "1.5.0" Java(TM) 2 Runtime Environment, Standard Edition (build pwi32dev-20061002a (SR3)) IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223-20061001 (JIT enabled) J9VM - 20060915_08260_lHdSMR JIT - 20060908_1811_r8 GC - 20060906_AA) JCL - 20061002 You might want to change your trace level so as to get more help with the problem... <property name="openjpa.Log" value="DefaultLevel=TRACE, SQL=TRACE"/> Let us know what you find out. Thanks, Kevin On 1/8/07, Marc Prud'hommeaux <[EMAIL PROTECTED]> wrote:
Vlad- Interesting ... looks like it has something to do with an interaction between the JVM and the PCClassFileTransformer agent (responsible for enhancing the entity classes at runtime). If you manually enhance your entities and then run without the -javaagent flag, do you ever get the deadlock? On Jan 8, 2007, at 12:25 PM, Vlad Tatavu wrote: > Yeah, it looks like the attachments were removed by the list > server. I'm > using Derby. Here are the stack traces for the two threads > involved in > the deadlock: > > 3XMTHREADINFO "main" (TID:0x0015EC00, sys_thread_t:0x00358470, > state:B, native ID:0x000017B4) prio=5 > 4XESTACKTRACE at > com/ibm/oti/vm/BootstrapClassLoader.loadClass > (BootstrapClassLoader.java:63(Compiled > Code)) > 4XESTACKTRACE at > java/lang/ClassLoader.loadClass(ClassLoader.java:587(Compiled Code)) > 4XESTACKTRACE at > java/lang/ClassLoader.loadClass(ClassLoader.java:587(Compiled Code)) > 4XESTACKTRACE at > sun/misc/Launcher$AppClassLoader.loadClass(Launcher.java:327(Compiled > Code)) > 4XESTACKTRACE at > java/lang/ClassLoader.loadClass(ClassLoader.java:563(Compiled Code)) > 4XESTACKTRACE at java/lang/ClassLoader.defineClassImpl(Native > Method) > 4XESTACKTRACE at > java/lang/ClassLoader.defineClass(ClassLoader.java:223(Compiled Code)) > 4XESTACKTRACE at > java/security/SecureClassLoader.defineClass(SecureClassLoader.java: > 148(Compiled > Code)) > 4XESTACKTRACE at > java/net/URLClassLoader.defineClass(URLClassLoader.java:556(Compiled > Code)) > 4XESTACKTRACE at > java/net/URLClassLoader.access$400(URLClassLoader.java:119(Compiled > Code)) > 4XESTACKTRACE at > java/net/URLClassLoader$ClassFinder.run(URLClassLoader.java:957 > (Compiled > Code)) > 4XESTACKTRACE at > java/security/AccessController.doPrivileged(AccessController.java:275) > 4XESTACKTRACE at > java/net/URLClassLoader.findClass(URLClassLoader.java:487(Compiled > Code)) > 4XESTACKTRACE at > java/lang/ClassLoader.loadClass(ClassLoader.java:606(Compiled Code)) > 4XESTACKTRACE at > sun/misc/Launcher$AppClassLoader.loadClass(Launcher.java:327(Compiled > Code)) > 4XESTACKTRACE at > java/lang/ClassLoader.loadClass(ClassLoader.java:563(Compiled Code)) > 4XESTACKTRACE at > org/apache/openjpa/jdbc/sql/SQLFactoryImpl.newSelect > (SQLFactoryImpl.java:40) > 4XESTACKTRACE at > org/apache/openjpa/jdbc/kernel/ > JDBCStoreManager.getInitializeStateResult(JDBCStoreManager.java:367) > 4XESTACKTRACE at > org/apache/openjpa/jdbc/kernel/JDBCStoreManager.initializeState > (JDBCStoreManager.java:296) > 4XESTACKTRACE at > org/apache/openjpa/jdbc/kernel/JDBCStoreManager.initialize > (JDBCStoreManager.java:252) > 4XESTACKTRACE at > org/apache/openjpa/kernel/DelegatingStoreManager.initialize > (DelegatingStoreManager.java:108) > 4XESTACKTRACE at > org/apache/openjpa/kernel/ROPStoreManager.initialize > (ROPStoreManager.java:54) > 4XESTACKTRACE at > org/apache/openjpa/kernel/BrokerImpl.initialize(BrokerImpl.java:870) > 4XESTACKTRACE at > org/apache/openjpa/kernel/BrokerImpl.find(BrokerImpl.java:828) > 4XESTACKTRACE at > org/apache/openjpa/kernel/BrokerImpl.find(BrokerImpl.java:743) > 4XESTACKTRACE at > org/apache/openjpa/kernel/DelegatingBroker.find > (DelegatingBroker.java:169) > 4XESTACKTRACE at > org/apache/openjpa/persistence/EntityManagerImpl.find > (EntityManagerImpl.java:320) > 4XESTACKTRACE at > play/TestInsertAndFind.test001(TestInsertAndFind.java:48) > 4XESTACKTRACE at > sun/reflect/NativeMethodAccessorImpl.invoke0(Native Method) > 4XESTACKTRACE at > sun/reflect/NativeMethodAccessorImpl.invoke > (NativeMethodAccessorImpl.java:64) > 4XESTACKTRACE at > sun/reflect/DelegatingMethodAccessorImpl.invoke > (DelegatingMethodAccessorImpl.java:43) > 4XESTACKTRACE at java/lang/reflect/Method.invoke > (Method.java:615) > 4XESTACKTRACE at > org/junit/internal/runners/TestMethodRunner.executeMethodBody > (TestMethodRunner.java:99) > 4XESTACKTRACE at > org/junit/internal/runners/TestMethodRunner.runUnprotected > (TestMethodRunner.java:81) > 4XESTACKTRACE at > org/junit/internal/runners/BeforeAndAfterRunner.runProtected > (BeforeAndAfterRunner.java:34) > 4XESTACKTRACE at > org/junit/internal/runners/TestMethodRunner.runMethod > (TestMethodRunner.java:75) > 4XESTACKTRACE at > org/junit/internal/runners/TestMethodRunner.run > (TestMethodRunner.java:45) > 4XESTACKTRACE at > org/junit/internal/runners/TestClassMethodsRunner.invokeTestMethod > (TestClassMethodsRunner.java:71) > 4XESTACKTRACE at > org/junit/internal/runners/TestClassMethodsRunner.run > (TestClassMethodsRunner.java:35) > 4XESTACKTRACE at > org/junit/internal/runners/TestClassRunner$1.runUnprotected > (TestClassRunner.java:42) > 4XESTACKTRACE at > org/junit/internal/runners/BeforeAndAfterRunner.runProtected > (BeforeAndAfterRunner.java:34) > 4XESTACKTRACE at > org/junit/internal/runners/TestClassRunner.run(TestClassRunner.java: > 52) > 4XESTACKTRACE at > org/eclipse/jdt/internal/junit4/runner/JUnit4TestReference.run > (JUnit4TestReference.java:38) > 4XESTACKTRACE at > org/eclipse/jdt/internal/junit/runner/TestExecution.run > (TestExecution.java:38) > 4XESTACKTRACE at > org/eclipse/jdt/internal/junit/runner/RemoteTestRunner.runTests > (RemoteTestRunner.java:460) > 4XESTACKTRACE at > org/eclipse/jdt/internal/junit/runner/RemoteTestRunner.runTests > (RemoteTestRunner.java:673) > 4XESTACKTRACE at > org/eclipse/jdt/internal/junit/runner/RemoteTestRunner.run > (RemoteTestRunner.java:386) > 4XESTACKTRACE at > org/eclipse/jdt/internal/junit/runner/RemoteTestRunner.main > (RemoteTestRunner.java:196) > 3XMTHREADINFO "Finalizer thread" (TID:0x41B36200, > sys_thread_t:0x41DE154C, state:B, native ID:0x00000FF8) prio=5 > 4XESTACKTRACE at > java/lang/ClassLoader.loadClass(ClassLoader.java:563(Compiled Code)) > 4XESTACKTRACE at java/lang/Class.forNameImpl(Native Method) > 4XESTACKTRACE at java/lang/Class.forName(Class.java:160 > (Compiled > Code)) > 4XESTACKTRACE at > org/apache/openjpa/lib/util/TemporaryClassLoader.loadClass > (TemporaryClassLoader.java:55(Compiled > Code)) > 4XESTACKTRACE at > org/apache/openjpa/lib/util/TemporaryClassLoader.loadClass > (TemporaryClassLoader.java:40(Compiled > Code)) > 4XESTACKTRACE at java/lang/Class.forNameImpl(Native Method) > 4XESTACKTRACE at java/lang/Class.forName(Class.java:160 > (Compiled > Code)) > 4XESTACKTRACE at > org/apache/openjpa/enhance/PCClassFileTransformer.needsEnhance > (PCClassFileTransformer.java:171(Compiled > Code)) > 4XESTACKTRACE at > org/apache/openjpa/enhance/PCClassFileTransformer.transform > (PCClassFileTransformer.java:117(Compiled > Code)) > 4XESTACKTRACE at > sun/instrument/TransformerManager.transform(TransformerManager.java: > 141(Compiled > Code)) > 4XESTACKTRACE at > sun/instrument/InstrumentationImpl.transform > (InstrumentationImpl.java:174(Compiled > Code)) > 4XESTACKTRACE at com/ibm/oti/vm/VM.findClassOrNull(Native > Method) > 4XESTACKTRACE at > com/ibm/oti/vm/BootstrapClassLoader.loadClass > (BootstrapClassLoader.java:64(Compiled > Code)) > 4XESTACKTRACE at > java/lang/ref/ReferenceQueue.enqueue(ReferenceQueue.java:125) > 4XESTACKTRACE at > java/lang/ref/Reference.enqueueImpl(Reference.java:93) > -- > Best regards, > Vlad Tatavu > Provisioning & Orchestration Development, IBM Tivoli Toronto > [EMAIL PROTECTED] > Office (905) 413-3853 > > > > "Marc Prud'hommeaux" <[EMAIL PROTECTED]> > Sent by: "Marc Prud'hommeaux" <[EMAIL PROTECTED]> > 08/01/2007 03:17 PM > Please respond to > open-jpa-dev@incubator.apache.org > > > To > open-jpa-dev@incubator.apache.org > cc > > Subject > Re: Deadlock when insert in t1 and find in t2 > > > > > > > Vlad- > > I didn't get any attachments in that last message (perhaps they were > stripped by the list server). > > It might be interesting the see the java stack trace parts of the JVM > dump, in case that might shed light on the situation. > > Also, what database are you using? It could be that the deadlock is > happening somewhere in the JDBC driver code as well... > > > > On Jan 8, 2007, at 11:20 AM, Vlad Tatavu wrote: > >> >> My test program runs in a standalone env, local transactions. Here >> are the files: >> >> >> -- >> Best regards, >> Vlad Tatavu >> Provisioning & Orchestration Development, IBM Tivoli Toronto >> [EMAIL PROTECTED] >> Office (905) 413-3853 >> >> >> "Kevin Sutter" <[EMAIL PROTECTED]> >> 08/01/2007 02:01 PM >> Please respond to >> open-jpa-dev@incubator.apache.org >> >> >> To >> open-jpa-dev@incubator.apache.org >> cc >> Subject >> Re: Deadlock when insert in t1 and find in t2 >> >> >> >> >> >> Hi Vlad, >> Can you provide a bit more information? Are you running in a managed >> environment or a standalone environment? Are these JTA >> transactions or >> Local transactions? What does your test program look like? What >> about the >> Entities? Maybe you can attach them to your next reply? >> >> I see that you are using the J9 JVM. I haven't tried that yet. >> I've been >> using the "standard" IBM JVM 1.5 at SR3 (or above). I doubt that >> this would >> make a different, but it might be useful to try this JVM as a test. >> >> What you are describing is basic JPA functionality, so there must be >> something unique with your application or environment. >> >> Thanks, >> Kevin >> >> On 1/8/07, Vlad Tatavu <[EMAIL PROTECTED]> wrote: >>> >>> 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). 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/[EMAIL PROTECTED]/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 >> [EMAIL PROTECTED]/00D4E5BC: >>> 3LKDEADLOCKOWN which is owned by: >>> 2LKDEADLOCKTHR Thread "main" (0x0015EC00) >>> >>> I'm using IBM JVM 5 (J2RE 5.0 IBM J9 2.3 Windows XP x86-32 build >>> j9vmwi3223-20061001) and OpenJPA Runtime Enhancement. >>> >>> Is this a known issue? >>> >>> I can provide the test program, persistence.xml, etc. >>> >>> -- >>> Best regards, >>> Vlad Tatavu >>> Provisioning & Orchestration Development, IBM Tivoli Toronto >>> [EMAIL PROTECTED] >>> Office (905) 413-3853 >>> >> > >
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> <persistence-unit name="my persistence unit"> <!-- <provider> org.apache.openjpa.persistence.PersistenceProviderImpl </provider> --> <properties> <property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp.BasicDataSource"/> <property name="openjpa.ConnectionProperties" value="DriverClassName=org.apache.derby.jdbc.EmbeddedDriver,Url=jdbc:derby:C:/temp/play/play.test;create=true,MaxActive=100,MaxWait=10000,TestOnBorrow=true"/> <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> <property name="openjpa.Log" value="Enhance=ERROR, MetaData=ERROR, SQL=TRACE"/> <property name="openjpa.InverseManager" value="true"/> </properties> </persistence-unit> </persistence>