You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ie...@apache.org on 2016/04/11 11:24:43 UTC
svn commit: r1738559 - in
/sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart:
junit/CrankstartSetup.java launcher/FrameworkSetup.java
launcher/Launcher.java launcher/LauncherListener.java
Author: ieb
Date: Mon Apr 11 09:24:43 2016
New Revision: 1738559
URL: http://svn.apache.org/viewvc?rev=1738559&view=rev
Log:
SLING-5656 Added LauncherListener to crankstart to be able to listen to progress of launch
Added:
sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/LauncherListener.java (with props)
Modified:
sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/junit/CrankstartSetup.java
sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/FrameworkSetup.java
sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/Launcher.java
Modified: sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/junit/CrankstartSetup.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/junit/CrankstartSetup.java?rev=1738559&r1=1738558&r2=1738559&view=diff
==============================================================================
--- sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/junit/CrankstartSetup.java (original)
+++ sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/junit/CrankstartSetup.java Mon Apr 11 09:24:43 2016
@@ -18,6 +18,7 @@ import org.apache.http.client.methods.Ht
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.sling.crankstart.launcher.Launcher;
+import org.apache.sling.crankstart.launcher.LauncherListener;
import org.apache.sling.crankstart.launcher.PropertiesVariableResolver;
import org.apache.sling.provisioning.model.ModelUtility.VariableResolver;
import org.junit.rules.ExternalResource;
@@ -42,8 +43,12 @@ public class CrankstartSetup extends Ext
private VariableResolver variablesResolver = new PropertiesVariableResolver(replacementProps, Launcher.VARIABLE_OVERRIDE_PREFIX);
private String [] classpathModelPaths;
-
-
+ private boolean shutdown;
+ private int bundlesStarted;
+ private int bundlesFailed;
+ private int totalBundles;
+
+
@Override
public String toString() {
return getClass().getSimpleName() + ", port " + port + ", OSGi storage " + storagePath;
@@ -64,7 +69,8 @@ public class CrankstartSetup extends Ext
}
}
}
-
+
+
public CrankstartSetup withModelResources(String ... classpathModelPaths) {
this.classpathModelPaths = classpathModelPaths;
return this;
@@ -103,6 +109,22 @@ public class CrankstartSetup extends Ext
public String getBaseUrl() {
return baseUrl;
}
+
+ public int getBundlesFailed() {
+ return bundlesFailed;
+ }
+
+ public int getBundlesStarted() {
+ return bundlesStarted;
+ }
+
+ public int getTotalBundles() {
+ return totalBundles;
+ }
+
+ public boolean isShutdownComplete() {
+ return shutdown;
+ }
private static void cleanup() {
synchronized (toCleanup) {
@@ -138,8 +160,23 @@ public class CrankstartSetup extends Ext
fail("Expecting connection to " + port + " to fail before starting HTTP service");
} catch(IOException expected) {
}
-
- final Launcher launcher = new Launcher().withVariableResolver(variablesResolver);
+ shutdown = false;
+ bundlesStarted = 0;
+ bundlesFailed = 0;
+ totalBundles = 0;
+ final Launcher launcher = new Launcher().withVariableResolver(variablesResolver).withListener(new LauncherListener() {
+ @Override
+ public void onStartup(int started, int failed, int totalBundles) {
+ CrankstartSetup.this.bundlesStarted = started;
+ CrankstartSetup.this.bundlesFailed = failed;
+ CrankstartSetup.this.totalBundles = totalBundles;
+ }
+
+ @Override
+ public void onShutdown() {
+ shutdown = true;
+ }
+ });
for(String path : classpathModelPaths) {
mergeModelResource(launcher, path);
}
Modified: sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/FrameworkSetup.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/FrameworkSetup.java?rev=1738559&r1=1738558&r2=1738559&view=diff
==============================================================================
--- sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/FrameworkSetup.java (original)
+++ sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/FrameworkSetup.java Mon Apr 11 09:24:43 2016
@@ -50,6 +50,7 @@ public class FrameworkSetup extends Hash
public Object call() throws Exception {
final Model model = require(Launcher.MODEL_KEY, Model.class);
+ final LauncherListener listener = (LauncherListener) get(Launcher.LISTENER_KEY);
log.info("Setting OSGi framework properties");
final Map<String, String> fprops = new FrameworkProperties(model).getProperties(null);
@@ -98,8 +99,14 @@ public class FrameworkSetup extends Hash
}
log.info("OSGi setup done, waiting for framework to stop");
+ if ( listener != null) {
+ listener.onStartup(started, failed, bundles.length);
+ }
framework.waitForStop(0);
-
+ if ( listener != null) {
+ listener.onShutdown();
+ }
+
return null;
}
Modified: sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/Launcher.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/Launcher.java?rev=1738559&r1=1738558&r2=1738559&view=diff
==============================================================================
--- sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/Launcher.java (original)
+++ sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/Launcher.java Mon Apr 11 09:24:43 2016
@@ -51,6 +51,7 @@ public class Launcher {
public static final String CRANKSTART_FEATURE = ":crankstart";
public static final String MODEL_KEY = "model";
+ public static final String LISTENER_KEY = "listener";
public static final String FRAMEWORK_KEY = "framework";
public static final String VARIABLE_OVERRIDE_PREFIX = "crankstart.model.";
@@ -80,7 +81,8 @@ public class Launcher {
return !Launcher.CRANKSTART_FEATURE.equals(f.getName());
}
};
-
+ private LauncherListener listener;
+
public Launcher(String ... args) throws Exception {
MavenResolver.setup();
withVariableResolver(null);
@@ -95,6 +97,11 @@ public class Launcher {
return this;
}
+ public Launcher withListener(LauncherListener listener) {
+ this.listener = listener;
+ return this;
+ }
+
/** Add models from the supplied paths, can be either files or folders */
public Launcher withModelPaths(String ... paths) throws Exception {
// Find all files to read and sort the list, to be deterministic
@@ -158,6 +165,7 @@ public class Launcher {
final Callable<?> c = (Callable<?>) getClass().getClassLoader().loadClass("org.apache.sling.crankstart.launcher.FrameworkSetup").newInstance();
@SuppressWarnings("unchecked") final Map<String, Object> cmap = (Map<String, Object>)c;
cmap.put(MODEL_KEY, model);
+ cmap.put(LISTENER_KEY, listener);
c.call();
}
Added: sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/LauncherListener.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/LauncherListener.java?rev=1738559&view=auto
==============================================================================
--- sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/LauncherListener.java (added)
+++ sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/LauncherListener.java Mon Apr 11 09:24:43 2016
@@ -0,0 +1,37 @@
+/*
+ * 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.sling.crankstart.launcher;
+
+/**
+ * Listens to startup information from the launcher thread.
+ */
+public interface LauncherListener {
+
+ /**
+ * Called when the launcher has finished loading all initial bundles reporting those that started and those that failed.
+ * @param started the number started.
+ * @param failed the number that failed.
+ * @param length the total number of bundles.
+ */
+ void onStartup(int started, int failed, int length);
+
+ /**
+ * Called when the launcher thread begins to perform shutdown.
+ */
+ void onShutdown();
+}
Propchange: sling/trunk/contrib/crankstart/launcher/src/main/java/org/apache/sling/crankstart/launcher/LauncherListener.java
------------------------------------------------------------------------------
svn:eol-style = native