You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2007/03/15 02:13:09 UTC

svn commit: r518416 - in /db/ojb/branches/OJB_1_0_RELEASE/src: java/org/apache/ojb/broker/locking/ test/org/apache/ojb/

Author: arminw
Date: Wed Mar 14 18:13:07 2007
New Revision: 518416

URL: http://svn.apache.org/viewvc?view=rev&rev=518416
Log:
add new methods to locking-api, adapt and improve existing LockManager-impl classes

Modified:
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/CommonsOJBLockManager.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManager.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerCommonsImpl.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerRemoteImpl.java
    db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerServlet.java
    db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/web.xml

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/CommonsOJBLockManager.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/CommonsOJBLockManager.java?view=diff&rev=518416&r1=518415&r2=518416
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/CommonsOJBLockManager.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/CommonsOJBLockManager.java Wed Mar 14 18:13:07 2007
@@ -15,11 +15,16 @@
  * limitations under the License.
  */
 
+import java.util.Set;
+import java.util.Iterator;
+
 import org.apache.commons.transaction.locking.GenericLock;
 import org.apache.commons.transaction.locking.GenericLockManager;
 import org.apache.commons.transaction.locking.LockException;
 import org.apache.commons.transaction.locking.MultiLevelLock;
 import org.apache.commons.transaction.util.LoggerFacade;
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.commons.lang.builder.ToStringStyle;
 
 /**
  * Extension of {@link org.apache.commons.transaction.locking.GenericLockManager} to
@@ -32,7 +37,6 @@
  * {@link #createIsolationLevel(Object, Object, org.apache.commons.transaction.util.LoggerFacade)}
  * dependend on the specified isolation level.
  *
- * @author <a href="mailto:arminw@apache.org">Armin Waibel</a>
  * @version $Id$
  */
 class CommonsOJBLockManager extends GenericLockManager
@@ -41,10 +45,20 @@
     static final int COMMON_WRITE_LOCK = 107;
     static final int COMMON_UPGRADE_LOCK = 113;
 
