[exo-jcr-commits] exo-jcr SVN: r1459 - in jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock: jbosscache and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Jan 18 06:13:44 EST 2010


Author: sergiykarpenko
Date: 2010-01-18 06:13:44 -0500 (Mon, 18 Jan 2010)
New Revision: 1459

Modified:
   jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/AbstractLockManager.java
   jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/SessionLockManager.java
   jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/SessionLockManagerImpl.java
   jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManager.java
   jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableSessionLockManager.java
Log:
EXOJCR-332: code cleanup

Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/AbstractLockManager.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/AbstractLockManager.java	2010-01-18 10:23:10 UTC (rev 1458)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/AbstractLockManager.java	2010-01-18 11:13:44 UTC (rev 1459)
@@ -26,5 +26,13 @@
  */
 public abstract class AbstractLockManager implements LockManager
 {
-   //TODO remove this class
+   /**
+    * {@inheritDoc}
+    */
+   public abstract void removeExpired();
+
+   /**
+    * {@inheritDoc}
+    */
+   public abstract SessionLockManager getSessionLockManager(String sessionId);
 }

Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/SessionLockManager.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/SessionLockManager.java	2010-01-18 10:23:10 UTC (rev 1458)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/SessionLockManager.java	2010-01-18 11:13:44 UTC (rev 1459)
@@ -43,6 +43,17 @@
     */
    void addLockToken(String lt);
 
+   /**
+    * Add lock for node.
+    * 
+    * @param node - NodeImpl
+    * @param isDeep - lock is deep
+    * @param isSessionScoped - lock is session scoped
+    * @param timeOut - lock live time
+    * @return Lock
+    * @throws LockException
+    * @throws RepositoryException
+    */
    Lock addLock(NodeImpl node, boolean isDeep, boolean isSessionScoped, long timeOut) throws LockException,
       RepositoryException;
 

Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/SessionLockManagerImpl.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/SessionLockManagerImpl.java	2010-01-18 10:23:10 UTC (rev 1458)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/SessionLockManagerImpl.java	2010-01-18 11:13:44 UTC (rev 1459)
@@ -39,53 +39,83 @@
 
    private final LockManagerImpl lockManager;
 
