+
+Tracker tracker =
whiteboard.track(MountInfoProvider.class);
+List services = tracker.getServices();
+tracker.stop();
+
+if ( services.isEmpty() )
+this.mountInfoProvider = null;
+else if ( services.size() == 1 )
+this.mountInfoProvider = services.get(0);
+else
+throw new IllegalArgumentException("Found " +
services.size() + " MountInfoProvider references, expected at most
1.");
You can also use WhiteboardUtils#getService here which hides this stuff
Chetan Mehrotra
On Tue, Aug 29, 2017 at 7:48 AM, wrote:
> Author: rombert
> Date: Tue Aug 29 14:48:56 2017
> New Revision: 1806602
>
> URL: http://svn.apache.org/viewvc?rev=1806602&view=rev
> Log:
> OAK-6563 - Session.hasCapability(...) should reflect read-only status of
> mounts
>
> Add optional support for checking the Mount status in
> SessionImpl.hasCapability.
>
> Added:
>
> jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/SessionImplCapabilityWithMountInfoProviderTest.java
> Modified:
>
> 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
>
> jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java
>
> 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=1806602&r1=1806601&r2=1806602&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
> Tue Aug 29 14:48:56 2017
> @@ -22,6 +22,7 @@ import static java.util.Collections.sing
> import static
> org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.registerMBean;
>
> import java.io.Closeable;
> +import java.util.List;
> import java.util.Map;
> import java.util.concurrent.Callable;
> import java.util.concurrent.ScheduledExecutorService;
> @@ -61,8 +62,10 @@ import org.apache.jackrabbit.oak.jcr.ses
> import org.apache.jackrabbit.oak.plugins.observation.CommitRateLimiter;
> import org.apache.jackrabbit.oak.spi.gc.DelegatingGCMonitor;
> import org.apache.jackrabbit.oak.spi.gc.GCMonitor;
> +import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
> import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
> import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
> +import org.apache.jackrabbit.oak.spi.whiteboard.Tracker;
> import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
> import org.apache.jackrabbit.oak.stats.Clock;
> import org.apache.jackrabbit.oak.stats.StatisticManager;
> @@ -105,6 +108,7 @@ public class RepositoryImpl implements J
> private final Clock.Fast clock;
> private final DelegatingGCMonitor gcMonitor = new DelegatingGCMonitor();
> private final Registration gcMonitorRegistration;
> +private final MountInfoProvider mountInfoProvider;
>
> /**
> * {@link ThreadLocal} counter that keeps track of the save operations
> @@ -152,6 +156,17 @@ public class RepositoryImpl implements J
> this.clock = new Clock.Fast(scheduledExecutor);
> this.gcMonitorRegistration = whiteboard.register(GCMonitor.class,
> gcMonitor, emptyMap());
> this.fastQueryResultSize = fastQueryResultSize;
> +
> +Tracker tracker =
> whiteboard.track(MountInfoProvider.class);
> +List services = tracker.getServices();
> +tracker.stop();
> +
> +if ( services.isEmpty() )
> +this.mountInfoProvider = null;
> +else if ( services.size() == 1 )
> +this.mountInfoProvider = services.get(0);
> +else
> +throw new IllegalArgumentException("Found " + services.size() +
> " MountInfoProvider references, expected at most 1.");
> }
>
> //-< Repository
> >---
> @@ -343,7 +358,7 @@ public class RepositoryImpl implements J
> Map attributes, SessionDelegate delegate, int
> observationQueueLength,
> CommitRateLimiter commitRateLimiter) {
> return new SessionContext(this, statisticManager, securityProvider,
> whiteboard, attributes,
> -delegate, observationQueueLength, commitRateLimiter,
> fastQueryResultSize);
> +delegate, observationQueueLength, commitRateLimiter,
> mountInfoProvider, fastQueryResultSize);
> }
>
> /**
>
> Modified:
> jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/S