-    public CommonsOJBLockManager(LoggerFacade logger, long timeoutMSecs, long checkThreshholdMSecs)
+    public CommonsOJBLockManager(LoggerFacade logger, long globalLockTimeoutMSecs, long checkThreshholdMSecs)
             throws IllegalArgumentException
     {
-        super(1, logger, timeoutMSecs, checkThreshholdMSecs);
+        super(1, logger, globalLockTimeoutMSecs, checkThreshholdMSecs);
+    }
+
+    public synchronized String toString()
+    {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("globalOwner_MapSize="+globalOwners.size())
+                .append("globalLocks_MapSize="+globalLocks.size())
+                .append("effectiveGlobalTimeouts_MapSize="+effectiveGlobalTimeouts.size())
+                .append("timedOutOwners_SetSize="+effectiveGlobalTimeouts.size())
+                .toString();
     }
 
     /**
@@ -192,7 +206,7 @@
      */
     public OJBLock createIsolationLevel(Object resourceId, Object isolationId, LoggerFacade logger)
     {
-        OJBLock result = null;
+        OJBLock result;
         switch(((Integer) isolationId).intValue())
         {
             case LockManager.IL_READ_UNCOMMITTED:
@@ -223,7 +237,7 @@
      *
      * @param isolationId
      * @param lockLevel
-     * @return
+     * @return the commons-tx lock level
      */
     int mapLockLevelDependendOnIsolationLevel(Integer isolationId, int lockLevel)
     {
@@ -382,7 +396,7 @@
 
         static int mapLockLevel(int commonLockLevel)
         {
-            int result = 0;
+            int result;
             switch(commonLockLevel)
             {
                 case COMMON_READ_LOCK:
@@ -447,7 +461,7 @@
 
         protected boolean isCompatible(int targetLockLevel, int currentLockLevel)
         {
-            return currentLockLevel > NO_LOCK ? false : true;
+            return currentLockLevel <= NO_LOCK;
         }
     }
 }

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManager.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManager.java?view=diff&rev=518416&r1=518415&r2=518416
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManager.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManager.java Wed Mar 14 18:13:07 2007
@@ -86,82 +86,130 @@
     public String getLockInfo();
 
     /**
-     * Acquires a readlock for lock key on resource object.
+     * Acquires a readlock for lock owner on resource object.
      * Returns true if successful, else false.
      *
-     * @param key            The owner key of the lock.
-     * @param resourceId     The resource to lock.
+     * @param owner        The owner of the lock.
+     * @param resource     The resource to lock.
      * @param isolationLevel The isolation level of the lock.
      * @return <em>True</em> if the lock was successfully acquired.
      */
-    public boolean readLock(Object key, Object resourceId, int isolationLevel);
+    public boolean readLock(Object owner, Object resource, int isolationLevel);
 
     /**
-     * Acquires a write lock for lock key on resource object.
+     * Acquires a readlock for lock owner on resource object.
+     * Returns <em>true</em> if successful, else false.
+     * The <em>lock timeout</em> and the <em>block timeout</em> must
+     * be specified too (support for <em>lock timeout</em> and the <em>block timeout</em>
+     * depends on the implementation).
+     *
+     * @param owner        The owner of the lock.
+     * @param resource     The resource to lock.
+     * @param isolationLevel The isolation level of the lock.
+     * @param lockTimeout The lock timeout in <em>ms</em> of acquired lock.
+     * @param blockTimeout The time to wait for acquire the lock in <em>ms</em>.
+     * @return <em>True</em> if the lock was successfully acquired.
+     */
+    public boolean readLock(Object owner, Object resource, int isolationLevel, long lockTimeout, long blockTimeout);
+
+    /**
+     * Acquires a write lock for lock owner on resource object.
      * Returns true if successful, else false.
      *
-     * @param key            The owner key of the lock.
-     * @param resourceId     The resource to lock.
+     * @param owner        The owner of the lock.
+     * @param resource     The resource to lock.
+     * @param isolationLevel The isolation level of the lock.
+     * @return <em>True</em> if the lock was successfully acquired.
+     */
+    public boolean writeLock(Object owner, Object resource, int isolationLevel);
+
+    /**
+     * Acquires a write lock for lock owner on resource object.
+     * Returns true if successful, else false.
+     * The <em>lock timeout</em> and the <em>block timeout</em> must
+     * be specified too (support for <em>lock timeout</em> and the <em>block timeout</em>
+     * depends on the implementation).
+     *
+     * @param owner        The owner of the lock.
+     * @param resource     The resource to lock.
+     * @param isolationLevel The isolation level of the lock.
+     * @param lockTimeout The lock timeout in <em>ms</em> of acquired lock.
+     * @param blockTimeout The time to wait for acquire the lock in <em>ms</em>.
+     * @return <em>True</em> if the lock was successfully acquired.
+     */
+    public boolean writeLock(Object owner, Object resource, int isolationLevel, long lockTimeout, long blockTimeout);
+
+    /**
+     * Acquire an upgrade lock.
+     * (Current implementations always acquire a write lock instead).
+     *
+     * @param owner        The owner of the lock.
+     * @param resource     The resource to lock.
      * @param isolationLevel The isolation level of the lock.
      * @return <em>True</em> if the lock was successfully acquired.
      */
-    public boolean writeLock(Object key, Object resourceId, int isolationLevel);
+    public boolean upgradeLock(Object owner, Object resource, int isolationLevel);
 
     /**
      * Acquire an upgrade lock.
      * (Current implementations always acquire a write lock instead).
+     * The <em>lock timeout</em> and the <em>block timeout</em> must
+     * be specified too (support for <em>lock timeout</em> and the <em>block timeout</em>
+     * depends on the implementation).
      *
-     * @param key            The owner key of the lock.
-     * @param resourceId     The resource to lock.
+     * @param owner        The owner of the lock.
+     * @param resource     The resource to lock.
      * @param isolationLevel The isolation level of the lock.
+     * @param lockTimeout The lock timeout in <em>ms</em> of acquired lock.
+     * @param blockTimeout The time to wait for acquire the lock in <em>ms</em>.
      * @return <em>True</em> if the lock was successfully acquired.
      */
-    public boolean upgradeLock(Object key, Object resourceId, int isolationLevel);
+    public boolean upgradeLock(Object owner, Object resource, int isolationLevel, long lockTimeout, long blockTimeout);
 
     /**
-     * Releases a lock for lock key on resource object.
+     * Releases a lock for lock owner on resource object.
      * Returns true if successful, else false.
      *
-     * @param key            The owner key of the lock.
-     * @param resourceId     The resource to release.
+     * @param owner        The owner of the lock.
+     * @param resource     The resource to release.
      * @return <em>True</em> if the lock was successfully released.
      */
-    public boolean releaseLock(Object key, Object resourceId);
+    public boolean releaseLock(Object owner, Object resource);
 
     /**
-     * Release all resource locks hold by the specified owner key.
+     * Release all resource locks hold by the specified owner owner.
      *
-     * @param key The owner key to release all associated locks.
+     * @param owner The owner to release all associated locks.
      */
-    public void releaseLocks(Object key);
+    public void releaseLocks(Object owner);
 
     /**
      * Checks if there is a read lock for owner key on resource object.
      * Returns true if so, else false.
      *
-     * @param key            The owner key of the lock.
-     * @param resourceId     The resource to check.
+     * @param owner        The owner key of the lock.
+     * @param resource     The resource to check.
      * @return <em>True</em> if the lock exists.
      */
-    public boolean hasRead(Object key, Object resourceId);
+    public boolean hasRead(Object owner, Object resource);
 
     /**
-     * Checks if there is a write lock for lock key on resource object.
+     * Checks if there is a write lock for lock owner on resource object.
      * Returns true if so, else false.
      *
-     * @param key            The owner key of the lock.
-     * @param resourceId     The resource to check.
+     * @param owner        The owner key of the lock.
+     * @param resource     The resource to check.
      * @return <em>True</em> if the lock exists.
      */
-    public boolean hasWrite(Object key, Object resourceId);
+    public boolean hasWrite(Object owner, Object resource);
 
     /**
-     * Checks if there is a upgrade lock for lock key on resource object.
+     * Checks if there is a upgrade lock for lock owner on resource object.
      * Returns true if so, else false.
      *
-     * @param key            The owner key of the lock.
-     * @param resourceId     The resource to check.
+     * @param owner        The owner key of the lock.
+     * @param resource     The resource to check.
      * @return <em>True</em> if the lock exists.
      */
-    public boolean hasUpgrade(Object key, Object resourceId);
+    public boolean hasUpgrade(Object owner, Object resource);
 }

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerCommonsImpl.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerCommonsImpl.java?view=diff&rev=518416&r1=518415&r2=518416
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerCommonsImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerCommonsImpl.java Wed Mar 14 18:13:07 2007
@@ -29,11 +29,7 @@
 /**
  * A {@link LockManager} implementation based on apache's commons-transaction
  * locking part.
- * <p/>
- * The timeout of locks is currently (OJB 1.0.2) not supported, maybe
- * in further versions.
  *
- * @author <a href="mailto:arminw@apache.org">Armin Waibel</a>
  * @version $Id$
  */
 public class LockManagerCommonsImpl implements LockManager, Configurable
@@ -75,6 +71,7 @@
 
     public void setLockTimeout(long timeout)
     {
+        log.debug("Set lock timeout to " + timeout + " ms");
         this.lockTimeout = timeout;
     }
 
@@ -85,6 +82,7 @@
 
     public void setBlockTimeout(long blockTimeout)
     {
+        log.debug("Set waiting block time to acquire a lock to " + blockTimeout + " ms");
         this.blockTimeout = blockTimeout;
     }
 
@@ -95,65 +93,83 @@
         msg.append("lock timeout: ").append(getLockTimeout()).append(" [ms]").append(eol);
         msg.append("block timeout: ").append(getBlockTimeout()).append(" [ms]").append(eol);
         msg.append("commons-tx lock-manger info ==> ").append(eol);
-        msg.append(lm);
+        msg.append(lm != null ? lm.toString() : "not initialized");
         return msg.toString();
     }
 
-    public boolean readLock(Object key, Object resourceId, int isolationLevel)
+    public boolean readLock(final Object owner, final Object resource, final int isolationLevel,
+                            final long lockTimeout, final long blockTimeout)
     {
-        return ignore(isolationLevel) || lm.readLock(key, resourceId, new Integer(isolationLevel), blockTimeout);
+        return ignore(isolationLevel) || lm.readLock(owner, resource, new Integer(isolationLevel), blockTimeout, lockTimeout);
     }
 
-    public boolean writeLock(Object key, Object resourceId, int isolationLevel)
+    public boolean readLock(final Object owner, final Object resource, final int isolationLevel)
     {
-        return ignore(isolationLevel) || lm.writeLock(key, resourceId, new Integer(isolationLevel), blockTimeout);
+        return readLock(owner, resource, isolationLevel, lockTimeout, blockTimeout);
     }
 
-    public boolean upgradeLock(Object key, Object resourceId, int isolationLevel)
+    public boolean writeLock(final Object owner, final Object resource, final int isolationLevel,
+                            final long lockTimeout, final long blockTimeout)
     {
-        return ignore(isolationLevel) || lm.upgradeLock(key, resourceId, new Integer(isolationLevel), blockTimeout);
+        return ignore(isolationLevel) || lm.writeLock(owner, resource, new Integer(isolationLevel), blockTimeout, lockTimeout);
     }
 
-    public boolean releaseLock(Object key, Object resourceId)
+    public boolean writeLock(final Object owner, final Object resource, final int isolationLevel)
+    {
+        return writeLock(owner, resource, isolationLevel, lockTimeout, blockTimeout);
+    }
+
+    public boolean upgradeLock(final Object owner, final Object resource, final int isolationLevel,
+                            final long lockTimeout, final long blockTimeout)
+    {
+        return ignore(isolationLevel) || lm.upgradeLock(owner, resource, new Integer(isolationLevel), blockTimeout, lockTimeout);
+    }
+
+    public boolean upgradeLock(final Object owner, final Object resource, final int isolationLevel)
+    {
+        return upgradeLock(owner, resource, isolationLevel, lockTimeout, blockTimeout);
+    }
+
+    public boolean releaseLock(Object owner, Object resourceId)
     {
         boolean result = true;
         try
         {
-            lm.release(key, resourceId);
+            lm.release(owner, resourceId);
         }
         catch(RuntimeException e)
         {
-            log.error("Can't release lock for owner key " + key + ", on resource " + resourceId, e);
+            log.error("Can't release lock for owner " + owner + ", on resource " + resourceId, e);
             result = false;
         }
         return result;
     }
 
-    public void releaseLocks(Object key)
+    public void releaseLocks(Object owner)
     {
         try
         {
-            lm.releaseAll(key);
+            lm.releaseAll(owner);
         }
         catch(RuntimeException e)
         {
-            log.error("Can't release all locks for owner key " + key, e);
+            log.error("Can't release all locks for owner " + owner, e);
         }
     }
 
-    public boolean hasRead(Object key, Object resourceId)
+    public boolean hasRead(Object owner, Object resourceId)
     {
-        return lm.hasRead(key, resourceId);
+        return lm.hasRead(owner, resourceId);
     }
 
-    public boolean hasWrite(Object key, Object resourceId)
+    public boolean hasWrite(Object owner, Object resourceId)
     {
-        return lm.hasWrite(key, resourceId);
+        return lm.hasWrite(owner, resourceId);
     }
 
-    public boolean hasUpgrade(Object key, Object resourceId)
+    public boolean hasUpgrade(Object owner, Object resourceId)
     {
-        return lm.hasUpgrade(key, resourceId);
+        return lm.hasUpgrade(owner, resourceId);
     }
 
 
@@ -167,10 +183,10 @@
      */
     final class OJBLockManager extends CommonsOJBLockManager
     {
-        public OJBLockManager(LoggerFacade logger, long timeoutMSecs, long checkThreshholdMSecs)
+        public OJBLockManager(LoggerFacade logger, long globalLockTimeoutMSecs, long checkThreshholdMSecs)
                 throws IllegalArgumentException
         {
-            super(logger, timeoutMSecs, checkThreshholdMSecs);
+            super(logger, globalLockTimeoutMSecs, checkThreshholdMSecs);
         }
 
         private CommonsOJBLockManager.OJBLock lookupLock(Object resourceId)
@@ -178,7 +194,7 @@
             return (CommonsOJBLockManager.OJBLock) getLock(resourceId);
         }
 
-        boolean readLock(Object key, Object resourceId, Integer isolationLevel, long timeout)
+        boolean readLock(Object owner, Object resourceId, Integer isolationLevel, long blockTimeout, long lockTimeout)
         {
             /*
             arminw: Not sure what's the best way to go
@@ -191,48 +207,55 @@
             So I chose the 'tryLock' call for read locks which immediately return.
             */
             int lockLevel = mapLockLevelDependendOnIsolationLevel(isolationLevel, COMMON_READ_LOCK);
-            return tryLock(key, resourceId, lockLevel, true, isolationLevel);
+            boolean result = tryLock(owner, resourceId, lockLevel, true, isolationLevel);
+            if(result)
+            {
+                startGlobalTimeout(owner, lockTimeout);
+            }
+            return result;
         }
 
-        boolean writeLock(Object key, Object resourceId, Integer isolationLevel, long timeout)
+        boolean writeLock(Object owner, Object resourceId, Integer isolationLevel, long blockTimeout, long lockTimeout)
         {
             try
             {
                 int lockLevel = mapLockLevelDependendOnIsolationLevel(isolationLevel, COMMON_WRITE_LOCK);
-                lock(key, resourceId, lockLevel, GenericLock.COMPATIBILITY_REENTRANT,
-                        false, timeout, isolationLevel);
+                lock(owner, resourceId, lockLevel, GenericLock.COMPATIBILITY_REENTRANT,
+                        false, blockTimeout, isolationLevel);
+                startGlobalTimeout(owner, lockTimeout);
                 return true;
             }
             catch(LockException e)
             {
-                if(log.isEnabledFor(Logger.INFO)) log.info("Can't get write lock for " + key, e);
+                if(log.isEnabledFor(Logger.INFO)) log.info("Can't get write lock for " + owner + ", " + e.getReason(), e);
                 return false;
             }
         }
 
-        boolean upgradeLock(Object key, Object resourceId, Integer isolationLevel, long timeout)
+        boolean upgradeLock(Object owner, Object resourceId, Integer isolationLevel, long blockTimeout, long lockTimeout)
         {
             try
             {
                 int lockLevel = mapLockLevelDependendOnIsolationLevel(isolationLevel, COMMON_UPGRADE_LOCK);
-                lock(key, resourceId, lockLevel, GenericLock.COMPATIBILITY_REENTRANT,
-                        false, timeout, isolationLevel);
+                lock(owner, resourceId, lockLevel, GenericLock.COMPATIBILITY_REENTRANT,
+                        false, blockTimeout, isolationLevel);
+                startGlobalTimeout(owner, lockTimeout);
                 return true;
             }
             catch(LockException e)
             {
-                if(log.isEnabledFor(Logger.INFO)) log.info("Can't get upgrade lock for " + key, e);
+                if(log.isEnabledFor(Logger.INFO)) log.info("Can't get upgrade lock for " + owner + ", " + e.getReason(), e);
                 return false;
             }
         }
 
-        boolean hasRead(Object key, Object resourceId)
+        boolean hasRead(Object owner, Object resourceId)
         {
             CommonsOJBLockManager.OJBLock lock = lookupLock(resourceId);
             boolean result = false;
             if(lock != null)
             {
-                result = lock.hasRead(key);
+                result = lock.hasRead(owner);
             }
             return result;
         }
@@ -248,15 +271,20 @@
             return result;
         }
 
