[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