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 ol...@apache.org on 2003/05/18 11:49:11 UTC

cvs commit: db-ojb/src/java/org/apache/ojb/otm/lock LockManager.java ObjectLock.java

olegnitz    2003/05/18 02:49:11

  Modified:    src/java/org/apache/ojb/otm/core ConcreteEditingContext.java
                        RequestContext.java
               src/java/org/apache/ojb/otm/kit SimpleKit.java
               src/java/org/apache/ojb/otm/lock LockManager.java
                        ObjectLock.java
  Log:
  Made locking stuff work
  
  Revision  Changes    Path
  1.6       +16 -10    db-ojb/src/java/org/apache/ojb/otm/core/ConcreteEditingContext.java
  
  Index: ConcreteEditingContext.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/otm/core/ConcreteEditingContext.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ConcreteEditingContext.java	15 May 2003 21:42:20 -0000	1.5
  +++ ConcreteEditingContext.java	18 May 2003 09:49:10 -0000	1.6
  @@ -120,8 +120,7 @@
           if (entry == null)
           {
               LockManager lockManager = LockManager.getInstance();
  -            lockManager.ensureLock(kit, oid, _transaction, lock);
  -            int lockHeld = lockManager.getLockHeld(kit, oid, _transaction);
  +            lockManager.ensureLock(oid, _transaction, lock);
               Swizzling swizzlingStrategy = kit.getSwizzlingStrategy();
               Object swizzledObject = swizzlingStrategy.swizzle(insertedObject, null);
               entry = new ContextEntry(swizzledObject);
  @@ -138,14 +137,12 @@
               {
                       // The object in context is the same object attempted an insert on
                       // Ensure we have the correct lock level
  -                lockManager.ensureLock(kit, oid, _transaction, lock);
  +                lockManager.ensureLock(oid, _transaction, lock);
               }
               else
               {
                       // It is a similar but different object
  -                int lockHeld = lockManager.getLockHeld(kit, oid, _transaction);
  -
  -                lockManager.ensureLock(kit, oid, _transaction, lock);
  +                lockManager.ensureLock(oid, _transaction, lock);
   
                   Object swizzledObject = swizzlingStrategy.swizzle(insertedObject, contextObject);
                   entry.object = swizzledObject;
  @@ -245,13 +242,10 @@
                   entry.state = state.commit();
               }
               connMan.executeBatch();
  +            releaseLocks();
               _objects.clear();
               _order.clear();
           }
  -        catch (Throwable t)
  -        {
  -            connMan.clearBatch();
  -        }
           finally
           {
               connMan.setBatchMode(saveBatchMode);
  @@ -271,8 +265,20 @@
               ContextEntry entry = (ContextEntry) _objects.get(iterator.next());
               entry.state = entry.state.rollback();
           }
  +        releaseLocks();
           _objects.clear();
           _order.clear();
  +    }
  +
  +    private void releaseLocks()
  +    {
  +        LockManager lockManager = LockManager.getInstance();
  +
  +        for (Iterator it = _objects.keySet().iterator(); it.hasNext(); )
  +        {
  +            Identity oid = (Identity) it.next();
  +            lockManager.releaseLock(oid, _transaction);
  +        }
       }
   
   
  
  
  
  1.7       +1 -2      db-ojb/src/java/org/apache/ojb/otm/core/RequestContext.java
  
  Index: RequestContext.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/otm/core/RequestContext.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- RequestContext.java	14 May 2003 22:15:37 -0000	1.6
  +++ RequestContext.java	18 May 2003 09:49:10 -0000	1.7
  @@ -55,7 +55,6 @@
    */
   
   import org.apache.ojb.broker.Identity;
  -import org.apache.ojb.broker.PersistenceBrokerException;
   import org.apache.ojb.broker.cache.ObjectCache;
   import org.apache.ojb.otm.OTMKit;
   import org.apache.ojb.otm.lock.LockType;
  @@ -173,7 +172,7 @@
           }
           catch (LockingException ex)
           {
  -            throw new PersistenceBrokerException(ex);
  +            throw new LockingPassthruException(ex);
           }
       }
   
  
  
  
  1.5       +4 -1      db-ojb/src/java/org/apache/ojb/otm/kit/SimpleKit.java
  
  Index: SimpleKit.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/otm/kit/SimpleKit.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SimpleKit.java	19 Mar 2003 06:48:59 -0000	1.4
  +++ SimpleKit.java	18 May 2003 09:49:10 -0000	1.5
  @@ -64,6 +64,7 @@
   import org.apache.ojb.otm.lock.map.InMemoryLockMap;
   import org.apache.ojb.otm.lock.map.LockMap;
   import org.apache.ojb.otm.lock.wait.LockWaitStrategy;
  +import org.apache.ojb.otm.lock.wait.NoWaitStrategy;
   import org.apache.ojb.otm.swizzle.NoSwizzling;
   import org.apache.ojb.otm.swizzle.Swizzling;
   import org.apache.ojb.otm.transaction.LocalTransactionFactory;
  @@ -83,6 +84,7 @@
   
       private TransactionFactory _txFactory;
       private Swizzling _swizzlingStrategy;
  +    private LockWaitStrategy _lockWaitStrategy;
       private LockMap _lockMap;
       private ObjectCopyStrategy _copyStrategy;
       private ObjectStore _cacheStore;
  @@ -96,6 +98,7 @@
           super();
           _txFactory = new LocalTransactionFactory();
           _swizzlingStrategy = new NoSwizzling();
  +        _lockWaitStrategy = new NoWaitStrategy();
           _lockMap = new InMemoryLockMap();
           _copyStrategy = new SerializeObjectCopyStrategy();
           _cacheStore = new HashMapObjectStore();
  @@ -137,7 +140,7 @@
       */
       public LockWaitStrategy getLockWaitStrategy ()
       {
  -        return null;
  +        return _lockWaitStrategy;
       }
   
       /**
  
  
  
  1.3       +16 -22    db-ojb/src/java/org/apache/ojb/otm/lock/LockManager.java
  
  Index: LockManager.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/otm/lock/LockManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LockManager.java	16 Mar 2003 18:13:06 -0000	1.2
  +++ LockManager.java	18 May 2003 09:49:10 -0000	1.3
  @@ -62,49 +62,43 @@
   /**
    *
    * Manages locks on objects across transactions.
  - * 
  + *
    * @author <a href="mailto:rraghuram@hotmail.com">Raghu Rajah</a>
  - * 
  + *
    */
   public class LockManager
   {
       private static LockManager _Instance = new LockManager();
  -    
  +
       public static LockManager getInstance ()
       {
           return _Instance;
       }
  -    
  -    private LockManager ()
  +
  +    private LockManager()
       {
  -        
  +
       }
   
  -    public void ensureLock (OTMKit kit, Identity oid, Transaction tx, int lock)
  +    public void ensureLock(Identity oid, Transaction tx, int lock)
           throws LockingException
       {
  -        LockMap lockMap = kit.getLockMap();
  +        LockMap lockMap = tx.getKit().getLockMap();
   
           ObjectLock objectLock = lockMap.getLock(oid);
           if (lock == LockType.READ_LOCK)
           {
  -            if (!objectLock.isReader(tx))
  -            {
  -                readLock(objectLock, tx);
  -            }
  +            objectLock.readLock(tx);
           }
           else if (lock == LockType.WRITE_LOCK)
           {
  -            if (!tx.equals(objectLock.getWriter()))
  -            {
  -                writeLock(objectLock, tx);
  -            }
  +            objectLock.writeLock(tx);
           }
       }
   
  -    public int getLockHeld (OTMKit kit, Identity oid, Transaction tx)
  +    public int getLockHeld(Identity oid, Transaction tx)
       {
  -        LockMap lockMap = kit.getLockMap();
  +        LockMap lockMap = tx.getKit().getLockMap();
           ObjectLock lock = lockMap.getLock(oid);
   
           int lockHeld = LockType.NO_LOCK;
  @@ -120,11 +114,11 @@
           return lockHeld;
       }
   
  -    private void readLock (ObjectLock lock, Transaction tx)
  +    public void releaseLock(Identity oid, Transaction tx)
       {
  -    }
  +        LockMap lockMap = tx.getKit().getLockMap();
   
  -    private void writeLock (ObjectLock lock, Transaction tx)
  -    {
  +        ObjectLock objectLock = lockMap.getLock(oid);
  +        objectLock.releaseLock(tx);
       }
   }
  
  
  
  1.4       +4 -1      db-ojb/src/java/org/apache/ojb/otm/lock/ObjectLock.java
  
  Index: ObjectLock.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/otm/lock/ObjectLock.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ObjectLock.java	16 Mar 2003 18:13:06 -0000	1.3
  +++ ObjectLock.java	18 May 2003 09:49:10 -0000	1.4
  @@ -260,10 +260,13 @@
   
               _readers.remove(_tx);
   
  -            for (Iterator iterator = _listeners.iterator(); iterator.hasNext();)
  +            if (_listeners != null)
               {
  +                for (Iterator iterator = _listeners.iterator(); iterator.hasNext();)
  +                {
                     LockListener listener = (LockListener) iterator.next();
                     listener.lockReleased(_tx, _oid);
  +                }
               }
           }
       }