[exo-jcr-commits] exo-jcr SVN: r1395 - 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 11:26:03 EST 2010
Author: sergiykarpenko
Date: 2010-01-14 11:26:03 -0500 (Thu, 14 Jan 2010)
New Revision: 1395
Modified:
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: CacheableLockManager fixes
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 15:04:51 UTC (rev 1394)
+++ 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 16:26:03 UTC (rev 1395)
@@ -392,119 +392,64 @@
// List<String> deadLocksList = new ArrayList<String>();
SessionImpl sessionImpl = (SessionImpl)session;
- Set<String> lockTokens = lockTokenHolders.get(session.getId());
-
- for (String token : lockTokens)
+ if (lockTokenHolders.containsKey(session.getId()))
{
+ Set<String> lockTokens = lockTokenHolders.get(session.getId());
- String nodeId = null;
- if (pendingLockTokens.containsKey(token))
+ for (String token : lockTokens)
{
- // unlock node
- nodeId = pendingLockTokens.get(token);
- }
-
- if (tokenRoot.hasChild(Fqn.fromString(token)))
- {
- nodeId = (String)tokenRoot.getData().get(LOCKED_NODE_ID);
- }
-
- if (nodeId != null)
- {
- // unlock node
- try
+ String nodeId = null;
+ // if (pendingLockTokens.containsKey(token))
+ // {
+ // nodeId = pendingLockTokens.get(token);
+ // }
+ if (tokenRoot.hasChild(Fqn.fromString(token)))
{
- // TODO it's possible to have next error
- // java.lang.NullPointerException
- // at
- // org.exoplatform.services.jcr.impl.core.lock.LockManagerImpl.onCloseSession(LockManagerImpl.java:312)
- // at org.exoplatform.services.jcr.impl.core.SessionImpl.logout(SessionImpl.java:794)
- // at
- // org.exoplatform.services.jcr.impl.core.XASessionImpl.logout(XASessionImpl.java:254)
- // at
- // org.exoplatform.services.jcr.impl.core.SessionRegistry$SessionCleaner.callPeriodically(SessionRegistry.java:165)
- // at
- // org.exoplatform.services.jcr.impl.proccess.WorkerThread.run(WorkerThread.java:46)
- ((NodeImpl)sessionImpl.getTransientNodesManager().getItemByIdentifier(nodeId, false)).unlock();
+ nodeId = (String)tokenRoot.getData().get(LOCKED_NODE_ID);
}
- catch (UnsupportedRepositoryOperationException e)
+
+ if (nodeId != null)
{
- log.error(e.getLocalizedMessage());
+ LockData lockData = this.getLockDataById(nodeId);
+
+ if (lockData.isSessionScoped())
+ {
+ // unlock node
+ try
+ {
+ // TODO it's possible to have next error
+ // java.lang.NullPointerException
+ // at
+ // org.exoplatform.services.jcr.impl.core.lock.LockManagerImpl.onCloseSession(LockManagerImpl.java:312)
+ // at org.exoplatform.services.jcr.impl.core.SessionImpl.logout(SessionImpl.java:794)
+ // at
+ // org.exoplatform.services.jcr.impl.core.XASessionImpl.logout(XASessionImpl.java:254)
+ // at
+ // org.exoplatform.services.jcr.impl.core.SessionRegistry$SessionCleaner.callPeriodically(SessionRegistry.java:165)
+ // at
+ // org.exoplatform.services.jcr.impl.proccess.WorkerThread.run(WorkerThread.java:46)
+ ((NodeImpl)sessionImpl.getTransientNodesManager().getItemByIdentifier(nodeId, false)).unlock();
+ }
+ catch (UnsupportedRepositoryOperationException e)
+ {
+ log.error(e.getLocalizedMessage());
+ }
+ catch (LockException e)
+ {
+ log.error(e.getLocalizedMessage());
+ }
+ catch (AccessDeniedException e)
+ {
+ log.error(e.getLocalizedMessage());
+ }
+ catch (RepositoryException e)
+ {
+ log.error(e.getLocalizedMessage());
+ }
+ }
}
- catch (LockException e)
- {
- log.error(e.getLocalizedMessage());
- }
- catch (AccessDeniedException e)
- {
- log.error(e.getLocalizedMessage());
- }
- catch (RepositoryException e)
- {
- log.error(e.getLocalizedMessage());
- }
}
}
-
- // //for (Iterator<Map.Entry<String, LockData>> entries = locks.entrySet().iterator(); entries.hasNext();)
- // for (LockData lockData : getLockList())
- // {
- // //Map.Entry<String, LockData> entry = entries.next();
- // //LockData lockData = entry.getValue();
- // // TODO remove is Alive construction
- // //if (lockData.isLive())
- // //{
- // if (lockData.isLockHolder(session.getId()))
- // {
- // if (lockData.isSessionScoped())
- // {
- // // if no session currently holds lock except this
- // try
- // {
- // // TODO it's possible to have next error
- // // java.lang.NullPointerException
- // // at
- // // org.exoplatform.services.jcr.impl.core.lock.LockManagerImpl.onCloseSession(LockManagerImpl.java:312)
- // // at org.exoplatform.services.jcr.impl.core.SessionImpl.logout(SessionImpl.java:794)
- // // at
- // // org.exoplatform.services.jcr.impl.core.XASessionImpl.logout(XASessionImpl.java:254)
- // // at
- // // org.exoplatform.services.jcr.impl.core.SessionRegistry$SessionCleaner.callPeriodically(SessionRegistry.java:165)
- // // at
- // // org.exoplatform.services.jcr.impl.proccess.WorkerThread.run(WorkerThread.java:46)
- // ((NodeImpl)sessionImpl.getTransientNodesManager().getItemByIdentifier(
- // lockData.getNodeIdentifier(), false)).unlock();
- // }
- // catch (UnsupportedRepositoryOperationException e)
- // {
- // log.error(e.getLocalizedMessage());
- // }
- // catch (LockException e)
- // {
- // log.error(e.getLocalizedMessage());
- // }
- // catch (AccessDeniedException e)
- // {
- // log.error(e.getLocalizedMessage());
- // }
- // catch (RepositoryException e)
- // {
- // log.error(e.getLocalizedMessage());
- // }
- //
- // }
- // else
- // {
- // lockData.removeLockHolder(session.getId());
- // }
- // }
- // }
- // else
- // {
- // //TODO
- // //entries.remove();
- // }
- // }
}
/*
@@ -917,8 +862,16 @@
if (lData != null)
{
//tokensMap.remove(lData.getLockToken(sessionId));
+
tokenRoot.removeChild(Fqn.fromString(lData.getToken()));
lockRoot.removeChild(Fqn.fromString(nodeIdentifier));
+
+ // remove session holder
+ lockTokenHolders.get(sessionId).remove(lData.getToken());
+ if (lockTokenHolders.get(sessionId).size() == 0)
+ {
+ lockTokenHolders.remove(sessionId);
+ }
}
}
More information about the exo-jcr-commits
mailing list