OpenJPA
  1. OpenJPA
  2. OPENJPA-1716

Deadlock with openjpa.Multithreaded=true

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 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
    • Fix Version/s: None
    • Component/s: None
    • Labels:
      None

      Description

      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()
        Unknown macro: { 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>

      1. OPENJPA-1716.PATCH
        6 kB
        Rick Curtis
      2. deadlock-fix-OPENJPA-1716.patch.txt
        0.7 kB
        David Minor

        Activity

          People

          • Assignee:
            Rick Curtis
            Reporter:
            Stefan Wokusch
          • Votes:
            2 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

            • Created:
              Updated:

              Development