org.garret.perst
Interface IResource

All Known Subinterfaces:
BitIndex, Blob, FieldIndex, GenericIndex, Index, IPersistentSet, PatriciaTrie, SortedCollection, SpatialIndex, SpatialIndexR2, TimeSeries
All Known Implementing Classes:
PersistentResource

public interface IResource

Interface of object supporting locking


Method Summary
 void exclusiveLock()
          Lock persistent object in exclusive mode.
 boolean exclusiveLock(long timeout)
          Lock persistent object in exclusive mode.
 void reset()
          Reset resource to original state.
 void sharedLock()
          Lock persistent object in shared mode.
 boolean sharedLock(long timeout)
          Lock persistent object in shared mode.
 void unlock()
          Remove granted lock.
 

Method Detail

exclusiveLock

public void exclusiveLock()
Lock persistent object in exclusive mode. Only one thread can lock object in exclusive mode at each moment of time. Shared or exclusive lock requests of other threads will be blocked until this lock is released. shared locks on this objects, but not exclusive lock can be set until this lock is released.
This lock is reentrant, so thread owning the lock can successfully retrieve the lock many times (and correspondent number of unlocks is needed to release the lock).
Locking the object doesn't prevent other threads from accessing the object - it only has influence on sharedLock and exclusiveLock methods. So programmer should set proper lock before accessing the object in multithreaded application.
Only persistent object (object which were assigned to the the storage either implicitly by saving some other persistent object referencing this object, either explicitly by Storage.makeObjectPersistent method.


exclusiveLock

public boolean exclusiveLock(long timeout)
Lock persistent object in exclusive mode. Only one thread can lock object in exclusive mode at each moment of time. Shared or exclusive lock requests of other threads will be blocked until this lock is released. shared locks on this objects, but not exclusive lock can be set until this lock is released.
This lock is reentrant, so thread owning the lock can successfully retrieve the lock many times (and correspondent number of unlocks is needed to release the lock).
Locking the object doesn't prevent other threads from accessing the object - it only has influence on sharedLock and exclusiveLock methods. So programmer should set proper lock before accessing the object in multithreaded application.
Only persistent object (object which were assigned to the the storage either implicitly by saving some other persistent object referencing this object, either explicitly by Storage.makeObjectPersistent method.

Parameters:
timeout - timeout of operation in milliseconds. If timeout is 0 and lock can not be granted, the request will fail immediately. Otherwise the system will try to grant lock within specified amount of time.
Returns:
true if lock is successfully granted
false if lock can not be granted within specified time

reset

public void reset()
Reset resource to original state. Wakeup all threads waiting for this resource.


sharedLock

public void sharedLock()
Lock persistent object in shared mode. Other threads will be able to set their shared locks on this objects, but not exclusive lock can be set until this lock is released.
Upgrading of the lock is not possible (thread having read lock can not upgrade it to exclusive lock). It is done to prevent possible deadlocks caused by lock updates. But locks are reentrant - so thread can request the same lock many times (and correspondent number of unlocks is needed to release the lock).
Locking the object doesn't prevent other threads from accessing the object - it only has influence on sharedLock and exclusiveLock methods. So programmer should set proper lock before accessing the object in multithreaded application.
If object is concurrently accessed by several threads in read-only mode, then explicit locking of this object is not needed, because language API provides consistent retrieving of objects itself.
Only persistent object (object which were assigned to the the storage either implicitly by saving some other persistent object referencing this object, either explicitly by Storage.makeObjectPersistent method.


sharedLock

public boolean sharedLock(long timeout)
Lock persistent object in shared mode. Other threads will be able to set their shared locks on this objects, but not exclusive lock can be set until this lock is released.
Upgrading of the lock is not possible (thread having read lock can not upgrade it to exclusive lock). It is done to prevent possible deadlocks caused by lock updates. But locks are reentrant - so thread can request the same lock many times (and correspondent number of unlocks is needed to release the lock).
Locking the object doesn't prevent other threads from accessing the object - it only has influence on sharedLock and exclusiveLock methods. So programmer should set proper lock before accessing the object in multithreaded application.
If object is concurrently accessed by several threads in read-only mode, then explicit locking of this object is not needed, because language API provides consistent retrieving of objects itself.
Only persistent object (object which were assigned to the the storage either implicitly by saving some other persistent object referencing this object, either explicitly by Storage.makeObjectPersistent method.

Parameters:
timeout - timeout of operation in milliseconds. If timeout is 0 and lock can not be granted, the request will fail immediately. Otherwise the system will try to grant lock within specified amount of time.
Returns:
true if lock is successfully granted
false if lock can not be granted within specified time

unlock

public void unlock()
Remove granted lock. If lock was requested several times by one thread, then correspondent number of unlocks is needed to release the lock.