Package org.apache.openjpa.kernel
Interface LockManager
-
- All Superinterfaces:
Closeable
,LockLevels
- All Known Subinterfaces:
JDBCLockManager
- All Known Implementing Classes:
AbstractLockManager
,MixedLockManager
,NoneLockManager
,PessimisticLockManager
,VersionLockManager
public interface LockManager extends Closeable, LockLevels
Handles obtaining and releasing locks on objects. The lock manager generally does not have to worry about synchronization, as the context is responsible for synchronizing the calls it makes to the lock manager.- Author:
- Marc Prud'hommeaux
-
-
Field Summary
-
Fields inherited from interface org.apache.openjpa.kernel.LockLevels
LOCK_NONE, LOCK_READ, LOCK_WRITE
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description void
beginTransaction()
Notification that a transaction is beginning.void
close()
Free any resources.void
endTransaction()
Notification that the current transaction has ended.int
getLockLevel(OpenJPAStateManager sm)
Return the lock level of the specified instance, orLockLevels.LOCK_NONE
if not locked.void
lock(OpenJPAStateManager sm, int level, int timeout, java.lang.Object sdata)
Obtain a lock on the specified object.void
lockAll(java.util.Collection sms, int level, int timeout, java.lang.Object sdata)
Obtain locks on the specified objects.void
refreshLock(OpenJPAStateManager sm, int level, int timeout, java.lang.Object sdata)
Perform the same function as previous lock method and has the option to perform a version check after the lock function has completed.void
release(OpenJPAStateManager sm)
Release the lock on the given object.void
setContext(StoreContext ctx)
Set the context this lock manager is associated with.
-
-
-
Method Detail
-
setContext
void setContext(StoreContext ctx)
Set the context this lock manager is associated with. This will be invoked in the lock manager before any other methods are called.
-
getLockLevel
int getLockLevel(OpenJPAStateManager sm)
Return the lock level of the specified instance, orLockLevels.LOCK_NONE
if not locked.
-
lock
void lock(OpenJPAStateManager sm, int level, int timeout, java.lang.Object sdata)
Obtain a lock on the specified object. This method may be called when a user explicitly locks an object, and is also called automatically for every object accessed during a transaction. The implementation must track already-locked objects, and must be optimized to return quickly when the given object does not need additional locking. The lock manager might use the state manager's lock object for bookkeeping information.- Parameters:
sm
- the object to locklevel
- one of the lock constants defined inLockLevels
, or a custom leveltimeout
- the timeout in milliseconds, or a negative number for no timeoutsdata
- the context information passed from the store manager to the persistence context, if any; lock managers specific to a certain back end may be able to take advantage of this; others should ignore it- Throws:
LockException
- if a lock cannot be obtained in the given number of milliseconds- See Also:
OpenJPAStateManager.setLock(java.lang.Object)
-
refreshLock
void refreshLock(OpenJPAStateManager sm, int level, int timeout, java.lang.Object sdata)
Perform the same function as previous lock method and has the option to perform a version check after the lock function has completed.
-
lockAll
void lockAll(java.util.Collection sms, int level, int timeout, java.lang.Object sdata)
Obtain locks on the specified objects.
-
release
void release(OpenJPAStateManager sm)
Release the lock on the given object. This method will be called automatically for each state manager with a lock object set on transaction completion, just before the call toendTransaction()
. The lock manager should null the state manager's lock object. Note that some state manager may be garbage collected during a transaction; thus lock managers cannot rely on this method being called for every state manager.
-
beginTransaction
void beginTransaction()
Notification that a transaction is beginning. Locks are only obtained within transactions, so an implementation might use this method to initialize bookkeeping datastructures, etc.
-
endTransaction
void endTransaction()
Notification that the current transaction has ended. Clear all datastructures, release any left over locks, etc.
-
-