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>

Reply via email to