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 ju...@apache.org on 2013/12/11 19:28:48 UTC
svn commit: r1550219 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/
oak-core/src/main/java/org/apache/jackrabbit/oak/spi/whiteboard/
oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/
Author: jukka
Date: Wed Dec 11 18:28:48 2013
New Revision: 1550219
URL: http://svn.apache.org/r1550219
Log:
OAK-867: Oak whiteboard
Refactor OsgiExecutor to WhiteboardExecutor
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/whiteboard/WhiteboardExecutor.java
Removed:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OakExecutor.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/osgi/OsgiExecutor.java
Modified:
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/osgi/Activator.java
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=1550219&r1=1550218&r2=1550219&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 Dec 11 18:28:48 2013
@@ -30,9 +30,11 @@ 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;
@@ -40,7 +42,7 @@ import org.osgi.util.tracker.ServiceTrac
public class ObserverTracker implements ServiceTrackerCustomizer {
private final Map<ServiceReference, Closeable> subscriptions = newHashMap();
- private final OsgiExecutor osgiExecutor = new OsgiExecutor();
+ private final WhiteboardExecutor executor = new WhiteboardExecutor();
private final Observable observable;
private BundleContext bundleContext;
@@ -53,7 +55,7 @@ public class ObserverTracker implements
public void start(@Nonnull BundleContext bundleContext) {
checkState(this.bundleContext == null);
this.bundleContext = checkNotNull(bundleContext);
- osgiExecutor.start(bundleContext);
+ executor.start(new OsgiWhiteboard(bundleContext));
observerTracker = new ServiceTracker(bundleContext, Observer.class.getName(), this);
observerTracker.open();
}
@@ -61,7 +63,7 @@ public class ObserverTracker implements
public void stop() {
checkState(this.bundleContext != null);
observerTracker.close();
- osgiExecutor.stop();
+ executor.stop();
}
//------------------------< ServiceTrackerCustomizer >----------------------
@@ -73,7 +75,7 @@ public class ObserverTracker implements
if (service instanceof Observer) {
Closer subscription = Closer.create();
BackgroundObserver observer = subscription.register(
- new BackgroundObserver((Observer) service, osgiExecutor));
+ new BackgroundObserver((Observer) service, executor));
subscription.register(
observable.addObserver(observer));
subscriptions.put(reference, subscription);
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/whiteboard/WhiteboardExecutor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/whiteboard/WhiteboardExecutor.java?rev=1550219&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/whiteboard/WhiteboardExecutor.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/whiteboard/WhiteboardExecutor.java Wed Dec 11 18:28:48 2013
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.jackrabbit.oak.spi.whiteboard;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Dynamic {@link Executor} based on the available whiteboard services.
+ * The {@link #execute(Runnable)} method passes the given command to the
+ * first available executor service. Alternatively the command is run
+ * in the calling thread if no executor services are available.
+ */
+public class WhiteboardExecutor extends AbstractServiceTracker<Executor>
+ implements Executor {
+
+ public WhiteboardExecutor() {
+ super(Executor.class);
+ }
+
+ //----------------------------------------------------------< Executor >--
+
+ @Override
+ public void execute(Runnable command) {
+ for (Executor executor : getServices()) {
+ // use the first executor to run the command
+ executor.execute(command);
+ return;
+ }
+ // no executor services available, so use the current thread instead
+ command.run();
+ }
+
+}
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/Activator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/Activator.java?rev=1550219&r1=1550218&r2=1550219&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/Activator.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/Activator.java Wed Dec 11 18:28:48 2013
@@ -24,7 +24,6 @@ import javax.jcr.Repository;
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.api.ContentRepository;
-import org.apache.jackrabbit.oak.osgi.OsgiExecutor;
import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
import org.apache.jackrabbit.oak.plugins.commit.JcrConflictHandler;
import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
@@ -38,6 +37,7 @@ import org.apache.jackrabbit.oak.spi.sec
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardEditorProvider;
+import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardExecutor;
import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardIndexEditorProvider;
import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardIndexProvider;
import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
@@ -67,7 +67,7 @@ public class Activator implements Bundle
private final WhiteboardIndexProvider indexProvider =
new WhiteboardIndexProvider();
- private final OsgiExecutor executor = new OsgiExecutor();
+ private final WhiteboardExecutor executor = new WhiteboardExecutor();
// TODO should not be hardcoded
private final SecurityProvider securityProvider =
@@ -101,7 +101,7 @@ public class Activator implements Bundle
editorProvider.start(whiteboard);
indexEditorProvider.start(whiteboard);
indexProvider.start(whiteboard);
- executor.start(bundleContext);
+ executor.start(whiteboard);
}
@Override