[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