Author: nzamosenchuk
Date: 2009-11-19 07:53:34 -0500 (Thu, 19 Nov 2009)
New Revision: 770
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/dataflow/LockPlainChangesLogImpl.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/VersionableWorkspaceDataManager.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/core/lock/TestSessionLockManager.java
Log:
EXOJCR-242: Updated low-level locking logic.
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/dataflow/LockPlainChangesLogImpl.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/dataflow/LockPlainChangesLogImpl.java 2009-11-19
12:19:05 UTC (rev 769)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/dataflow/LockPlainChangesLogImpl.java 2009-11-19
12:53:34 UTC (rev 770)
@@ -44,6 +44,12 @@
super(items, sessionId, eventType);
}
+ public LockPlainChangesLogImpl(List<ItemState> items, String sessionId, int
eventType, LockData lockData)
+ {
+ super(items, sessionId, eventType);
+ this.lockData = lockData;
+ }
+
public LockData getLockData()
{
return lockData;
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/VersionableWorkspaceDataManager.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/VersionableWorkspaceDataManager.java 2009-11-19
12:19:05 UTC (rev 769)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/VersionableWorkspaceDataManager.java 2009-11-19
12:53:34 UTC (rev 770)
@@ -22,6 +22,7 @@
import org.exoplatform.services.jcr.dataflow.CompositeChangesLog;
import org.exoplatform.services.jcr.dataflow.DataManager;
import org.exoplatform.services.jcr.dataflow.ItemState;
+import org.exoplatform.services.jcr.dataflow.LockPlainChangesLogImpl;
import org.exoplatform.services.jcr.dataflow.PairChangesLog;
import org.exoplatform.services.jcr.dataflow.PlainChangesLog;
import org.exoplatform.services.jcr.dataflow.PlainChangesLogImpl;
@@ -32,9 +33,8 @@
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.datamodel.QPathEntry;
import org.exoplatform.services.jcr.impl.Constants;
+import org.exoplatform.services.jcr.observation.ExtendedEvent;
import org.exoplatform.services.jcr.util.IdGenerator;
-import org.exoplatform.services.log.ExoLogger;
-import org.exoplatform.services.log.Log;
import java.util.ArrayList;
import java.util.List;
@@ -118,40 +118,40 @@
return super.getItemData(parentData, name);
}
-// /**
-// * {@inheritDoc}
-// */
-// public ItemData getItemData(String identifier) throws RepositoryException
-// {
-// // from cache at first
-// ItemData cdata = persistentManager.getCachedItemData(identifier);
-// if (cdata != null)
-// return super.getItemData(identifier);
-//
-// if (!this.equals(versionDataManager) &&
!identifier.equals(Constants.ROOT_UUID))
-// {
-// // search in System cache for /jcr:system nodes only
-// cdata = versionDataManager.persistentManager.getCachedItemData(identifier);
-// if (cdata != null)
-// if (isSystemDescendant(cdata.getQPath()))
-// return versionDataManager.getItemData(identifier);
-// else
-// return null;
-// }
-//
-// // then from persistence
-// ItemData data = super.getItemData(identifier);
-// if (data != null)
-// return data;
-// else if (!this.equals(versionDataManager))
-// {
-// // try from version storage if not the same
-// data = versionDataManager.getItemData(identifier);
-// if (data != null && isSystemDescendant(data.getQPath()))
-// return data;
-// }
-// return null;
-// }
+ // /**
+ // * {@inheritDoc}
+ // */
+ // public ItemData getItemData(String identifier) throws RepositoryException
+ // {
+ // // from cache at first
+ // ItemData cdata = persistentManager.getCachedItemData(identifier);
+ // if (cdata != null)
+ // return super.getItemData(identifier);
+ //
+ // if (!this.equals(versionDataManager) &&
!identifier.equals(Constants.ROOT_UUID))
+ // {
+ // // search in System cache for /jcr:system nodes only
+ // cdata =
versionDataManager.persistentManager.getCachedItemData(identifier);
+ // if (cdata != null)
+ // if (isSystemDescendant(cdata.getQPath()))
+ // return versionDataManager.getItemData(identifier);
+ // else
+ // return null;
+ // }
+ //
+ // // then from persistence
+ // ItemData data = super.getItemData(identifier);
+ // if (data != null)
+ // return data;
+ // else if (!this.equals(versionDataManager))
+ // {
+ // // try from version storage if not the same
+ // data = versionDataManager.getItemData(identifier);
+ // if (data != null && isSystemDescendant(data.getQPath()))
+ // return data;
+ // }
+ // return null;
+ // }
public void save(CompositeChangesLog changesLog) throws RepositoryException,
InvalidItemStateException
{
@@ -185,18 +185,39 @@
if (vstates.size() > 0)
{
- versionLog.addLog((pairId != null) ? new PairChangesLog(vstates,
changes.getSessionId(), changes
- .getEventType(), pairId) : new PlainChangesLogImpl(vstates,
changes.getSessionId(), changes
- .getEventType()));
+ if (pairId != null)
+ {
+ versionLog.addLog(new PairChangesLog(vstates, changes.getSessionId(),
changes.getEventType(), pairId));
+ }
+ else if (changes.getEventType() == ExtendedEvent.LOCK)
+ {
+ versionLog.addLog(new LockPlainChangesLogImpl(vstates,
changes.getSessionId(), changes.getEventType(),
+ ((LockPlainChangesLogImpl)changes).getLockData()));
+ }
+ else
+ {
+ versionLog.addLog(new PlainChangesLogImpl(vstates, changes.getSessionId(),
changes.getEventType()));
+ }
saveVersions = true;
}
if (nvstates.size() > 0)
{
- nonVersionLog.addLog((pairId != null) ? new PairChangesLog(nvstates,
changes.getSessionId(), changes
- .getEventType(), pairId) : new PlainChangesLogImpl(nvstates,
changes.getSessionId(), changes
- .getEventType()));
+ if (pairId != null)
+ {
+ nonVersionLog
+ .addLog(new PairChangesLog(nvstates, changes.getSessionId(),
changes.getEventType(), pairId));
+ }
+ else if (changes.getEventType() == ExtendedEvent.LOCK)
+ {
+ nonVersionLog.addLog(new LockPlainChangesLogImpl(nvstates,
changes.getSessionId(), changes
+ .getEventType(), ((LockPlainChangesLogImpl)changes).getLockData()));
+ }
+ else
+ {
+ nonVersionLog.addLog(new PlainChangesLogImpl(nvstates,
changes.getSessionId(), changes.getEventType()));
+ }
saveNonVersions = true;
}
}
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java 2009-11-19
12:19:05 UTC (rev 769)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java 2009-11-19
12:53:34 UTC (rev 770)
@@ -390,7 +390,8 @@
{
if (LOG.isDebugEnabled())
{
- LOG.debug("FATAL Parent not found " +
parentData.getQPath().getAsString() + " for " + name.getAsString(true));
+ LOG.debug("FATAL Parent not found " +
parentData.getQPath().getAsString() + " for "
+ + name.getAsString(true));
}
// TODO should be Exception, but after OPT branch optimization merge, current
impl requires it as null returned
@@ -723,6 +724,7 @@
*/
public void addLockData(LockData lockData) throws RepositoryException
{
+ startBatch();
if (lockData == null)
{
throw new RepositoryException("Lock data to write can't be
null!");
@@ -761,7 +763,8 @@
*/
public void removeLockData(String identifier) throws RepositoryException
{
- if (identifier != null)
+ startBatch();
+ if (identifier == null)
{
throw new RepositoryException("Item ID to clear lock can't be
null!");
}
Modified:
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/core/lock/TestSessionLockManager.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/core/lock/TestSessionLockManager.java 2009-11-19
12:19:05 UTC (rev 769)
+++
jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/core/lock/TestSessionLockManager.java 2009-11-19
12:53:34 UTC (rev 770)
@@ -21,7 +21,6 @@
import org.exoplatform.services.jcr.JcrImplBaseTest;
import org.exoplatform.services.jcr.core.CredentialsImpl;
import org.exoplatform.services.jcr.datamodel.NodeData;
-import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.jcr.impl.core.NodeImpl;
import org.exoplatform.services.jcr.impl.core.SessionImpl;
@@ -65,7 +64,7 @@
CredentialsImpl credentials = new CredentialsImpl("admin",
"admin".toCharArray());
SessionImpl session2 = (SessionImpl)repository.login(credentials, "ws");
- NodeImpl node2 = (NodeImpl)session2.getNodeByUUID(node1.getUUID());
+ NodeImpl node2 = (NodeImpl)session2.getItem(node1.getPath());
// check node locked
assertTrue(node2.isLocked());
// check session2 has NO access to lock
@@ -89,7 +88,7 @@
CredentialsImpl credentials = new CredentialsImpl("admin",
"admin".toCharArray());
SessionImpl session2 = (SessionImpl)repository.login(credentials, "ws");
- NodeImpl node2 = (NodeImpl)session2.getNodeByUUID(node1.getUUID());
+ NodeImpl node2 = (NodeImpl)session2.getItem(node1.getPath());
// check node locked
assertTrue(node1.isLocked());
assertTrue(node2.isLocked());
@@ -128,7 +127,7 @@
CredentialsImpl credentials = new CredentialsImpl("admin",
"admin".toCharArray());
SessionImpl session2 = (SessionImpl)repository.login(credentials, "ws");
- NodeImpl node2 = (NodeImpl)session2.getNodeByUUID(node1.getUUID());
+ NodeImpl node2 = (NodeImpl)session2.getItem(node1.getPath());
// lock through session2, as session-scoped
Lock lock2 = node2.lock(false, true);
// check session2 has access to lock
@@ -153,7 +152,7 @@
CredentialsImpl credentials = new CredentialsImpl("admin",
"admin".toCharArray());
SessionImpl session2 = (SessionImpl)repository.login(credentials, "ws");
- NodeImpl node2 = (NodeImpl)session2.getNodeByUUID(node1.getUUID());
+ NodeImpl node2 = (NodeImpl)session2.getItem(node1.getPath());
// lock through session2, as open-scoped
Lock lock2 = node2.lock(false, false);
// check session2 has access to lock