You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "David Minor (JIRA)" <ji...@apache.org> on 2012/07/26 21:18:35 UTC

[jira] [Updated] (OPENJPA-1716) Deadlock with openjpa.Multithreaded=true

     [ https://issues.apache.org/jira/browse/OPENJPA-1716?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

David Minor updated OPENJPA-1716:
---------------------------------

    Attachment: deadlock-fix-OPENJPA-1716.patch.txt

I've attached the fix I'm using to avoid the deadlock I was seeing. It's similar to the original patch in that it locks the broker before the state manager, but only for the particular field access call where I was seeing deadlock.
                
> 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