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