org.apache.manifoldcf.core.interfaces
Interface ILockManager

All Known Implementing Classes:
LockManager

public interface ILockManager

The lock manager manages locks across all threads and JVMs and cluster members. It also manages shared data, which is not necessarily atomic and should be protected by locks.


Field Summary
static java.lang.String _rcsid
           
 
Method Summary
 boolean checkGlobalFlag(java.lang.String flagName)
          Check the condition of a specified flag.
 void clearGlobalFlag(java.lang.String flagName)
          Clear a flag.
 void clearLocks()
          Clear all outstanding locks in the system.
 void enterCriticalSections(java.lang.String[] readSectionKeys, java.lang.String[] nonExSectionKeys, java.lang.String[] writeSectionKeys)
          Enter multiple critical sections simultaneously.
 void enterLocks(java.lang.String[] readLocks, java.lang.String[] nonExWriteLocks, java.lang.String[] writeLocks)
          Enter multiple locks simultaneously.
 void enterLocksNoWait(java.lang.String[] readLocks, java.lang.String[] nonExWriteLocks, java.lang.String[] writeLocks)
          Enter multiple locks simultaneously.
 void enterNonExWriteCriticalSection(java.lang.String sectionKey)
          Enter a named, non-exclusive write critical section (NOT a lock).
 void enterNonExWriteLock(java.lang.String lockKey)
          Enter a non-exclusive write-locked area (blocking out all readers, but letting in other "writers").
 void enterNonExWriteLockNoWait(java.lang.String lockKey)
          Enter a non-exclusive write-locked area (blocking out all readers, but letting in other "writers").
 void enterReadCriticalSection(java.lang.String sectionKey)
          Enter a named, read critical section (NOT a lock).
 void enterReadLock(java.lang.String lockKey)
          Enter a read-only locked area (i.e., block ONLY if there's a writer).
 void enterReadLockNoWait(java.lang.String lockKey)
          Enter a read-only locked area (i.e., block ONLY if there's a writer).
 void enterWriteCriticalSection(java.lang.String sectionKey)
          Enter a named, exclusive write critical section (NOT a lock).
 void enterWriteLock(java.lang.String lockKey)
          Enter a write locked code area (i.e., block out both readers and other writers).
 void enterWriteLockNoWait(java.lang.String lockKey)
          Enter a write locked code area (i.e., block out both readers and other writers), but do not wait if the lock cannot be obtained.
 void leaveCriticalSections(java.lang.String[] readSectionKeys, java.lang.String[] nonExSectionKeys, java.lang.String[] writeSectionKeys)
          Leave multiple critical sections simultaneously.
 void leaveLocks(java.lang.String[] readLocks, java.lang.String[] nonExWriteLocks, java.lang.String[] writeLocks)
          Leave multiple locks.
 void leaveNonExWriteCriticalSection(java.lang.String sectionKey)
          Leave a named, non-exclusive write critical section (NOT a lock).
 void leaveNonExWriteLock(java.lang.String lockKey)
          Leave a non-exclusive write locked code area.
 void leaveReadCriticalSection(java.lang.String sectionKey)
          Leave a named, read critical section (NOT a lock).
 void leaveReadLock(java.lang.String lockKey)
          Leave a read-locked code area.
 void leaveWriteCriticalSection(java.lang.String sectionKey)
          Leave a named, exclusive write critical section (NOT a lock).
 void leaveWriteLock(java.lang.String lockKey)
          Leave a write locked code area.
 byte[] readData(java.lang.String resourceName)
          Read data from a shared data resource.
 void setGlobalFlag(java.lang.String flagName)
          Raise a flag.
 void timedWait(int time)
          Wait for a time before retrying a lock.
 void writeData(java.lang.String resourceName, byte[] data)
          Write data to a shared data resource.
 

Field Detail

_rcsid

static final java.lang.String _rcsid
See Also:
Constant Field Values
Method Detail

setGlobalFlag

void setGlobalFlag(java.lang.String flagName)
                   throws ManifoldCFException
Raise a flag. Use this method to assert a condition, or send a global signal. The flag will be reset when the entire system is restarted.

Parameters:
flagName - is the name of the flag to set.
Throws:
ManifoldCFException

clearGlobalFlag

void clearGlobalFlag(java.lang.String flagName)
                     throws ManifoldCFException
Clear a flag. Use this method to clear a condition, or retract a global signal.

Parameters:
flagName - is the name of the flag to clear.
Throws:
ManifoldCFException

checkGlobalFlag

boolean checkGlobalFlag(java.lang.String flagName)
                        throws ManifoldCFException
Check the condition of a specified flag.

Parameters:
flagName - is the name of the flag to check.
Returns:
true if the flag is set, false otherwise.
Throws:
ManifoldCFException

readData

byte[] readData(java.lang.String resourceName)
                throws ManifoldCFException
Read data from a shared data resource. Use this method to read any existing data, or get a null back if there is no such resource. Note well that this is not necessarily an atomic operation, and it must thus be protected by a lock.

Parameters:
resourceName - is the global name of the resource.
Returns:
a byte array containing the data, or null.
Throws:
ManifoldCFException

writeData

void writeData(java.lang.String resourceName,
               byte[] data)
               throws ManifoldCFException
Write data to a shared data resource. Use this method to write a body of data into a shared resource. Note well that this is not necessarily an atomic operation, and it must thus be protected by a lock.

Parameters:
resourceName - is the global name of the resource.
data - is the byte array containing the data. Pass null if you want to delete the resource completely.
Throws:
ManifoldCFException

timedWait

void timedWait(int time)
               throws ManifoldCFException
Wait for a time before retrying a lock. Use this method to wait after a LockException has been thrown. )If this is not done, the application will wind up busy waiting.)

