[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