-        boolean hasUpgrade(Object key, Object resourceId)
+        boolean hasUpgrade(Object owner, Object resourceId)
         {
             CommonsOJBLockManager.OJBLock lock = lookupLock(resourceId);
             boolean result = false;
             if(lock != null)
             {
-                result = lock.hasUpgrade(key);
+                result = lock.hasUpgrade(owner);
             }
             return result;
+        }
+
+        public synchronized String toString()
+        {
+            return "[" + this.getClass().getName() + "] " + super.toString();
         }
     }
 

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerRemoteImpl.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerRemoteImpl.java?view=diff&rev=518416&r1=518415&r2=518416
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerRemoteImpl.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerRemoteImpl.java Wed Mar 14 18:13:07 2007
@@ -81,7 +81,12 @@
         {
             throw new ConfigurationException("Invalid LockServlet Url was specified: " + url, e);
         }
+    }
 
+    /** noop */
+    public void setBlockTimeout(long timeout)
+    {
+        log.info("Can't set global block-timeout, it's managed by the lock-servlet");
     }
 
     /**
@@ -91,7 +96,7 @@
      */
     public void setLockTimeout(long timeout)
     {
-        log.info("Can't set lock-timeout, it's managed by the lock-servlet");
+        log.info("Can't set global lock-timeout, it's managed by the lock-servlet");
     }
 
     public long getLockTimeout()
