You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2012/07/10 18:34:06 UTC
svn commit: r1359763 - in
/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr:
PropertyDelegate.java SessionDelegate.java observation/ChangeProcessor.java
observation/ObservationManagerImpl.java
Author: mduerig
Date: Tue Jul 10 16:34:05 2012
New Revision: 1359763
URL: http://svn.apache.org/viewvc?rev=1359763&view=rev
Log:
OAK-156: Observation events need Session.refresh
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java?rev=1359763&r1=1359762&r2=1359763&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/PropertyDelegate.java Tue Jul 10 16:34:05 2012
@@ -16,18 +16,19 @@
*/
package org.apache.jackrabbit.oak.jcr;
-import org.apache.jackrabbit.oak.api.CoreValue;
-import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.api.Tree.Status;
-import org.apache.jackrabbit.oak.commons.PathUtils;
+import java.util.List;
import javax.annotation.Nonnull;
import javax.jcr.InvalidItemStateException;
import javax.jcr.Value;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.PropertyDefinition;
-import java.util.List;
+
+import org.apache.jackrabbit.oak.api.CoreValue;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.api.Tree.Status;
+import org.apache.jackrabbit.oak.commons.PathUtils;
/**
* {@code PropertyDelegate} serve as internal representations of {@code Property}s.
@@ -251,7 +252,7 @@ public class PropertyDelegate extends It
//------------------------------------------------------------< private >---
@Nonnull
- private PropertyState getPropertyState() throws InvalidItemStateException {
+ private synchronized PropertyState getPropertyState() throws InvalidItemStateException {
resolve();
if (parent == null) {
throw new InvalidItemStateException("Property is stale");
@@ -261,7 +262,7 @@ public class PropertyDelegate extends It
}
@Nonnull
- private Tree getParentTree() throws InvalidItemStateException {
+ private synchronized Tree getParentTree() throws InvalidItemStateException {
resolve();
if (parent == null) {
throw new InvalidItemStateException("Property is stale");
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java?rev=1359763&r1=1359762&r2=1359763&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java Tue Jul 10 16:34:05 2012
@@ -179,12 +179,16 @@ public class SessionDelegate {
}
public boolean hasPendingChanges() {
- return root.hasPendingChanges();
+ synchronized (root) {
+ return root.hasPendingChanges();
+ }
}
public void save() throws RepositoryException {
try {
- root.commit(conflictHandler);
+ synchronized (root) {
+ root.commit(conflictHandler);
+ }
}
catch (CommitFailedException e) {
e.throwRepositoryException();
@@ -192,11 +196,13 @@ public class SessionDelegate {
}
public void refresh(boolean keepChanges) {
- if (keepChanges) {
- root.rebase(conflictHandler);
- }
- else {
- root.refresh();
+ synchronized (root) {
+ if (keepChanges) {
+ root.rebase(conflictHandler);
+ }
+ else {
+ root.refresh();
+ }
}
}
@@ -267,7 +273,9 @@ public class SessionDelegate {
@Nonnull
public ChangeExtractor getChangeExtractor() {
- return root.getChangeExtractor();
+ synchronized (root) {
+ return root.getChangeExtractor();
+ }
}
//----------------------------------------------------------< Workspace >---
@@ -318,37 +326,39 @@ public class SessionDelegate {
public void move(String srcAbsPath, String destAbsPath, boolean transientOp)
throws RepositoryException {
- String srcPath = PathUtils.relativize("/", srcAbsPath);
- String destPath = PathUtils.relativize("/", destAbsPath);
- Root moveRoot = transientOp ? root : contentSession.getCurrentRoot();
-
- // check destination
- Tree dest = moveRoot.getTree(destPath);
- if (dest != null) {
- throw new ItemExistsException(destAbsPath);
- }
+ synchronized (root) {
+ String srcPath = PathUtils.relativize("/", srcAbsPath);
+ String destPath = PathUtils.relativize("/", destAbsPath);
+ Root moveRoot = transientOp ? root : contentSession.getCurrentRoot();
+
+ // check destination
+ Tree dest = moveRoot.getTree(destPath);
+ if (dest != null) {
+ throw new ItemExistsException(destAbsPath);
+ }
- // check parent of destination
- String destParentPath = PathUtils.getParentPath(destPath);
- Tree destParent = moveRoot.getTree(destParentPath);
- if (destParent == null) {
- throw new PathNotFoundException(PathUtils.getParentPath(destAbsPath));
- }
+ // check parent of destination
+ String destParentPath = PathUtils.getParentPath(destPath);
+ Tree destParent = moveRoot.getTree(destParentPath);
+ if (destParent == null) {
+ throw new PathNotFoundException(PathUtils.getParentPath(destAbsPath));
+ }
- // check source exists
- Tree src = moveRoot.getTree(srcPath);
- if (src == null) {
- throw new PathNotFoundException(srcAbsPath);
- }
+ // check source exists
+ Tree src = moveRoot.getTree(srcPath);
+ if (src == null) {
+ throw new PathNotFoundException(srcAbsPath);
+ }
- try {
- moveRoot.move(srcPath, destPath);
- if (!transientOp) {
- moveRoot.commit(DefaultConflictHandler.OURS);
+ try {
+ moveRoot.move(srcPath, destPath);
+ if (!transientOp) {
+ moveRoot.commit(DefaultConflictHandler.OURS);
+ }
+ }
+ catch (CommitFailedException e) {
+ e.throwRepositoryException();
}
- }
- catch (CommitFailedException e) {
- e.throwRepositoryException();
}
}
@@ -394,7 +404,9 @@ public class SessionDelegate {
@CheckForNull
Tree getTree(String path) {
- return root.getTree(path);
+ synchronized (root) {
+ return root.getTree(path);
+ }
}
@CheckForNull
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java?rev=1359763&r1=1359762&r2=1359763&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java Tue Jul 10 16:34:05 2012
@@ -29,6 +29,7 @@ import org.apache.jackrabbit.commons.ite
import org.apache.jackrabbit.oak.api.ChangeExtractor;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.jcr.SessionDelegate;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -40,19 +41,21 @@ import static org.apache.jackrabbit.comm
import static org.apache.jackrabbit.oak.util.Iterators.singleton;
class ChangeProcessor extends TimerTask {
- private final NamePathMapper namePathMapper;
+ private final SessionDelegate sessionDelegate;
private final ChangeExtractor changeExtractor;
private final EventListener listener;
private final AtomicReference<ChangeFilter> filterRef;
+ private final NamePathMapper namePathMapper;
private volatile boolean stopped;
- public ChangeProcessor(NamePathMapper namePathMapper, ChangeExtractor changeExtractor, EventListener listener,
+ public ChangeProcessor(SessionDelegate sessionDelegate, ChangeExtractor changeExtractor, EventListener listener,
ChangeFilter filter) {
- this.namePathMapper = namePathMapper;
+ this.sessionDelegate = sessionDelegate;
this.changeExtractor = changeExtractor;
this.listener = listener;
filterRef = new AtomicReference<ChangeFilter>(filter);
+ namePathMapper = sessionDelegate.getNamePathMapper();
}
public void setFilter(ChangeFilter filter) {
@@ -66,6 +69,7 @@ class ChangeProcessor extends TimerTask
@Override
public void run() {
+ sessionDelegate.refresh(true);
EventGeneratingNodeStateDiff diff = new EventGeneratingNodeStateDiff();
changeExtractor.getChanges(diff);
diff.sendEvents();
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java?rev=1359763&r1=1359762&r2=1359763&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java Tue Jul 10 16:34:05 2012
@@ -59,8 +59,7 @@ public class ObservationManagerImpl impl
if (processor == null) {
ChangeExtractor extractor = sessionDelegate.getChangeExtractor();
ChangeFilter filter = new ChangeFilter(eventTypes, absPath, isDeep, uuid, nodeTypeName, noLocal);
- ChangeProcessor changeProcessor = new ChangeProcessor(sessionDelegate.getNamePathMapper(), extractor,
- listener, filter);
+ ChangeProcessor changeProcessor = new ChangeProcessor(sessionDelegate, extractor, listener, filter);
processors.put(listener, changeProcessor);
timer.get().schedule(changeProcessor, 0, 1000);
}