[ 
https://issues.apache.org/jira/browse/OPENJPA-1716?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13423472#comment-13423472
 ] 

David Minor commented on OPENJPA-1716:
--------------------------------------

Yes. From my understanding, the broker and the state manager used to share the 
same lock, but for performance reasons separate locks were introduced. The 
deadlock in this JIRA is the result of those locks being acquired in a 
different order depending on the call path.

I'm a little fuzzy on where entity managers fit in, and how I should go about 
making my application immune to these problems. If I'm storing an entity in the 
user's session or in a cache somewhere, do I call the new detach() first so 
that cross-thread field access doesn't interact with the broker? Or is there 
some other thing I'm missing?
                
> Deadlock with openjpa.Multithreaded=true
> ----------------------------------------
>
>                 Key: OPENJPA-1716
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1716
>             Project: OpenJPA
>          Issue Type: Bug
>    Affects Versions: 2.0.0-M1, 2.0.0-M2, 2.0.0-M3, 2.0.0-beta, 2.0.0-beta2, 
> 2.0.0-beta3, 2.0.0
>            Reporter: Stefan Wokusch
>            Assignee: Rick Curtis
>         Attachments: OPENJPA-1716.PATCH, deadlock-fix-OPENJPA-1716.patch.txt
>
>
> There is a Deadlock by using Multithreaded=true and work with some Threads on 
> the same Entitymanager.
> After many hours of debugging, i found a solution for that Deadlock: The 
> Problem could be solved by adding another lock into the lock Method of the 
> StateManagerImpl:
> StateManagerImpl ~line3308
>     /**
>      * Lock the state manager if the multithreaded option is set.
>      */
>     protected void lock() {
>         if (_instanceLock != null){
>               _broker.lock();//<- This is the new Part to fix the Deadlock
>               _instanceLock.lock();
>         }
>     }
> Worked for me without Problems for a long time.
> Some other Configurations:
> <persistence xmlns="http://java.sun.com/xml/ns/persistence";
>       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; version="1.0">
>       <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
>               <mapping-file>orm.xml</mapping-file>
>               
>               <class>...</class>
>               <class>...</class>
>               
>               <properties>
>                       <property name="openjpa.OrphanedKeyAction" 
> value="log(Channel=Orphans, Level=TRACE)" />
>                       <property name="openjpa.ConnectionFactoryProperties" 
> value="PrettyPrint=true, PrettyPrintLineLength=80" />
>                       <property name="openjpa.Multithreaded" value="true" />
>                       <property name="openjpa.InverseManager" value="true" />
>                       <property name="openjpa.LockManager" value="none" />
>                       <property name="openjpa.WriteLockLevel" value="none" />
>                       <property name="openjpa.Compatibility" value="
>                                       QuotedNumbersInQueries=true, 
>                                       CopyOnDetach=true,
>                                       cascadeWithDetach=true,
>                                       
> superclassDiscriminatorStrategyByDefault=false
>                       " />
>                       <property name="openjpa.DetachState" 
> value="fetch-groups" />
>                       <property name="openjpa.jdbc.SynchronizeMappings" 
> value="buildSchema" />
>                       <!-- Default DataSource -->
>                       <property name="openjpa.ConnectionURL" 
> value="jdbc:h2:db/test" />
>                       <property name="openjpa.ConnectionDriverName" 
> value="org.h2.Driver" />
>               </properties>
>       </persistence-unit>
> </persistence>

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to