public class WriteLockManager
extends java.lang.Object
Purpose: Acquires all required locks for a particular merge process. Implements a deadlock avoidance algorithm to prevent concurrent merge conflicts.
Responsibilities:
Modifier and Type | Field and Description |
---|---|
static int |
MAX_WAIT |
static int |
MAXTRIES |
Constructor and Description |
---|
WriteLockManager() |
Modifier and Type | Method and Description |
---|---|
CacheKey |
acquireLockAndRelatedLocks(java.lang.Object objectForClone,
java.util.Map lockedObjects,
java.util.Map refreshedObjects,
CacheKey cacheKey,
ClassDescriptor descriptor,
AbstractSession cloningSession)
INTERNAL:
This is a recursive method used to acquire read locks on all objects that
will be cloned.
|
java.util.Map |
acquireLocksForClone(java.lang.Object objectForClone,
ClassDescriptor descriptor,
CacheKey cacheKey,
AbstractSession cloningSession)
INTERNAL:
This method will return once the object is locked and all non-indirect
related objects are also locked.
|
void |
acquireRequiredLocks(MergeManager mergeManager,
UnitOfWorkChangeSet changeSet)
INTERNAL:
This method will be the entry point for threads attempting to acquire locks for all objects that have
a changeset.
|
CacheKey |
appendLock(java.lang.Object primaryKey,
java.lang.Object objectToLock,
ClassDescriptor descriptor,
MergeManager mergeManager,
AbstractSession session)
INTERNAL:
This method will be called by a merging thread that is attempting to lock
a new object that was not locked previously.
|
void |
releaseAllAcquiredLocks(MergeManager mergeManager)
INTERNAL:
This method will release all acquired locks
|
void |
transitionToDeferredLocks(MergeManager mergeManager)
INTERNAL:
This method will transition the previously acquired active
locks to deferred locks in the case a readlock could not be acquired for
a related object.
|
CacheKey |
traverseRelatedLocks(java.lang.Object objectForClone,
java.util.Map lockedObjects,
java.util.Map refreshedObjects,
ClassDescriptor descriptor,
AbstractSession cloningSession)
INTERNAL:
Traverse the object and acquire locks on all related objects.
|
public java.util.Map acquireLocksForClone(java.lang.Object objectForClone, ClassDescriptor descriptor, CacheKey cacheKey, AbstractSession cloningSession)
public CacheKey acquireLockAndRelatedLocks(java.lang.Object objectForClone, java.util.Map lockedObjects, java.util.Map refreshedObjects, CacheKey cacheKey, ClassDescriptor descriptor, AbstractSession cloningSession)
public void transitionToDeferredLocks(MergeManager mergeManager)
public CacheKey traverseRelatedLocks(java.lang.Object objectForClone, java.util.Map lockedObjects, java.util.Map refreshedObjects, ClassDescriptor descriptor, AbstractSession cloningSession)
public void acquireRequiredLocks(MergeManager mergeManager, UnitOfWorkChangeSet changeSet)
public CacheKey appendLock(java.lang.Object primaryKey, java.lang.Object objectToLock, ClassDescriptor descriptor, MergeManager mergeManager, AbstractSession session)
public void releaseAllAcquiredLocks(MergeManager mergeManager)
EclipseLink 2.6.3, "build v20160428-59c81c5" API Reference