@@ -131,12 +136,6 @@
         }
     }
 
-    /** noop */
-    public void setBlockTimeout(long timeout)
-    {
-        log.info("Can't set lock-timeout, it's managed by the lock-servlet");
-    }
-
     public String getLockInfo()
     {
         LockInfo info = new LockInfo(METHOD_LOCK_INFO);
@@ -151,9 +150,16 @@
         }
     }
 
-    public boolean readLock(Object key, Object resourceId, int isolationLevel)
+    public boolean readLock(final Object owner, final Object resource, final int isolationLevel)
     {
-        LockInfo info = new LockInfo(key, resourceId, isolationLevel, METHOD_READ_LOCK);
+        return readLock(owner, resource, isolationLevel, 0, 0);
+    }
+
+    public boolean readLock(final Object owner, final Object resource, final int isolationLevel,
+                            final long lockTimeout, final long blockTimeout)
+    {
+        LockInfo info = new LockInfo(owner, resource, isolationLevel, METHOD_READ_LOCK,
+                lockTimeout, blockTimeout);
         try
         {
             byte[] requestBarr = serialize(info);
@@ -161,14 +167,14 @@
         }
         catch(Throwable t)
         {
-            throw new LockRuntimeException("Cannot check read lock for '"
-                    + resourceId + "' using key '" + key + "'", t);
+            throw new LockRuntimeException("Cannot get read lock for resource '"
+                    + resource + "' using owner '" + owner + "'", t);
         }
     }
 
