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, 2.0.0-beta3, 2.0.0-beta2, 2.0.0-beta, 2.0.0-M3, 
2.0.0-M2, 2.0.0-M1
            Reporter: Stefan Wokusch


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.
-
You can reply to this email to add a comment to the issue online.

Reply via email to