[exo-jcr-commits] exo-jcr SVN: r1388 - jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/cache.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Jan 14 08:22:19 EST 2010


Author: areshetnyak
Date: 2010-01-14 08:22:18 -0500 (Thu, 14 Jan 2010)
New Revision: 1388

Modified:
   jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/cache/CacheLockImpl.java
   jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/cache/CacheableLockManager.java
Log:
EXOJCR-332 : Add implementation isAlive and refreash in CacheLockImpl

Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/cache/CacheLockImpl.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/cache/CacheLockImpl.java	2010-01-14 12:55:11 UTC (rev 1387)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/cache/CacheLockImpl.java	2010-01-14 13:22:18 UTC (rev 1388)
@@ -16,13 +16,19 @@
  */
 package org.exoplatform.services.jcr.impl.core.lock.cache;
 
-import org.exoplatform.services.jcr.impl.core.SessionImpl;
-import org.exoplatform.services.jcr.impl.core.lock.LockImpl;
+import java.util.ArrayList;
 
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.lock.LockException;
 
+import org.exoplatform.services.jcr.dataflow.ItemState;
+import org.exoplatform.services.jcr.dataflow.PlainChangesLogImpl;
+import org.exoplatform.services.jcr.dataflow.TransactionChangesLog;
+import org.exoplatform.services.jcr.impl.core.SessionImpl;
+import org.exoplatform.services.jcr.impl.core.lock.LockImpl;
+import org.exoplatform.services.jcr.observation.ExtendedEvent;
+
 /**
  * Created by The eXo Platform SAS.
  * 
@@ -33,15 +39,19 @@
  */
 public class CacheLockImpl extends LockImpl
 {
+   private boolean live;
+   
    private LockData lockData;
 
    private SessionImpl session;
+   
+   private CacheableLockManager lockManager;
 
-   public CacheLockImpl(SessionImpl session, LockData lockData)
+   public CacheLockImpl(SessionImpl session, LockData lockData, CacheableLockManager lockManager)
    {
-
       this.lockData = lockData;
       this.session = session;
+      this.lockManager = lockManager;
    }
 
    public String getLockOwner()
@@ -58,18 +68,38 @@
 
    public boolean isLive()
    {
-      //TODO
-      //return lockData.isLive();
-
-      return false;
+      // it is already not alive
+      if (!live)
+      {
+         return false;
+      }
+      // update from cache. If it is not present there - means it is not live
+      // node unlocked and/or re-locked with another session 
+      LockData newlockData = lockManager.getLockDataById(lockData.getNodeIdentifier());
+      if (newlockData == null || newlockData.getToken() != lockData.getToken())
+      {
+         live = false;
+         return false;
+      }
+      else
+      {
+         // update, whether time to death changed, or whatever
+         this.lockData = newlockData;
+         return true;
+      }
    }
 
    public void refresh() throws LockException, RepositoryException
    {
-      //TODO
-      //      if (!isLive())
-      //         throw new LockException("Lock is not live");
-      //      lockData.refresh();
+      if (!isLive())
+         throw new LockException("Lock is not live");
+
+      LockData newLockData = new LockData(lockData.getNodeIdentifier(), lockData.getToken(), lockData.isDeep(), lockData
+            .isSessionScoped(), lockData.getOwner(), lockData.getTimeOut());
+      
+      lockManager.refresh(newLockData);
+      
+      this.lockData = newLockData;
    }
 
    public Node getNode()

Modified: jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/cache/CacheableLockManager.java
===================================================================
--- jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/cache/CacheableLockManager.java	2010-01-14 12:55:11 UTC (rev 1387)
+++ jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/cache/CacheableLockManager.java	2010-01-14 13:22:18 UTC (rev 1388)
@@ -115,8 +115,6 @@
 
    public static final String TOKENS = "$TOKENS";
 
-   public static final String LOCKS = "$LOCKS";
-
    /**
     * Logger
     */
@@ -290,7 +288,7 @@
       pendingLockTokens.put(lockToken, node.getInternalIdentifier());
       //tokensMap.put(lockToken, lData);
 
-      LockImpl lock = new CacheLockImpl(node.getSession(), lData);
+      LockImpl lock = new CacheLockImpl(node.getSession(), lData, this);
       return lock;
    }
 
@@ -309,7 +307,7 @@
       {
          throw new LockException("Node not locked: " + node.getData().getQPath());
       }
-      return new CacheLockImpl(node.getSession(), lData);
+      return new CacheLockImpl(node.getSession(), lData, this);
    }
 
    /*
@@ -664,7 +662,6 @@
    public void start()
    {
       cache.start();
-      lockRoot = cache.getRoot().addChild(Fqn.fromString(LOCKS));
       tokenRoot = cache.getRoot().addChild(Fqn.fromString(TOKENS));
 
       lockRemover = new LockRemover(this);
@@ -672,7 +669,7 @@
 
    // Quick method. We need to reconstruct
    // TODO was synchronized
-   protected List<LockData> getLockList()
+   private List<LockData> getLockList()
    {
 
       Set<Node<Serializable, Object>> lockSet = cache.getRoot().getChildren();
@@ -832,7 +829,7 @@
       return retval;
    }
 
-   private LockData getLockDataById(String nodeId)
+   protected LockData getLockDataById(String nodeId)
    {
       LockData lockData = null;
       Node<Serializable, Object> node = lockRoot.getChild(Fqn.fromString(nodeId));
@@ -1008,4 +1005,14 @@
    {
       return true;
    }
+
+   /**
+    * Refreshed lock data in cache
+    * 
+    * @param newLockData
+    */
+   public void refresh(LockData newLockData)
+   {
+      lockRoot.addChild(Fqn.fromString(newLockData.getNodeIdentifier()));  
+   }
 }



More information about the exo-jcr-commits mailing list