-    public boolean releaseLock(Object key, Object resourceId)
+    public boolean releaseLock(final Object owner, final Object resource)
     {
-        LockInfo info = new LockInfo(key, resourceId, METHOD_RELEASE_SINGLE_LOCK);
+        LockInfo info = new LockInfo(owner, resource, METHOD_RELEASE_SINGLE_LOCK);
         try
         {
             byte[] requestBarr = serialize(info);
@@ -176,14 +182,14 @@
         }
         catch(Throwable t)
         {
-            throw new LockRuntimeException("Cannot remove write lock for '"
-                    + resourceId + "' using key '" + key + "'", t);
+            throw new LockRuntimeException("Cannot remove write lock for resource '"
+                    + resource + "' using owner '" + owner + "'", t);
         }
     }
 
-    public void releaseLocks(Object key)
+    public void releaseLocks(final Object owner)
     {
-        LockInfo info = new LockInfo(key, null, METHOD_RELEASE_LOCKS);
+        LockInfo info = new LockInfo(owner, null, METHOD_RELEASE_LOCKS);
         try
         {
             byte[] requestBarr = serialize(info);
@@ -191,13 +197,20 @@
         }
         catch(Throwable t)
         {
-            throw new LockRuntimeException("Cannot release locks using owner key '" + key + "'", t);
+            throw new LockRuntimeException("Cannot release locks using owner '" + owner + "'", t);
         }
     }
 
