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 2013/12/03 22:28:55 UTC
svn commit: r1547593 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/core/
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/
Author: mduerig
Date: Tue Dec 3 21:28:55 2013
New Revision: 1547593
URL: http://svn.apache.org/r1547593
Log:
OAK-1120: Enhance observation mechanism to support Apache Sling
Loop registration of observation listeners through the whiteboard instead of having ContentSession implement Observable
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentSessionImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentSessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentSessionImpl.java?rev=1547593&r1=1547592&r2=1547593&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentSessionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ContentSessionImpl.java Tue Dec 3 21:28:55 2013
@@ -16,10 +16,8 @@
*/
package org.apache.jackrabbit.oak.core;
-import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
-import java.io.Closeable;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
@@ -30,9 +28,7 @@ import javax.security.auth.login.LoginEx
import org.apache.jackrabbit.oak.api.AuthInfo;
import org.apache.jackrabbit.oak.api.ContentSession;
import org.apache.jackrabbit.oak.api.Root;
-import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
-import org.apache.jackrabbit.oak.spi.commit.Observer;
import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
import org.apache.jackrabbit.oak.spi.security.authentication.LoginContext;
@@ -43,7 +39,7 @@ import org.slf4j.LoggerFactory;
/**
* {@code MicroKernel}-based implementation of the {@link ContentSession} interface.
*/
-class ContentSessionImpl implements ContentSession, Observable {
+class ContentSessionImpl implements ContentSession {
private static final Logger log = LoggerFactory.getLogger(ContentSessionImpl.class);
@@ -68,7 +64,6 @@ class ContentSessionImpl implements Cont
@Nonnull NodeStore store,
@Nonnull CommitHook hook,
@Nonnull QueryIndexProvider indexProvider) {
- checkArgument(store instanceof Observable);
this.loginContext = loginContext;
this.securityProvider = securityProvider;
this.workspaceName = workspaceName;
@@ -118,11 +113,6 @@ class ContentSessionImpl implements Cont
};
}
- @Override
- public Closeable addObserver(Observer observer) {
- return ((Observable) store).addObserver(observer);
- }
-
//-----------------------------------------------------------< Closable >---
@Override
public synchronized void close() throws IOException {
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java?rev=1547593&r1=1547592&r2=1547593&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java Tue Dec 3 21:28:55 2013
@@ -18,11 +18,8 @@
*/
package org.apache.jackrabbit.oak.plugins.observation;
-import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
-import java.io.Closeable;
-import java.io.IOException;
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nonnull;
@@ -40,7 +37,6 @@ import org.apache.jackrabbit.oak.namepat
import org.apache.jackrabbit.oak.plugins.observation.filter.EventIterator;
import org.apache.jackrabbit.oak.plugins.observation.filter.FilterProvider;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
-import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.commit.Observer;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
@@ -65,8 +61,8 @@ public class ChangeProcessor implements
private final EventListener eventListener;
private final AtomicReference<FilterProvider> filterProvider;
- private Closeable observer;
- private Registration mbean;
+ private Registration observerSubscription;
+ private Registration mBeanSubscription;
private NodeState previousRoot;
private boolean stopping;
@@ -74,7 +70,6 @@ public class ChangeProcessor implements
ContentSession contentSession,
NamePathMapper namePathMapper,
ListenerTracker tracker, FilterProvider filter) {
- checkArgument(contentSession instanceof Observable);
this.contentSession = contentSession;
this.namePathMapper = namePathMapper;
this.tracker = tracker;
@@ -97,11 +92,10 @@ public class ChangeProcessor implements
* @throws IllegalStateException if started already
*/
public synchronized void start(Whiteboard whiteboard) {
- checkState(observer == null, "Change processor started already");
- observer = ((Observable) contentSession).addObserver(this);
- mbean = WhiteboardUtils.registerMBean(whiteboard, EventListenerMBean.class,
+ checkState(observerSubscription == null, "Change processor started already");
+ observerSubscription = WhiteboardUtils.registerObserver(whiteboard, this);
+ mBeanSubscription = WhiteboardUtils.registerMBean(whiteboard, EventListenerMBean.class,
tracker.getListenerMBean(), "EventListener", tracker.toString());
-
}
/**
@@ -110,14 +104,10 @@ public class ChangeProcessor implements
* @throws IllegalStateException if not yet started or stopped already
*/
public synchronized void stop() {
- checkState(observer != null, "Change processor not started");
- try {
- stopping = true;
- mbean.unregister();
- observer.close();
- } catch (IOException e) {
- log.error("Error while stopping change listener", e);
- }
+ checkState(observerSubscription != null, "Change processor not started");
+ stopping = true;
+ mBeanSubscription.unregister();
+ observerSubscription.unregister();
}
@Override
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java?rev=1547593&r1=1547592&r2=1547593&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java Tue Dec 3 21:28:55 2013
@@ -42,7 +42,6 @@ import org.apache.jackrabbit.api.securit
import org.apache.jackrabbit.api.security.authorization.PrivilegeManager;
import org.apache.jackrabbit.api.security.principal.PrincipalManager;
import org.apache.jackrabbit.api.security.user.UserManager;
-import org.apache.jackrabbit.oak.api.ContentSession;
import org.apache.jackrabbit.oak.jcr.delegate.AccessControlManagerDelegator;
import org.apache.jackrabbit.oak.jcr.delegate.JackrabbitAccessControlManagerDelegator;
import org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate;
@@ -58,7 +57,6 @@ import org.apache.jackrabbit.oak.namepat
import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl;
import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
import org.apache.jackrabbit.oak.plugins.value.ValueFactoryImpl;
-import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.security.SecurityConfiguration;
import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
import org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
@@ -250,11 +248,6 @@ public class SessionContext implements N
@Nonnull
public ObservationManager getObservationManager() throws UnsupportedRepositoryOperationException {
if (observationManager == null) {
- ContentSession contentSession = getSessionDelegate().getContentSession();
- if (!(contentSession instanceof Observable)) {
- throw new UnsupportedRepositoryOperationException("Observation not supported for session " + contentSession);
- }
-
observationManager = new ObservationManagerImpl(
delegate,
ReadOnlyNodeTypeManager.getInstance(delegate.getRoot(), namePathMapper),