+   /**
+    * Constructor
+    */
    public SessionLockManagerImpl(String sessionId, LockManagerImpl lockManager)
    {
       this.sessionId = sessionId;
       this.lockManager = lockManager;
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public Lock addLock(NodeImpl node, boolean isDeep, boolean isSessionScoped, long timeOut) throws LockException,
       RepositoryException
    {
       return lockManager.addPendingLock(node, isDeep, isSessionScoped, timeOut);
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public void addLockToken(String lt)
    {
       lockManager.addLockToken(sessionId, lt);
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public LockImpl getLock(NodeImpl node) throws LockException, RepositoryException
    {
       return lockManager.getLock(node);
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public String[] getLockTokens()
    {
       return lockManager.getLockTokens(sessionId);
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public boolean holdsLock(NodeData node) throws RepositoryException
    {
       return lockManager.holdsLock(node);
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public boolean isLockHolder(NodeImpl node) throws RepositoryException
    {
       return lockManager.isLockHolder(node);
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public boolean isLocked(NodeData node)
    {
       return lockManager.isLocked(node);
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public void removeLockToken(String lt)
    {
       lockManager.removeLockToken(sessionId, lt);
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public void onCloseSession(ExtendedSession session)
    {
       lockManager.onCloseSession(session);

Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManager.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManager.java	2010-01-18 10:23:10 UTC (rev 1458)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManager.java	2010-01-18 11:13:44 UTC (rev 1459)
@@ -152,6 +152,8 @@
 
    private Node<Serializable, Object> lockRoot;
 
+   private Map<String, CacheableSessionLockManager> sessionLockManagers;
+
    /**
     * Constructor for workspace without LockPersister
     * 
@@ -188,6 +190,7 @@
          lockTimeOut = DEFAULT_LOCK_TIMEOUT;
 
       pendingLocks = new HashMap<String, LockData>();
+      sessionLockManagers = new HashMap<String, CacheableSessionLockManager>();
 
       dataManager.addItemPersistenceListener(this);
 
@@ -259,14 +262,21 @@
    }
 
    /**
-    * 
+    * Return new instance of session lock manager.
     */
    public SessionLockManager getSessionLockManager(String sessionId)
    {
       CacheableSessionLockManager sessionManager = new CacheableSessionLockManager(sessionId, this);
+      sessionLockManagers.put(sessionId, sessionManager);
       return sessionManager;
    }
 
+   /**
+    * Check is LockManager contains lock. No matter it is in pending or persistent state.
+    * 
+    * @param nodeId - locked node id
+    * @return 
+    */
    public boolean isLockLive(String nodeId)
    {
       if (pendingLocks.containsKey(nodeId) || lockRoot.hasChild(Fqn.fromString(nodeId)))
@@ -460,6 +470,7 @@
       lockRemover.halt();
       lockRemover.interrupt();
       pendingLocks.clear();
+      sessionLockManagers.clear();
       cache.stop();
    }
 
@@ -533,7 +544,12 @@
       if (lData != null)
       {
          lockRoot.removeChild(Fqn.fromString(nodeIdentifier));
-         // TODO pair nodeId and lockData is not removed from CacheableSessionLockManager 
+
+         CacheableSessionLockManager sessMgr = sessionLockManagers.get(sessionId);
+         if (sessMgr != null)
+         {
+            sessMgr.notifyLockRemoved(nodeIdentifier);
+         }
       }
    }
 
@@ -689,4 +705,14 @@
          log.error("Error occur during removing lock" + e.getLocalizedMessage(), e);
       }
    }
+
+   /**
+    * Release all resources associated with CacheableSessionLockManager.
+    * 
+    * @param sessionID - session identifier
+    */
+   protected void closeSession(String sessionID)
+   {
+      sessionLockManagers.remove(sessionID);
+   }
 }

Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableSessionLockManager.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableSessionLockManager.java	2010-01-18 10:23:10 UTC (rev 1458)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableSessionLockManager.java	2010-01-18 11:13:44 UTC (rev 1459)
@@ -51,17 +51,34 @@
     */
    private final Log log = ExoLogger.getLogger("jcr.lock.SessionLockManager");
 
+   /**
+    * Session identifier.
+    */
    private final String sessionID;
 
    /**
+    * Lock tokens held by this session.
     * [token name, tokens hash]
     */
    private final Map<String, String> tokens;
 
+   /**
+    * Map of nodes locked in this session. Need to remove session scoped lock on session close.
+    * [node identifier, lock data]
+    */
    private final Map<String, LockData> lockedNodes;
 
+   /**
+    * Workspace lock manager
+    */
    private final CacheableLockManager lockManager;
 
+   /**
+    * Constructor.
+    * 
+    * @param sessionID - session identifier
+    * @param lockManager - workspace lock manager
+    */
    public CacheableSessionLockManager(String sessionID, CacheableLockManager lockManager)
    {
       this.sessionID = sessionID;
@@ -70,6 +87,9 @@
       this.lockManager = lockManager;
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public Lock addLock(NodeImpl node, boolean isDeep, boolean isSessionScoped, long timeOut) throws LockException,
       RepositoryException
    {
@@ -112,11 +132,17 @@
 
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public void addLockToken(String lt)
    {
       tokens.put(lt, lockManager.getHash(lt));
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public LockImpl getLock(NodeImpl node) throws LockException, RepositoryException
    {
       LockData lData =
@@ -130,6 +156,9 @@
       return new CacheLockImpl(node.getSession(), lData, this);
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public String[] getLockTokens()
    {
       String[] arr = new String[tokens.size()];
@@ -137,11 +166,17 @@
       return arr;
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public boolean holdsLock(NodeData node) throws RepositoryException
    {
       return lockManager.getLockData(node, CacheableLockManager.SEARCH_EXECMATCH) != null;
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public boolean isLocked(NodeData node)
    {
       LockData lData =
@@ -155,6 +190,9 @@
       return true;
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public boolean isLockHolder(NodeImpl node) throws RepositoryException
    {
       LockData lData =
@@ -164,6 +202,9 @@
       return lData != null && isLockHolder(lData);
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public void onCloseSession(ExtendedSession session)
    {
       SessionImpl sessionImpl = (SessionImpl)session;
@@ -183,8 +224,6 @@
                   ((NodeImpl)sessionImpl.getTransientNodesManager()
                      .getItemByIdentifier(lock.getNodeIdentifier(), false));
 
-               // Node may be null, since cacheablelockManger.internalUnlock does not modify
-               // SessionLockManager.lockedNodes map. So Node and Lock is removed, but exist in lockedNodes list.
                if (node != null)
                {
                   node.unlock();
@@ -226,8 +265,12 @@
             }
          }
       }
+      lockManager.closeSession(sessionID);
    }
 
+   /**
+    * {@inheritDoc}
+    */
    public void removeLockToken(String lt)
    {
       tokens.remove(lt);
@@ -262,14 +305,36 @@
       return null;
    }
 
+   /**
+    * Check is lock alive. That means lock must exist in LockManager storage (cache or map, etc). 
+    * 
+    * @param nodeIdentifier - locked node id
+    * @return
+    */
    protected boolean isLockLive(String nodeIdentifier)
    {
       return lockManager.isLockLive(nodeIdentifier);
    }
 
+   /**
+    * Refresh lockData. 
+    * 
+    * @param newLockData
+    * @throws LockException
+    */
    protected void refresh(LockData newLockData) throws LockException
    {
       lockManager.refresh(newLockData);
    }
 
+   /**
+    * Notify SessionLockManager that node is unlocked.
+    * 
+    * @param nodeIdentifier - unlocked node identifier
+    */
+   protected void notifyLockRemoved(String nodeIdentifier)
+   {
+      lockedNodes.remove(nodeIdentifier);
+   }
+
 }



More information about the exo-jcr-commits mailing list