Parameters:
time - is the amount of time to wait, in milliseconds. Zero is a legal value, and will wait no time, but will give up the current timeslice to another thread.
Throws:
ManifoldCFException

enterWriteLock

void enterWriteLock(java.lang.String lockKey)
                    throws ManifoldCFException
Enter a write locked code area (i.e., block out both readers and other writers). Write locks permit only ONE thread to be in the named section, across JVM's as well. In order to guarantee this, the current thread may wait until all other threads have left the section.

Parameters:
lockKey - is the name of the lock.
Throws:
ManifoldCFException

enterWriteLockNoWait

void enterWriteLockNoWait(java.lang.String lockKey)
                          throws ManifoldCFException,
                                 LockException
Enter a write locked code area (i.e., block out both readers and other writers), but do not wait if the lock cannot be obtained. Write locks permit only ONE thread to be in the named section, across JVM's as well. In order to guarantee this, an exception (LockException) will be thrown if the lock condition cannot be met immediately.

Parameters:
lockKey - is the name of the lock.
Throws:
ManifoldCFException
LockException

leaveWriteLock

void leaveWriteLock(java.lang.String lockKey)
                    throws ManifoldCFException
Leave a write locked code area. Use this method to exit a write-locked section. The lockKey parameter must correspond to the key used for the enter method.

Parameters:
lockKey - is the name of the lock.
Throws:
ManifoldCFException

enterNonExWriteLock

void enterNonExWriteLock(java.lang.String lockKey)
                         throws ManifoldCFException
Enter a non-exclusive write-locked area (blocking out all readers, but letting in other "writers"). This kind of lock is designed to be used in conjunction with read locks. It is used typically in a situation where the read lock represents a query and the non-exclusive write lock represents a modification to an individual item that might affect the query, but where multiple modifications do not individually interfere with one another (use of another, standard, write lock per item can guarantee this). This method works across JVMs, and may wait if the required lock cannot be immediately obtained.

Parameters:
lockKey - is the name of the lock.
Throws:
ManifoldCFException

enterNonExWriteLockNoWait

void enterNonExWriteLockNoWait(java.lang.String lockKey)
                               throws ManifoldCFException,
                                      LockException