-    public boolean writeLock(Object key, Object resourceId, int isolationLevel)
+    public boolean writeLock(final Object owner, final Object resource, final int isolationLevel)
     {
-        LockInfo info = new LockInfo(key, resourceId, isolationLevel, METHOD_WRITE_LOCK);
+        return writeLock(owner, resource, isolationLevel, 0, 0);
+    }
+
+    public boolean writeLock(final Object owner, final Object resource, final int isolationLevel,
+                             final long lockTimeout, final long blockTimeout)
+    {
+        LockInfo info = new LockInfo(owner, resource, isolationLevel, METHOD_WRITE_LOCK,
+                lockTimeout, blockTimeout);
         try
         {
             byte[] requestBarr = serialize(info);
@@ -205,14 +218,21 @@
         }
         catch(Throwable t)
         {
-            throw new LockRuntimeException("Cannot set write lock for '"
-                    + resourceId + "' using key '" + key + "'", t);
+            throw new LockRuntimeException("Cannot set write lock for resource '"
+                    + resource + "' using owner '" + owner + "'", t);
         }
     }
 
-    public boolean upgradeLock(Object key, Object resourceId, int isolationLevel)
+    public boolean upgradeLock(final Object owner, final Object resource, final int isolationLevel)
+    {
+        return upgradeLock(owner, resource, isolationLevel, 0, 0);
+    }
+
+    public boolean upgradeLock(final Object owner, final Object resource, final int isolationLevel,
+                               final long lockTimeout, final long blockTimeout)
     {
-        LockInfo info = new LockInfo(key, resourceId, isolationLevel, METHOD_UPGRADE_LOCK);
+        LockInfo info = new LockInfo(owner, resource, isolationLevel, METHOD_UPGRADE_LOCK,
+                lockTimeout, blockTimeout);
         try
         {
             byte[] requestBarr = serialize(info);
@@ -220,50 +240,50 @@
         }
         catch(Throwable t)
         {
-            throw new LockRuntimeException("Cannot set write lock for '"
-                    + resourceId + "' using key '" + key + "'", t);
+            throw new LockRuntimeException("Cannot upgrade lock on resource '"
+                    + resource + "' using owner '" + owner + "'", t);
         }
     }
 
-    public boolean hasRead(Object key, Object resourceId)
+    public boolean hasRead(Object owner, Object resource)
     {
         try
         {
-            byte[] requestBarr = serialize(new LockInfo(key, resourceId, METHOD_CHECK_READ));
+            byte[] requestBarr = serialize(new LockInfo(owner, resource, METHOD_CHECK_READ));
             return performRequest(requestBarr);
         }
         catch(Throwable t)
         {
-            throw new LockRuntimeException("Cannot check read lock for '"
-                    + resourceId + "' using key '" + key + "'", t);
+            throw new LockRuntimeException("Cannot check read lock for resource '"
+                    + resource + "' using owner '" + owner + "'", t);
         }
     }
 
