org.garret.perst
Class PersistentResource
java.lang.Object
org.garret.perst.Persistent
org.garret.perst.PersistentResource
- All Implemented Interfaces:
- java.io.Externalizable, java.io.Serializable, java.lang.Cloneable, ICloneable, IPersistent, IResource
- Direct Known Subclasses:
- L2ListElem, PersistentCollection, PersistentString, Version, VersionHistory
public class PersistentResource
- extends Persistent
- implements IResource
Base class for persistent capable objects supporting locking
- See Also:
- Serialized Form
|
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. |
| Methods inherited from class org.garret.perst.Persistent |
assignOid, clone, deallocate, equals, getOid, getStorage, hashCode, invalidate, isDeleted, isModified, isPersistent, isRaw, load, loadAndModify, makePersistent, modify, onLoad, onStore, readExternal, recursiveLoading, store, writeExternal |
| Methods inherited from class java.lang.Object |
getClass, notify, notifyAll, toString, wait, wait, wait |
PersistentResource
public PersistentResource()
PersistentResource
public PersistentResource(Storage storage)
exclusiveLock
public void exclusiveLock()
- Description copied from interface:
IResource
- 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.
- Specified by:
exclusiveLock in interface IResource
exclusiveLock
public boolean exclusiveLock(long timeout)
- Description copied from interface:
IResource
- 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.
- Specified by:
exclusiveLock in interface IResource
- 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()
- Description copied from interface:
IResource
- Reset resource to original state.
Wakrup all threads waiting for this resource.
- Specified by:
reset in interface IResource
sharedLock
public void sharedLock()
- Description copied from interface:
IResource
- 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.
- Specified by:
sharedLock in interface IResource
sharedLock
public boolean sharedLock(long timeout)
- Description copied from interface:
IResource
- 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.
- Specified by:
sharedLock in interface IResource
- 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()
- Description copied from interface:
IResource
- Remove granted lock. If lock was requested several times by one thread, then correspondent number
of unlocks is needed to release the lock.
- Specified by:
unlock in interface IResource