[
https://issues.apache.org/jira/browse/OPENJPA-1716?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12887817#action_12887817
]
Stefan Wokusch commented on OPENJPA-1716:
-----------------------------------------
Ok, here are two Threads locking each other ::
Thread [main] (Suspended)
Unsafe.park(boolean, long) line: not available [native method]
LockSupport.park(Object) line: 158
ReentrantLock$NonfairSync(AbstractQueuedSynchronizer).parkAndCheckInterrupt()
line: 747
ReentrantLock$NonfairSync(AbstractQueuedSynchronizer).acquireQueued(AbstractQueuedSynchronizer$Node,
int) line: 778
ReentrantLock$NonfairSync(AbstractQueuedSynchronizer).acquire(int)
line: 1114
ReentrantLock$NonfairSync.lock() line: 186
ReentrantLock.lock() line: 262 [local variables unavailable]
StateManagerImpl.lock() line: 3305
StateManagerImpl.fetchObjectField(int) line: 2364
StateManagerImpl.fetchObject(int) line: 2357
RelationCollectionTableFieldStrategy(RelationToManyTableFieldStrategy).update(OpenJPAStateManager,
JDBCStore, RowManager) line: 194
RelationCollectionTableFieldStrategy.update(OpenJPAStateManager,
JDBCStore, RowManager) line: 107
FieldMapping.update(OpenJPAStateManager, JDBCStore, RowManager) line:
699
BatchingConstraintUpdateManager(AbstractUpdateManager).update(OpenJPAStateManager,
BitSet, ClassMapping, RowManager, JDBCStore, Collection, boolean) line: 334
BatchingConstraintUpdateManager(AbstractUpdateManager).populateRowManager(OpenJPAStateManager,
RowManager, JDBCStore, Collection, Collection) line: 169
BatchingConstraintUpdateManager(AbstractUpdateManager).flush(Collection,
JDBCStore, PreparedStatementManager) line: 95
BatchingConstraintUpdateManager(AbstractUpdateManager).flush(Collection,
JDBCStore) line: 76
JDBCStoreManager.flush(Collection) line: 751
ROPStoreManager(DelegatingStoreManager).flush(Collection<OpenJPAStateManager>)
line: 131
FinalizingBrokerImpl(BrokerImpl).flush(int) line: 2139
FinalizingBrokerImpl(BrokerImpl).flushSafe(int) line: 2037
FinalizingBrokerImpl(BrokerImpl).beforeCompletion() line: 1955
LocalManagedRuntime.commit() line: 81
FinalizingBrokerImpl(BrokerImpl).commit() line: 1479
DelegatingBroker.commit() line: 925
EntityManagerImpl.commit() line: 559
....
Thread [pool-2-thread-1] (Suspended)
Unsafe.park(boolean, long) line: not available [native method]
LockSupport.park(Object) line: 158
ReentrantLock$NonfairSync(AbstractQueuedSynchronizer).parkAndCheckInterrupt()
line: 747
ReentrantLock$NonfairSync(AbstractQueuedSynchronizer).acquireQueued(AbstractQueuedSynchronizer$Node,
int) line: 778
ReentrantLock$NonfairSync(AbstractQueuedSynchronizer).acquire(int)
line: 1114
ReentrantLock$NonfairSync.lock() line: 186
ReentrantLock.lock() line: 262
FinalizingBrokerImpl(BrokerImpl).lock() line: 4366
FinalizingBrokerImpl(BrokerImpl).beginOperation(boolean) line: 1893
FinalizingBrokerImpl(BrokerImpl).isActive() line: 1865
StateManagerImpl.beforeAccessField(int) line: 1603
StateManagerImpl.accessingField(int) line: 1591
ObjektEntity.pcGetid(ObjektEntity) line: not available
TestEntity(ObjektEntity).getId() line: 91
.....
> 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
>
> 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.