-    public boolean hasWrite(Object key, Object resourceId)
+    public boolean hasWrite(Object owner, Object resource)
     {
         try
         {
-            byte[] requestBarr = serialize(new LockInfo(key, resourceId, METHOD_CHECK_WRITE));
+            byte[] requestBarr = serialize(new LockInfo(owner, resource, METHOD_CHECK_WRITE));
             return performRequest(requestBarr);
         }
         catch(Throwable t)
         {
-            throw new LockRuntimeException("Cannot check write lock for '"
-                    + resourceId + "' using key '" + key + "'", t);
+            throw new LockRuntimeException("Cannot check write lock for resource '"
+                    + resource + "' using owner '" + owner + "'", t);
         }
     }
 
-    public boolean hasUpgrade(Object key, Object resourceId)
+    public boolean hasUpgrade(Object owner, Object resource)
     {
         try
         {
-            byte[] requestBarr = serialize(new LockInfo(key, resourceId, METHOD_CHECK_UPGRADE));
+            byte[] requestBarr = serialize(new LockInfo(owner, resource, METHOD_CHECK_UPGRADE));
             return performRequest(requestBarr);
         }
         catch(Throwable t)
         {
-            throw new LockRuntimeException("Cannot check write lock for '"
-                    + resourceId + "' using key '" + key + "'", t);
+            throw new LockRuntimeException("Cannot check write lock for resource '"
+                    + resource + "' using owner '" + owner + "'", t);
         }
     }
 
