public class WriteLockManager extends 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 |
MAXTRIES |
protected ExposedNodeLinkedList |
prevailingQueue |
Constructor and Description |
---|
WriteLockManager() |
Modifier and Type | Method and Description |
---|---|
CacheKey |
acquireLockAndRelatedLocks(Object objectForClone,
Map lockedObjects,
Vector primaryKeys,
ClassDescriptor descriptor,
AbstractSession session)
INTERNAL:
This is a recursive method used to acquire read locks on all objects that
will be cloned.
|
Map |
acquireLocksForClone(Object objectForClone,
ClassDescriptor descriptor,
Vector primaryKeys,
AbstractSession session)
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.
|
Object |
appendLock(Vector primaryKeys,
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.
|
protected CacheKey |
attemptToAcquireLock(Class objectClass,
CacheKey cacheKey,
AbstractSession session)
INTERNAL:
This method performs the operations of finding the cacheKey and locking it if possible.
|
protected CacheKey |
checkAndLockObject(Object objectToLock,
Map lockedObjects,
DatabaseMapping mapping,
AbstractSession session)
INTERNAL:
Simply check that the object is not already locked then pass it on to the locking method
|
void |
releaseAllAcquiredLocks(MergeManager mergeManager)
INTERNAL:
This method will release all acquired locks
|
CacheKey |
traverseRelatedLocks(Object objectForClone,
Map lockedObjects,
ClassDescriptor descriptor,
AbstractSession session)
INTERNAL:
Traverse the object and acquire locks on all related objects.
|
protected CacheKey |
waitOnObjectLock(Class objectClass,
CacheKey cacheKey,
AbstractSession session)
INTERNAL:
This method performs the operations of finding the cacheKey and locking it if possible.
|
protected ExposedNodeLinkedList prevailingQueue
public static int MAXTRIES
public Map acquireLocksForClone(Object objectForClone, ClassDescriptor descriptor, Vector primaryKeys, AbstractSession session)
public CacheKey acquireLockAndRelatedLocks(Object objectForClone, Map lockedObjects, Vector primaryKeys, ClassDescriptor descriptor, AbstractSession session)
public CacheKey traverseRelatedLocks(Object objectForClone, Map lockedObjects, ClassDescriptor descriptor, AbstractSession session)
public void acquireRequiredLocks(MergeManager mergeManager, UnitOfWorkChangeSet changeSet)
public Object appendLock(Vector primaryKeys, Object objectToLock, ClassDescriptor descriptor, MergeManager mergeManager, AbstractSession session)
protected CacheKey attemptToAcquireLock(Class objectClass, CacheKey cacheKey, AbstractSession session)
protected CacheKey checkAndLockObject(Object objectToLock, Map lockedObjects, DatabaseMapping mapping, AbstractSession session)
public void releaseAllAcquiredLocks(MergeManager mergeManager)
protected CacheKey waitOnObjectLock(Class objectClass, CacheKey cacheKey, AbstractSession session)
Copyright © 2023. All rights reserved.