You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by oz...@apache.org on 2005/01/08 00:24:03 UTC
cvs commit: jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking GenericLockManager.java LockManager2.java
ozeigermann 2005/01/07 15:24:03
Modified: transaction/src/java/org/apache/commons/transaction/locking
GenericLockManager.java LockManager2.java
Log:
Added all the flexibility GenericLock offers to the new lock manager
Revision Changes Path
1.14 +19 -11 jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking/GenericLockManager.java
Index: GenericLockManager.java
===================================================================
RCS file: /home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking/GenericLockManager.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- GenericLockManager.java 7 Jan 2005 13:52:42 -0000 1.13
+++ GenericLockManager.java 7 Jan 2005 23:24:03 -0000 1.14
@@ -157,7 +157,15 @@
*/
public void lock(Object ownerId, Object resourceId, int targetLockLevel, boolean reentrant,
long timeoutMSecs) throws LockException {
+ lock(ownerId, resourceId, targetLockLevel, reentrant ? GenericLock.COMPATIBILITY_REENTRANT
+ : GenericLock.COMPATIBILITY_NONE, false, globalTimeoutMSecs);
+ }
+ /**
+ * @see LockManager2#lock(Object, Object, int, int, boolean, long)
+ */
+ public void lock(Object ownerId, Object resourceId, int targetLockLevel, int compatibility,
+ boolean preferred, long timeoutMSecs) throws LockException {
timeoutCheck(ownerId);
long now = System.currentTimeMillis();
@@ -189,7 +197,8 @@
// if not we still can check what the reason for this is
if (checkThreshhold != -1 && timeoutMSecs > checkThreshhold) {
acquired = lock
- .acquire(ownerId, targetLockLevel, true, reentrant, checkThreshhold);
+ .acquire(ownerId, targetLockLevel, true, compatibility,
+ preferred, checkThreshhold);
if (acquired) {
addOwner(ownerId, lock);
return;
@@ -211,12 +220,10 @@
// have a deadlock
Set conflicts = lock.getConflictingOwners(ownerId, targetLockLevel,
- reentrant ? GenericLock.COMPATIBILITY_REENTRANT
- : GenericLock.COMPATIBILITY_NONE);
+ compatibility);
boolean deadlock = wouldDeadlock(ownerId, lock, targetLockLevel,
- reentrant ? GenericLock.COMPATIBILITY_REENTRANT
- : GenericLock.COMPATIBILITY_NONE, conflicts);
+ compatibility, conflicts);
if (deadlock) {
throw new LockException("Lock would cause deadlock",
LockException.CODE_DEADLOCK_VICTIM, resourceId);
@@ -233,8 +240,8 @@
timeoutMSecs = waitEnd - now;
}
- acquired = lock
- .acquire(ownerId, targetLockLevel, true, reentrant, timeoutMSecs);
+ acquired = lock.acquire(ownerId, targetLockLevel, true, compatibility,
+ preferred, timeoutMSecs);
}
}
@@ -481,4 +488,5 @@
LockException.CODE_TIMED_OUT, null);
}
}
+
}
1.2 +39 -4 jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking/LockManager2.java
Index: LockManager2.java
===================================================================
RCS file: /home/cvs/jakarta-commons/transaction/src/java/org/apache/commons/transaction/locking/LockManager2.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- LockManager2.java 7 Jan 2005 13:32:33 -0000 1.1
+++ LockManager2.java 7 Jan 2005 23:24:03 -0000 1.2
@@ -106,6 +106,41 @@
long timeoutMSecs) throws LockException;
/**
+ * Most flexible way to acquire a lock on a resource. <br>
+ * <br>
+ * This method blocks and waits for the lock in case it is not avaiable. If
+ * there is a timeout or a deadlock or the thread is interrupted a
+ * LockException is thrown.
+ *
+ * @param ownerId
+ * a unique id identifying the entity that wants to acquire this
+ * lock
+ * @param resourceId
+ * the resource to get the level for
+ * @param targetLockLevel
+ * the lock level to acquire
+ * @param compatibility
+ * {@link GenericLock#COMPATIBILITY_NONE}if no additional compatibility is
+ * desired (same as reentrant set to false) ,
+ * {@link GenericLock#COMPATIBILITY_REENTRANT}if lock level by the same
+ * owner shall not affect compatibility (same as reentrant set to
+ * true), or {@link GenericLock#COMPATIBILITY_SUPPORT}if lock levels that
+ * are the same as the desired shall not affect compatibility, or
+ * finally {@link GenericLock#COMPATIBILITY_REENTRANT_AND_SUPPORT}which is
+ * a combination of reentrant and support
+ * @param preferred
+ * in case this lock request is incompatible with existing ones
+ * and we wait, it shall be granted before other waiting requests
+ * that are not preferred
+ * @param timeoutMSecs
+ * specifies the maximum wait time in milliseconds
+ * @throws LockException
+ * will be thrown when the lock can not be acquired
+ */
+ public void lock(Object ownerId, Object resourceId, int targetLockLevel, int compatibility,
+ boolean preferred, long timeoutMSecs) throws LockException;
+
+ /**
* Gets the lock level held by certain owner on a certain resource.
*
* @param ownerId the id of the owner of the lock
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org