Enter a non-exclusive write-locked area (blocking out all readers, but letting in other "writers"). This kind of lock is designed to be used in conjunction with read locks. It is used typically in a situation where the read lock represents a query and the non-exclusive write lock represents a modification to an individual item that might affect the query, but where multiple modifications do not individually interfere with one another (use of another, standard, write lock per item can guarantee this). This method works across JVMs, and will throw LockException if the lock condition cannot be immediately met.

Parameters:
lockKey - is the name of the lock.
Throws:
ManifoldCFException
LockException

leaveNonExWriteLock

void leaveNonExWriteLock(java.lang.String lockKey)
                         throws ManifoldCFException
Leave a non-exclusive write locked code area. Use this method to exit a non-ex-write-locked section. The lockKey parameter must correspond to the key used for the enter method.

Parameters:
lockKey - is the name of the lock.
Throws:
ManifoldCFException

enterReadLock

void enterReadLock(java.lang.String lockKey)
                   throws ManifoldCFException
Enter a read-only locked area (i.e., block ONLY if there's a writer). This kind of lock permits multiple threads inside the same code area, but only if there is no "writer" in the same section at the same time. This method works across JVMs, and may wait if the required lock cannot be immediately obtained.

Parameters:
lockKey - is the name of the lock.
Throws:
ManifoldCFException

enterReadLockNoWait

void enterReadLockNoWait(java.lang.String lockKey)
                         throws ManifoldCFException,
                                LockException
Enter a read-only locked area (i.e., block ONLY if there's a writer). This kind of lock permits multiple threads inside the same code area, but only if there is no "writer" in the same section at the same time. This method works across JVMs, and will throw LockException if the required lock cannot be immediately met.

Parameters:
lockKey - is the name of the lock.
Throws:
ManifoldCFException
LockException

leaveReadLock

void leaveReadLock(java.lang.String lockKey)
                   throws ManifoldCFException
Leave a read-locked code area. Use this method to exit a read-locked section. The lockKey parameter must correspond to the key used for the enter method.

Parameters:
lockKey - is the name of the lock.
Throws:
ManifoldCFException

enterLocks

void enterLocks(java.lang.String[] readLocks,
                java.lang.String[] nonExWriteLocks,
                java.lang.String[] writeLocks)
                throws ManifoldCFException
Enter multiple locks simultaneously. Use this method if a series or set of locks needs to be thrown for an operation to take place. This operation will avoid deadlock if all the locks are thrown at the start of the area using this method. This method works cross-JVM, and will wait if the required locks are not available.

Parameters:
readLocks - is an array of read lock names, or null if there are no read locks desired.
nonExWriteLocks - is an array of non-ex write lock names, or null if none desired.
writeLocks - is an array of write lock names, or null if there are none desired.
Throws:
ManifoldCFException

enterLocksNoWait

void enterLocksNoWait(java.lang.String[] readLocks,
                      java.lang.String[] nonExWriteLocks,
                      java.lang.String[] writeLocks)
                      throws ManifoldCFException,
                             LockException
Enter multiple locks simultaneously. Use this method if a series or set of locks needs to be thrown for an operation to take place. This operation will avoid deadlock if all the locks are thrown at the start of the area using this method. This method works cross-JVM, and will throw LockException if the required locks are not available.

Parameters:
readLocks - is an array of read lock names, or null if there are no read locks desired.
nonExWriteLocks - is an array of non-ex write lock names, or null if none desired.
writeLocks - is an array of write lock names, or null if there are none desired.
Throws:
ManifoldCFException
LockException

leaveLocks

void leaveLocks(java.lang.String[] readLocks,
                java.lang.String[] nonExWriteLocks,
                java.lang.String[] writeLocks)
                throws ManifoldCFException
Leave multiple locks. Use this method to leave a section started with enterLocks() or enterLocksNoWait(). The parameters must correspond to those passed to the enter method.

Parameters:
readLocks - is an array of read lock names, or null if there are no read locks desired.
nonExWriteLocks - is an array of non-ex write lock names, or null if none desired.
writeLocks - is an array of write lock names, or null if there are none desired.
Throws:
ManifoldCFException

clearLocks

void clearLocks()
                throws ManifoldCFException
Clear all outstanding locks in the system. This is a very dangerous method to use (obviously)...

Throws:
ManifoldCFException

enterReadCriticalSection

void enterReadCriticalSection(java.lang.String sectionKey)
                              throws ManifoldCFException
Enter a named, read critical section (NOT a lock). Critical sections never cross JVM boundaries. Critical section names do not collide with lock names; they have a distinct namespace.

Parameters:
sectionKey - is the name of the section to enter. Only one thread can be in any given named section at a time.
Throws:
ManifoldCFException

leaveReadCriticalSection

void leaveReadCriticalSection(java.lang.String sectionKey)
                              throws ManifoldCFException
Leave a named, read critical section (NOT a lock). Critical sections never cross JVM boundaries. Critical section names do not collide with lock names; they have a distinct namespace.

Parameters:
sectionKey - is the name of the section to leave. Only one thread can be in any given named section at a time.
Throws:
ManifoldCFException

enterNonExWriteCriticalSection

void enterNonExWriteCriticalSection(java.lang.String sectionKey)
                                    throws ManifoldCFException
Enter a named, non-exclusive write critical section (NOT a lock). Critical sections never cross JVM boundaries. Critical section names do not collide with lock names; they have a distinct namespace.

Parameters:
sectionKey - is the name of the section to enter. Only one thread can be in any given named section at a time.
Throws:
ManifoldCFException

leaveNonExWriteCriticalSection

void leaveNonExWriteCriticalSection(java.lang.String sectionKey)
                                    throws ManifoldCFException
Leave a named, non-exclusive write critical section (NOT a lock). Critical sections never cross JVM boundaries. Critical section names do not collide with lock names; they have a distinct namespace.

Parameters:
sectionKey - is the name of the section to leave. Only one thread can be in any given named section at a time.
Throws:
ManifoldCFException

enterWriteCriticalSection

void enterWriteCriticalSection(java.lang.String sectionKey)
                               throws ManifoldCFException
Enter a named, exclusive write critical section (NOT a lock). Critical sections never cross JVM boundaries. Critical section names do not collide with lock names; they have a distinct namespace.

Parameters:
sectionKey - is the name of the section to enter. Only one thread can be in any given named section at a time.
Throws:
ManifoldCFException

leaveWriteCriticalSection

void leaveWriteCriticalSection(java.lang.String sectionKey)
                               throws ManifoldCFException
Leave a named, exclusive write critical section (NOT a lock). Critical sections never cross JVM boundaries. Critical section names do not collide with lock names; they have a distinct namespace.

Parameters:
sectionKey - is the name of the section to leave. Only one thread can be in any given named section at a time.
Throws:
ManifoldCFException

enterCriticalSections

void enterCriticalSections(java.lang.String[] readSectionKeys,
                           java.lang.String[] nonExSectionKeys,
                           java.lang.String[] writeSectionKeys)
                           throws ManifoldCFException
Enter multiple critical sections simultaneously.

Parameters:
readSectionKeys - is an array of read section descriptors, or null if there are no read sections desired.
nonExSectionKeys - is an array of non-ex write section descriptors, or null if none desired.
writeSectionKeys - is an array of write section descriptors, or null if there are none desired.
Throws:
ManifoldCFException

leaveCriticalSections

void leaveCriticalSections(java.lang.String[] readSectionKeys,
                           java.lang.String[] nonExSectionKeys,
                           java.lang.String[] writeSectionKeys)
                           throws ManifoldCFException
Leave multiple critical sections simultaneously.

Parameters:
readSectionKeys - is an array of read section descriptors, or null if there are no read sections desired.
nonExSectionKeys - is an array of non-ex write section descriptors, or null if none desired.
writeSectionKeys - is an array of write section descriptors, or null if there are none desired.
Throws:
ManifoldCFException