Author: mduerig
Date: Wed Mar 12 11:38:06 2014
New Revision: 1576700
URL: http://svn.apache.org/r1576700
Log:
OAK-1497: JackrabbitEvent#isExternal() returns true for internal changes for
slow listeners
Make length of revision queue configurable
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/ObserverTracker.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.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
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/RepositoryManager.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.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/Oak.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java?rev=1576700&r1=1576699&r2=1576700&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
Wed Mar 12 11:38:06 2014
@@ -21,6 +21,7 @@ import static com.google.common.collect.
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;
@@ -56,7 +57,6 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
-import org.apache.jackrabbit.oak.spi.commit.BackgroundObserver;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.CompositeEditorProvider;
@@ -221,10 +221,7 @@ public class Oak {
}
}
} else if (type == Observer.class && store instanceof Observable) {
- BackgroundObserver backgroundObserver =
- new BackgroundObserver((Observer) service, executor);
- observerSubscription.register(backgroundObserver);
- observerSubscription.register(((Observable)
store).addObserver(backgroundObserver));
+ observerSubscription.register(((Observable)
store).addObserver((Observer) service));
}
ObjectName objectName = null;
@@ -475,6 +472,8 @@ public class Oak {
}
public ContentRepository createContentRepository() {
+ whiteboard.register(Executor.class, executor, Collections.emptyMap());
+
IndexEditorProvider indexEditors =
CompositeIndexEditorProvider.compose(indexEditorProviders);
OakInitializer.initialize(store, new
CompositeInitializer(initializers), indexEditors);
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/ObserverTracker.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/ObserverTracker.java?rev=1576700&r1=1576699&r2=1576700&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/ObserverTracker.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/ObserverTracker.java
Wed Mar 12 11:38:06 2014
@@ -29,12 +29,8 @@ import java.util.Map;
import javax.annotation.Nonnull;
import com.google.common.io.Closeables;
-import com.google.common.io.Closer;
-
-import org.apache.jackrabbit.oak.spi.commit.BackgroundObserver;
import org.apache.jackrabbit.oak.spi.commit.Observable;
import org.apache.jackrabbit.oak.spi.commit.Observer;
-import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardExecutor;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;
@@ -42,7 +38,6 @@ import org.osgi.util.tracker.ServiceTrac
public class ObserverTracker implements ServiceTrackerCustomizer {
private final Map<ServiceReference, Closeable> subscriptions =
newHashMap();
- private final WhiteboardExecutor executor = new WhiteboardExecutor();
private final Observable observable;
private BundleContext bundleContext;
@@ -55,7 +50,6 @@ public class ObserverTracker implements
public void start(@Nonnull BundleContext bundleContext) {
checkState(this.bundleContext == null);
this.bundleContext = checkNotNull(bundleContext);
- executor.start(new OsgiWhiteboard(bundleContext));
observerTracker = new ServiceTracker(bundleContext,
Observer.class.getName(), this);
observerTracker.open();
}
@@ -63,7 +57,6 @@ public class ObserverTracker implements
public void stop() {
checkState(this.bundleContext != null);
observerTracker.close();
- executor.stop();
}
//------------------------< ServiceTrackerCustomizer
>----------------------
@@ -71,14 +64,8 @@ public class ObserverTracker implements
@Override
public Object addingService(ServiceReference reference) {
Object service = bundleContext.getService(reference);
-
if (service instanceof Observer) {
- Closer subscription = Closer.create();
- BackgroundObserver observer = subscription.register(
- new BackgroundObserver((Observer) service, executor));
- subscription.register(
- observable.addObserver(observer));
- subscriptions.put(reference, subscription);
+ subscriptions.put(reference, observable.addObserver((Observer)
service));
return service;
} else {
bundleContext.ungetService(reference);
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java?rev=1576700&r1=1576699&r2=1576700&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
Wed Mar 12 11:38:06 2014
@@ -54,10 +54,12 @@ import org.apache.jackrabbit.oak.spi.sec
import org.apache.jackrabbit.oak.spi.state.NodeStore;
public class Jcr {
+ private static final int DEFAULT_OBSERVATION_QUEUE_LENGTH = 1000;
private final Oak oak;
private SecurityProvider securityProvider;
+ private int observationQueueLength = DEFAULT_OBSERVATION_QUEUE_LENGTH;
public Jcr(Oak oak) {
this.oak = oak;
@@ -160,16 +162,24 @@ public class Jcr {
return this;
}
+ @Nonnull
public Jcr withAsyncIndexing() {
oak.withAsyncIndexing();
return this;
}
+ @Nonnull
+ public Jcr withObservationQueueLength(int observationQueueLength) {
+ this.observationQueueLength = observationQueueLength;
+ return this;
+ }
+
public Repository createRepository() {
return new RepositoryImpl(
oak.createContentRepository(),
oak.getWhiteboard(),
- securityProvider);
+ securityProvider,
+ observationQueueLength);
}
}
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=1576700&r1=1576699&r2=1576700&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
Wed Mar 12 11:38:06 2014
@@ -21,6 +21,8 @@ package org.apache.jackrabbit.oak.jcr.ob
import static com.google.common.base.Preconditions.checkState;
import static
org.apache.jackrabbit.api.stats.RepositoryStatistics.Type.OBSERVATION_EVENT_COUNTER;
import static
org.apache.jackrabbit.api.stats.RepositoryStatistics.Type.OBSERVATION_EVENT_DURATION;
+import static
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
+import static
org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerObserver;
import java.util.Iterator;
import java.util.concurrent.TimeUnit;
@@ -43,13 +45,15 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.observation.filter.EventFilter;
import org.apache.jackrabbit.oak.plugins.observation.filter.FilterProvider;
import org.apache.jackrabbit.oak.plugins.observation.filter.Filters;
+import org.apache.jackrabbit.oak.spi.commit.BackgroundObserver;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.Observer;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.whiteboard.CompositeRegistration;
import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
-import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils;
+import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardExecutor;
import org.apache.jackrabbit.oak.stats.StatisticManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -73,9 +77,9 @@ class ChangeProcessor implements Observe
private final AtomicReference<FilterProvider> filterProvider;
private final AtomicLong eventCount;
private final AtomicLong eventDuration;
+ private final int queueLength;
- private Registration observerSubscription;
- private Registration mBeanSubscription;
+ private CompositeRegistration registration;
private NodeState previousRoot;
public ChangeProcessor(
@@ -84,7 +88,8 @@ class ChangeProcessor implements Observe
PermissionProvider permissionProvider,
ListenerTracker tracker,
FilterProvider filter,
- StatisticManager statisticManager) {
+ StatisticManager statisticManager,
+ int queueLength) {
this.contentSession = contentSession;
this.namePathMapper = namePathMapper;
this.permissionProvider = permissionProvider;
@@ -93,6 +98,7 @@ class ChangeProcessor implements Observe
filterProvider = new AtomicReference<FilterProvider>(filter);
this.eventCount =
statisticManager.getCounter(OBSERVATION_EVENT_COUNTER);
this.eventDuration =
statisticManager.getCounter(OBSERVATION_EVENT_DURATION);
+ this.queueLength = queueLength;
}
/**
@@ -110,10 +116,19 @@ class ChangeProcessor implements Observe
* @throws IllegalStateException if started already
*/
public synchronized void start(Whiteboard whiteboard) {
- checkState(observerSubscription == null, "Change processor started
already");
- observerSubscription = WhiteboardUtils.registerObserver(whiteboard,
this);
- mBeanSubscription = WhiteboardUtils.registerMBean(whiteboard,
EventListenerMBean.class,
- tracker.getListenerMBean(), "EventListener",
tracker.toString());
+ checkState(registration == null, "Change processor started already");
+ final WhiteboardExecutor executor = new WhiteboardExecutor();
+ executor.start(whiteboard);
+ registration = new CompositeRegistration(
+ registerObserver(whiteboard, new BackgroundObserver(this,
executor, queueLength)),
+ registerMBean(whiteboard, EventListenerMBean.class,
+ tracker.getListenerMBean(), "EventListener",
tracker.toString()),
+ new Registration() {
+ @Override
+ public void unregister() {
+ executor.stop();
+ }
+ });
}
private final Monitor runningMonitor = new Monitor();
@@ -133,11 +148,10 @@ class ChangeProcessor implements Observe
* @throws IllegalStateException if not yet started or stopped already
*/
public synchronized boolean stopAndWait(int timeOut, TimeUnit unit) {
- checkState(observerSubscription != null, "Change processor not
started");
+ checkState(registration != null, "Change processor not started");
running.stop();
if (runningMonitor.enter(timeOut, unit)) {
- mBeanSubscription.unregister();
- observerSubscription.unregister();
+ registration.unregister();
runningMonitor.leave();
return true;
} else {
@@ -152,10 +166,9 @@ class ChangeProcessor implements Observe
* complete.
*/
public synchronized void stop() {
- checkState(observerSubscription != null, "Change processor not
started");
+ checkState(registration != null, "Change processor not started");
running.stop();
- mBeanSubscription.unregister();
- observerSubscription.unregister();
+ registration.unregister();
runningMonitor.leave();
}
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=1576700&r1=1576699&r2=1576700&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
Wed Mar 12 11:38:06 2014
@@ -76,6 +76,7 @@ public class ObservationManagerImpl impl
private final NamePathMapper namePathMapper;
private final Whiteboard whiteboard;
private final StatisticManager statisticManager;
+ private final int queueLength;
/**
* Create a new instance based on a {@link ContentSession} that needs to
implement
@@ -89,15 +90,16 @@ public class ObservationManagerImpl impl
*/
public ObservationManagerImpl(
SessionContext sessionContext, ReadOnlyNodeTypeManager
nodeTypeManager,
- PermissionProvider permissionProvider,
- Whiteboard whiteboard) {
+ PermissionProvider permissionProvider, Whiteboard whiteboard,
+ int queueLength) {
this.sessionDelegate = sessionContext.getSessionDelegate();
this.ntMgr = nodeTypeManager;
this.permissionProvider = permissionProvider;
this.namePathMapper = sessionContext;
this.whiteboard = whiteboard;
- statisticManager = sessionContext.getStatisticManager();
+ this.statisticManager = sessionContext.getStatisticManager();
+ this.queueLength = queueLength;
}
public void dispose() {
@@ -120,7 +122,7 @@ public class ObservationManagerImpl impl
LOG.debug(OBSERVATION,
"Registering event listener {} with filter {}", listener,
filterProvider);
processor = new
ChangeProcessor(sessionDelegate.getContentSession(), namePathMapper,
- permissionProvider, tracker, filterProvider,
statisticManager);
+ permissionProvider, tracker, filterProvider,
statisticManager, queueLength);
processors.put(listener, processor);
processor.start(whiteboard);
} else {
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java?rev=1576700&r1=1576699&r2=1576700&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/OsgiRepository.java
Wed Mar 12 11:38:06 2014
@@ -35,8 +35,9 @@ public class OsgiRepository extends Repo
public OsgiRepository(ContentRepository repository,
Whiteboard whiteboard,
- SecurityProvider securityProvider) {
- super(repository, whiteboard, securityProvider);
+ SecurityProvider securityProvider,
+ int observationQueueLength) {
+ super(repository, whiteboard, securityProvider,
observationQueueLength);
}
@Override
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/RepositoryManager.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/RepositoryManager.java?rev=1576700&r1=1576699&r2=1576700&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/RepositoryManager.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/RepositoryManager.java
Wed Mar 12 11:38:06 2014
@@ -18,6 +18,7 @@
*/
package org.apache.jackrabbit.oak.jcr.osgi;
+import java.util.Map;
import java.util.Properties;
import javax.jcr.Repository;
@@ -26,9 +27,11 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.ConfigurationPolicy;
import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.api.ContentRepository;
+import org.apache.jackrabbit.oak.commons.PropertiesUtil;
import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
import org.apache.jackrabbit.oak.plugins.commit.JcrConflictHandler;
import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
@@ -50,6 +53,7 @@ import org.osgi.framework.ServiceRegistr
*/
@Component(policy = ConfigurationPolicy.REQUIRE)
public class RepositoryManager {
+ private static final int DEFAULT_OBSERVATION_QUEUE_LENGTH = 1000;
private final WhiteboardEditorProvider editorProvider =
new WhiteboardEditorProvider();
@@ -66,14 +70,25 @@ public class RepositoryManager {
private ServiceRegistration registration;
+ private int observationQueueLength;
+
@Reference
private SecurityProvider securityProvider;
@Reference
private NodeStore store;
+ @Property(
+ intValue = DEFAULT_OBSERVATION_QUEUE_LENGTH,
+ name = "Observation queue length",
+ description = "Maximum number of pending revisions in a
observation listener queue")
+ private static final String OBSERVATION_QUEUE_LENGTH =
"oak.observation-queue-length";
+
@Activate
- public void activate(BundleContext bundleContext) {
+ public void activate(BundleContext bundleContext, Map<String, ?> config)
throws Exception {
+ observationQueueLength = PropertiesUtil.toInteger(prop(
+ config, bundleContext, OBSERVATION_QUEUE_LENGTH),
DEFAULT_OBSERVATION_QUEUE_LENGTH);
+
whiteboard = new OsgiWhiteboard(bundleContext);
editorProvider.start(whiteboard);
indexEditorProvider.start(whiteboard);
@@ -82,6 +97,18 @@ public class RepositoryManager {
registration = registerRepository(bundleContext);
}
+ private static Object prop(Map<String, ?> config, BundleContext
bundleContext, String name) {
+ //Prefer framework property first
+ Object value = bundleContext.getProperty(name);
+ if (value != null) {
+ return value;
+ }
+
+ //Fallback to one from config
+ return config.get(name);
+ }
+
+
@Deactivate
public void deactivate() {
if (registration != null) {
@@ -109,7 +136,7 @@ public class RepositoryManager {
return bundleContext.registerService(
Repository.class.getName(),
- new OsgiRepository(cr, whiteboard, securityProvider),
+ new OsgiRepository(cr, whiteboard, securityProvider,
observationQueueLength),
new Properties());
}
}
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java?rev=1576700&r1=1576699&r2=1576700&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
Wed Mar 12 11:38:06 2014
@@ -83,6 +83,7 @@ public class RepositoryImpl implements J
private final ContentRepository contentRepository;
protected final Whiteboard whiteboard;
private final SecurityProvider securityProvider;
+ private final int observationQueueLength;
private final Clock clock;
@@ -105,10 +106,12 @@ public class RepositoryImpl implements J
public RepositoryImpl(@Nonnull ContentRepository contentRepository,
@Nonnull Whiteboard whiteboard,
- @Nonnull SecurityProvider securityProvider) {
+ @Nonnull SecurityProvider securityProvider,
+ int observationQueueLength) {
this.contentRepository = checkNotNull(contentRepository);
this.whiteboard = checkNotNull(whiteboard);
this.securityProvider = checkNotNull(securityProvider);
+ this.observationQueueLength = observationQueueLength;
this.descriptors = determineDescriptors();
this.statisticManager = new StatisticManager(whiteboard,
scheduledExecutor);
this.clock = new Clock.Fast(scheduledExecutor);
@@ -238,7 +241,8 @@ public class RepositoryImpl implements J
ContentSession contentSession =
contentRepository.login(credentials, workspaceName);
SessionDelegate sessionDelegate =
createSessionDelegate(refreshStrategy, contentSession);
SessionContext context = createSessionContext(
- statisticManager, securityProvider,
createAttributes(refreshInterval), sessionDelegate);
+ statisticManager, securityProvider,
createAttributes(refreshInterval),
+ sessionDelegate, observationQueueLength);
return context.getSession();
} catch (LoginException e) {
throw new javax.jcr.LoginException(e.getMessage(), e);
@@ -294,8 +298,9 @@ public class RepositoryImpl implements J
*/
protected SessionContext createSessionContext(
StatisticManager statisticManager, SecurityProvider
securityProvider,
- Map<String, Object> attributes, SessionDelegate delegate) {
- return new SessionContext(this, statisticManager, securityProvider,
whiteboard, attributes, delegate);
+ Map<String, Object> attributes, SessionDelegate delegate, int
observationQueueLength) {
+ return new SessionContext(this, statisticManager, securityProvider,
whiteboard, attributes,
+ delegate, observationQueueLength);
}
/**
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=1576700&r1=1576699&r2=1576700&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
Wed Mar 12 11:38:06 2014
@@ -87,6 +87,7 @@ public class SessionContext implements N
private final Whiteboard whiteboard;
private final Map<String, Object> attributes;
private final SessionDelegate delegate;
+ private final int observationQueueLength;
private final SessionNamespaces namespaces;
private final NamePathMapper namePathMapper;
@@ -112,13 +113,15 @@ public class SessionContext implements N
public SessionContext(
@Nonnull Repository repository, @Nonnull StatisticManager
statisticManager,
@Nonnull SecurityProvider securityProvider, @Nonnull Whiteboard
whiteboard,
- @Nonnull Map<String, Object> attributes, @Nonnull final
SessionDelegate delegate) {
+ @Nonnull Map<String, Object> attributes, @Nonnull final
SessionDelegate delegate,
+ int observationQueueLength) {
this.repository = checkNotNull(repository);
this.statisticManager = statisticManager;
this.securityProvider = checkNotNull(securityProvider);
this.whiteboard = checkNotNull(whiteboard);
this.attributes = checkNotNull(attributes);
this.delegate = checkNotNull(delegate);
+ this.observationQueueLength = observationQueueLength;
SessionStats sessionStats = delegate.getSessionStats();
sessionStats.setAttributes(attributes);
@@ -264,8 +267,7 @@ public class SessionContext implements N
observationManager = new ObservationManagerImpl(
this,
ReadOnlyNodeTypeManager.getInstance(delegate.getRoot(),
namePathMapper),
- getPermissionProvider(),
- whiteboard);
+ getPermissionProvider(), whiteboard, observationQueueLength);
}
return observationManager;
}