@@ -396,29 +416,34 @@
 
     public static final class LockInfo implements Serializable
     {
-        public String key;
+        public String owner;
         public String resourceId;
         public int isolationLevel;
         public byte methodName;
+        public long blockTimeout;
+        public long lockTimeout;
 
-        public LockInfo(byte methodName)
+        public LockInfo(final byte methodName)
         {
             this.methodName = methodName;
         }
 
-        public LockInfo(Object key, Object resourceId, byte methodName)
+        public LockInfo(final Object owner, final Object resourceId, final byte methodName)
         {
-            this.key = key != null ? key.toString() : null;
+            this.owner = owner != null ? owner.toString() : null;
             this.resourceId = resourceId != null ? resourceId.toString() : null;
             this.methodName = methodName;
         }
 
-        public LockInfo(Object key, Object resourceId, int isolationLevel, byte methodName)
+        public LockInfo(final Object owner, final Object resourceId, final int isolationLevel,
+                        final byte methodName, final long lockTimeout, final long blockTimeout)
         {
-            this.key = key != null ? key.toString() : null;
+            this.owner = owner != null ? owner.toString() : null;
             this.resourceId = resourceId != null ? resourceId.toString() : null;
             this.isolationLevel = isolationLevel;
             this.methodName = methodName;
+            this.lockTimeout = lockTimeout;
+            this.blockTimeout = blockTimeout;
         }
     }
 }

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerServlet.java
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerServlet.java?view=diff&rev=518416&r1=518415&r2=518416
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerServlet.java (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/locking/LockManagerServlet.java Wed Mar 14 18:13:07 2007
@@ -43,12 +43,12 @@
  */
 public class LockManagerServlet extends HttpServlet
 {
-    protected static LockManager lockmanager;
     static final String STR_LOCK_TIMEOUT = "lockTimeout";
     static final String STR_BLOCK_TIMEOUT = "blockTimeout";
     static final String STR_LOCK_MANAGER = "lockManager";
     private static final String prefix = "[ojb-lockserver] ";
 
+    protected static LockManager lockmanager;
     private static long numRequests;
     private static Throwable lastError = null;
 
@@ -82,7 +82,7 @@
                 {
                     Long lockTimeout = NumberUtils.createLong(strTimeout);
                     lockmanager.setLockTimeout(lockTimeout.longValue());
-                    System.out.println(prefix + "Set lock-timeout=" + lockTimeout);
+                    //System.out.println(prefix + "Set lock-timeout=" + lockTimeout);
                 }
                 catch(Exception e)
                 {
@@ -101,7 +101,7 @@
                 {
                     Long blockTimeout = NumberUtils.createLong(strBlock);
                     lockmanager.setBlockTimeout(blockTimeout.longValue());
-                    System.out.println(prefix + "Set block-timeout=" + blockTimeout);
+                    //System.out.println(prefix + "Set block-timeout=" + blockTimeout);
                 }
                 catch(Exception e)
                 {
@@ -190,44 +190,49 @@
                 {
                     case LockManagerRemoteImpl.METHOD_READ_LOCK:
                     {
-                        result = BooleanUtils.toBooleanObject(lockmanager.readLock(info.key, info.resourceId, info.isolationLevel));
+                        result = BooleanUtils.toBooleanObject(lockmanager.readLock(info.owner, info.resourceId, info.isolationLevel,
+                                info.lockTimeout > 0 ? info.lockTimeout : lockmanager.getLockTimeout(),
+                                info.blockTimeout > 0 ? info.blockTimeout : lockmanager.getBlockTimeout()));
                         break;
                     }
                     case LockManagerRemoteImpl.METHOD_RELEASE_SINGLE_LOCK:
                     {
-                        result = BooleanUtils.toBooleanObject(lockmanager.releaseLock(info.key, info.resourceId));
+                        result = BooleanUtils.toBooleanObject(lockmanager.releaseLock(info.owner, info.resourceId));
                         break;
                     }
                     case LockManagerRemoteImpl.METHOD_RELEASE_LOCKS:
                     {
-                        lockmanager.releaseLocks(info.key);
+                        lockmanager.releaseLocks(info.owner);
                         result = Boolean.TRUE;
                         break;
                     }
                     case LockManagerRemoteImpl.METHOD_WRITE_LOCK:
                     {
-                        result = BooleanUtils.toBooleanObject(lockmanager.writeLock(info.key, info.resourceId,
-                                info.isolationLevel));
+                        result = BooleanUtils.toBooleanObject(lockmanager.writeLock(info.owner, info.resourceId, info.isolationLevel,
+                                info.lockTimeout > 0 ? info.lockTimeout : lockmanager.getLockTimeout(),
+                                info.blockTimeout > 0 ? info.blockTimeout : lockmanager.getBlockTimeout()));
                         break;
                     }
                     case LockManagerRemoteImpl.METHOD_UPGRADE_LOCK:
                     {
-                        result = BooleanUtils.toBooleanObject(lockmanager.upgradeLock(info.key, info.resourceId, info.isolationLevel));
+                        result = BooleanUtils.toBooleanObject(lockmanager.upgradeLock(info.owner, info.resourceId, info.isolationLevel,
+                                info.lockTimeout > 0 ? info.lockTimeout : lockmanager.getLockTimeout(),
+                                info.blockTimeout > 0 ? info.blockTimeout : lockmanager.getBlockTimeout()));
                         break;
                     }
                     case LockManagerRemoteImpl.METHOD_CHECK_READ:
                     {
-                        result = BooleanUtils.toBooleanObject(lockmanager.hasRead(info.key, info.resourceId));
+                        result = BooleanUtils.toBooleanObject(lockmanager.hasRead(info.owner, info.resourceId));
                         break;
                     }
                     case LockManagerRemoteImpl.METHOD_CHECK_WRITE:
                     {
-                        result = BooleanUtils.toBooleanObject(lockmanager.hasWrite(info.key, info.resourceId));
+                        result = BooleanUtils.toBooleanObject(lockmanager.hasWrite(info.owner, info.resourceId));
                         break;
                     }
                     case LockManagerRemoteImpl.METHOD_CHECK_UPGRADE:
                     {
-                        result = BooleanUtils.toBooleanObject(lockmanager.hasUpgrade(info.key, info.resourceId));
+                        result = BooleanUtils.toBooleanObject(lockmanager.hasUpgrade(info.owner, info.resourceId));
                         break;
                     }
                     case LockManagerRemoteImpl.METHOD_LOCK_INFO:

Modified: db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/web.xml
URL: http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/web.xml?view=diff&rev=518416&r1=518415&r2=518416
==============================================================================
--- db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/web.xml (original)
+++ db/ojb/branches/OJB_1_0_RELEASE/src/test/org/apache/ojb/web.xml Wed Mar 14 18:13:07 2007
@@ -31,13 +31,15 @@
         <init-param>
             <param-name>lockManager</param-name>
             <param-value>org.apache.ojb.broker.locking.LockManagerInMemoryImpl</param-value>
+            <!--<param-value>org.apache.ojb.broker.locking.LockManagerCommonsImpl</param-value>-->
         </init-param>
         <init-param>
             <param-name>lockTimeout</param-name>
-            <!-- set lock timeout to 10 minutes (setting in [ms]) -->
-            <param-value>600000</param-value>
+            <!-- set lock timeout to 2 minutes (setting in [ms]) -->
+            <param-value>120000</param-value>
         </init-param>
         <init-param>
+            <!-- set block timeout to 1 sec (setting in [ms], if supported by the Impl.) -->
             <param-name>blockTimeout</param-name>
             <param-value>1000</param-value>
         </init-param>



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org