You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2018/11/22 12:50:10 UTC

[sling-org-apache-sling-feature-launcher] branch master updated: SLING-8125: Remove launchpad.api support and dao support from feature launcher.

This is an automated email from the ASF dual-hosted git repository.

pauls pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-launcher.git


The following commit(s) were added to refs/heads/master by this push:
     new d76f219  SLING-8125: Remove launchpad.api support and dao support from feature launcher.
d76f219 is described below

commit d76f219e816d303e705db1e9b21c572eb13578df
Author: Karl Pauls <ka...@gmail.com>
AuthorDate: Thu Nov 22 13:49:58 2018 +0100

    SLING-8125: Remove launchpad.api support and dao support from feature launcher.
---
 pom.xml                                            |   6 -
 .../sling/feature/launcher/impl/Installation.java  |   6 +-
 .../feature/launcher/impl/LauncherConfig.java      |   6 +-
 .../apache/sling/feature/launcher/impl/Main.java   |  38 ----
 .../launcher/impl/launchers/AbstractRunner.java    | 203 ++-------------------
 .../launcher/impl/launchers/FrameworkLauncher.java |  19 --
 .../launcher/impl/launchers/FrameworkRunner.java   |  14 +-
 .../launcher/spi/LauncherPrepareContext.java       |   4 +-
 8 files changed, 31 insertions(+), 265 deletions(-)

diff --git a/pom.xml b/pom.xml
index 6486631..b29ee45 100644
--- a/pom.xml
+++ b/pom.xml
@@ -123,12 +123,6 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.launchpad.api</artifactId>
-            <version>1.2.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.converter</artifactId>
             <version>1.0.0</version>
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/Installation.java b/src/main/java/org/apache/sling/feature/launcher/impl/Installation.java
index 3f08856..dbc17a6 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/Installation.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/Installation.java
@@ -16,9 +16,6 @@
  */
 package org.apache.sling.feature.launcher.impl;
 
-import org.apache.sling.feature.launcher.spi.LauncherRunContext;
-import org.apache.sling.feature.launcher.spi.extensions.ExtensionInstallationContext;
-
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Dictionary;
@@ -26,6 +23,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.sling.feature.launcher.spi.LauncherRunContext;
+import org.apache.sling.feature.launcher.spi.extensions.ExtensionInstallationContext;
+
 /**
  * This class holds the configuration of the launcher.
  */
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java b/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java
index 0f6298c..c6c4264 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/LauncherConfig.java
@@ -16,15 +16,15 @@
  */
 package org.apache.sling.feature.launcher.impl;
 
-import org.apache.sling.feature.io.file.ArtifactManagerConfig;
-import org.apache.sling.feature.io.file.spi.ArtifactProviderContext;
-
 import java.io.File;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.Map;
 
+import org.apache.sling.feature.io.file.ArtifactManagerConfig;
+import org.apache.sling.feature.io.file.spi.ArtifactProviderContext;
+
 /**
  * This class holds the configuration of the launcher.
  */
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/Main.java b/src/main/java/org/apache/sling/feature/launcher/impl/Main.java
index 4005781..89d9c4f 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/Main.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/Main.java
@@ -62,8 +62,6 @@ public class Main {
         return LOGGER;
     }
 
-    private static volatile File m_populate;
-
     private static volatile String m_frameworkVersion = null; // DEFAULT is null
 
     /** Split a string into key and value */
@@ -91,7 +89,6 @@ public class Main {
         debugOption.setArgs(0);
         final Option cacheOption = new Option("c", true, "Set cache dir");
         final Option homeOption = new Option("p", true, "Set home dir");
-        final Option populateOption = new Option("dao", true, "Only download required artifacts into directory");
 
         final Option frameworkOption = new Option("fv", true, "Set felix framework version");
 
@@ -102,7 +99,6 @@ public class Main {
         options.addOption(debugOption);
         options.addOption(cacheOption);
         options.addOption(homeOption);
-        options.addOption(populateOption);
         options.addOption(frameworkOption);
 
         final CommandLineParser clp = new BasicParser();
@@ -142,12 +138,6 @@ public class Main {
             if (cl.hasOption(homeOption.getOpt())) {
                 config.setHomeDirectory(new File(cl.getOptionValue(homeOption.getOpt())));
             }
-            if (cl.hasOption(populateOption.getOpt())) {
-                m_populate = new File(cl.getOptionValue(populateOption.getOpt()));
-                if (!m_populate.isDirectory() && !m_populate.mkdirs()) {
-                    throw new ParseException("Bad dao directory");
-                }
-            }
             if (cl.hasOption(frameworkOption.getOpt())) {
                 m_frameworkVersion = cl.getOptionValue(frameworkOption.getOpt());
             }
@@ -241,10 +231,6 @@ public class Main {
                     public File getArtifactFile(final ArtifactId artifact) throws IOException
                     {
                         final ArtifactHandler handler = artifactManager.getArtifactHandler(":" + artifact.toMvnPath());
-                        if (m_populate != null)
-                        {
-                            populate(handler.getFile(), artifact);
-                        }
                         return handler.getFile();
                     }
 
@@ -262,16 +248,6 @@ public class Main {
                 Main.LOG().info("Using {} local artifacts, {} cached artifacts, and {} downloaded artifacts",
                     launcherConfig.getLocalArtifacts(), launcherConfig.getCachedArtifacts(), launcherConfig.getDownloadedArtifacts());
 
-                if (m_populate != null)
-                {
-                    Map<Artifact, File> local = FeatureProcessor.calculateArtifacts(artifactManager, app);
-                    for (Map.Entry<Artifact, File> entry : local.entrySet())
-                    {
-                        populate(entry.getValue(), entry.getKey().getId());
-                    }
-                    return;
-                }
-
                 if (restart) {
                     launcherConfig.getInstallation().getInstallableArtifacts().clear();
                     launcherConfig.getInstallation().getConfigurations().clear();
@@ -295,20 +271,6 @@ public class Main {
         }
     }
 
-    private static void populate(File file, ArtifactId artifactId) throws IOException{
-        File target = new File(m_populate, artifactId.toMvnPath().replace('/', File.separatorChar));
-
-        if (!target.isFile())
-        {
-            if (Main.LOG().isDebugEnabled())
-            {
-                Main.LOG().debug("Populating {} with {}", target.getAbsolutePath(), file.getAbsolutePath());
-            }
-            target.getParentFile().mkdirs();
-            Files.copy(file.toPath(), target.toPath());
-        }
-    }
-
     private static Feature assemble(final LauncherConfig launcherConfig, final ArtifactManager artifactManager) throws IOException
     {
         if (launcherConfig.getFeatureFiles().length == 0) {
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/launchers/AbstractRunner.java b/src/main/java/org/apache/sling/feature/launcher/impl/launchers/AbstractRunner.java
index f532a2c..44519a4 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/launchers/AbstractRunner.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/launchers/AbstractRunner.java
@@ -16,23 +16,6 @@
  */
 package org.apache.sling.feature.launcher.impl.launchers;
 
-import org.apache.sling.feature.launcher.impl.Main;
-import org.apache.sling.launchpad.api.LaunchpadContentProvider;
-import org.apache.sling.launchpad.api.StartupHandler;
-import org.apache.sling.launchpad.api.StartupMode;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.Constants;
-import org.osgi.framework.FrameworkEvent;
-import org.osgi.framework.FrameworkListener;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.launch.Framework;
-import org.osgi.framework.startlevel.BundleStartLevel;
-import org.osgi.framework.startlevel.FrameworkStartLevel;
-import org.osgi.util.tracker.ServiceTracker;
-import org.osgi.util.tracker.ServiceTrackerCustomizer;
-
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -40,16 +23,11 @@ import java.io.InputStream;
 import java.lang.reflect.Array;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
-import java.net.JarURLConnection;
-import java.net.URL;
-import java.net.URLConnection;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Dictionary;
-import java.util.Enumeration;
 import java.util.Hashtable;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Callable;
@@ -58,10 +36,19 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.regex.Pattern;
+
+import org.apache.sling.feature.launcher.impl.Main;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.launch.Framework;
+import org.osgi.framework.startlevel.BundleStartLevel;
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
 
 /**
  * Common functionality for the framework start.
@@ -76,28 +63,9 @@ public abstract class AbstractRunner implements Callable<Integer> {
 
     private final List<File> installables;
 
-    private final int targetStartlevel;
-
-    private final AtomicInteger waitRequested = new AtomicInteger(0);
-
-    private volatile boolean install;
-
-    public AbstractRunner(final Map<String, String> frameworkProperties, final List<Object[]> configurations, final List<File> installables) {
+    public AbstractRunner(final List<Object[]> configurations, final List<File> installables) {
         this.configurations = new ArrayList<>(configurations);
         this.installables = installables;
-        String target = frameworkProperties.get(Constants.FRAMEWORK_BEGINNING_STARTLEVEL);
-        if (target != null) {
-            targetStartlevel = Integer.parseInt(target);
-        }
-        else {
-            targetStartlevel = 1;
-        }
-        if (!this.installables.isEmpty()) {
-            if ("true".equalsIgnoreCase(frameworkProperties.get("sling.framework.install.incremental")))
-            {
-                frameworkProperties.put(Constants.FRAMEWORK_BEGINNING_STARTLEVEL, "1");
-            }
-        }
     }
 
     protected void setupFramework(final Framework framework, final Map<Integer, List<File>> bundlesMap)
@@ -170,110 +138,6 @@ public abstract class AbstractRunner implements Callable<Integer> {
         } catch ( final IOException ioe) {
             throw new BundleException("Unable to install bundles.", ioe);
         }
-
-        // TODO: double check bundles and take installables into account
-        install = !this.configurations.isEmpty() || !this.installables.isEmpty() || !bundlesMap.isEmpty();
-        try
-        {
-            // TODO: double check bundles and take installables into account
-            final StartupMode mode = !install ? StartupMode.RESTART : StartupMode.INSTALL;
-
-            framework.getBundleContext().registerService(StartupHandler.class, new StartupHandler()
-            {
-                @Override
-                public StartupMode getMode()
-                {
-                    return mode;
-                }
-
-                @Override
-                public boolean isFinished() {
-                    return framework.getState() == Framework.ACTIVE && targetStartlevel > framework.adapt(FrameworkStartLevel.class).getStartLevel();
-                }
-
-                @Override
-                public void waitWithStartup(boolean b) {
-                    if (b) {
-                        waitRequested.incrementAndGet();
-                    }
-                    else {
-                        waitRequested.decrementAndGet();
-                    }
-                }
-            }, null);
-
-            framework.getBundleContext().registerService(LaunchpadContentProvider.class, new LaunchpadContentProvider()
-            {
-                @Override
-                public Iterator<String> getChildren(String path) {
-                    List<String> children;
-
-                    // Guard against extra trailing slashes
-                    if(path.endsWith("/") && path.length() > 1) {
-                        path = path.substring(0, path.length()-1);
-                    }
-
-                    URL url = this.getClass().getResource(path);
-                    if (url != null) {
-                        Pattern pathPattern = Pattern.compile("^" + path + "/[^/]+/?$");
-
-                        children = new ArrayList<String>();
-                        try {
-                            URLConnection conn = url.openConnection();
-                            if (conn instanceof JarURLConnection) {
-                                JarFile jar = ((JarURLConnection) conn).getJarFile();
-                                Enumeration<JarEntry> entries = jar.entries();
-                                while (entries.hasMoreElements()) {
-                                    String entry = entries.nextElement().getName();
-                                    if (pathPattern.matcher(entry).matches()) {
-                                        children.add(entry);
-                                    }
-                                }
-                            }
-                        } catch (IOException ioe) {
-                            // ignore for now
-                        }
-                    } else {
-                        children = Collections.emptyList();
-                    }
-
-                    return children.iterator();
-                }
-
-                @Override
-                public URL getResource(String path) {
-                    // ensure path
-                    if (path == null || path.length() == 0) {
-                        return null;
-                    }
-
-                    // remove leading slash
-                    if (path.charAt(0) == '/') {
-                        path = path.substring(1);
-                    }
-
-                    return this.getResource(path);
-                }
-
-                @Override
-                public InputStream getResourceAsStream(String path) {
-                    URL res = this.getResource(path);
-                    if (res != null) {
-                        try {
-                            return res.openStream();
-                        } catch (IOException ioe) {
-                            // ignore this one
-                        }
-                    }
-
-                    // no resource
-                    return null;
-
-                }
-            }, null);
-        } catch (NoClassDefFoundError ex) {
-            // Ignore, we don't have the launchpad.api
-        }
     }
 
     protected boolean startFramework(final Framework framework, long timeout, TimeUnit unit) throws BundleException, InterruptedException
@@ -287,43 +151,8 @@ public abstract class AbstractRunner implements Callable<Integer> {
             @Override
             public void frameworkEvent(FrameworkEvent frameworkEvent)
             {
-                if (frameworkEvent.getType() == FrameworkEvent.STARTED || frameworkEvent.getType() == FrameworkEvent.STARTLEVEL_CHANGED) {
-                    if (framework.getState() == Framework.ACTIVE && targetStartlevel > framework.adapt(FrameworkStartLevel.class).getStartLevel()) {
-                        if (install) {
-                            executor.execute(() ->
-                            {
-                                if (waitRequested.get() == 0) {
-                                    try {
-                                        Thread.sleep(500);
-                                    } catch (InterruptedException e) {
-                                        e.printStackTrace();
-                                    }
-                                }
-                                while (waitRequested.get() > 0) {
-                                    try {
-                                        Thread.sleep(500);
-                                    } catch (InterruptedException e) {
-                                        e.printStackTrace();
-                                    }
-                                }
-                                try {
-                                    framework.adapt(FrameworkStartLevel.class).setStartLevel(framework.adapt(FrameworkStartLevel.class).getStartLevel() + 1);
-                                } catch (Exception ex) {
-                                    latch.countDown();
-                                }
-                            });
-                        }
-                        else {
-                            try {
-                                framework.adapt(FrameworkStartLevel.class).setStartLevel(targetStartlevel);
-                            } catch (Exception ex) {
-                                latch.countDown();
-                            }
-                        }
-                    }
-                    else {
-                        latch.countDown();
-                    }
+                if (frameworkEvent.getType() == FrameworkEvent.STARTED) {
+                    latch.countDown();
                 }
             }
         };
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/launchers/FrameworkLauncher.java b/src/main/java/org/apache/sling/feature/launcher/impl/launchers/FrameworkLauncher.java
index fb2dac2..0e251e1 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/launchers/FrameworkLauncher.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/launchers/FrameworkLauncher.java
@@ -25,14 +25,12 @@ import java.util.concurrent.Callable;
 
 import org.apache.commons.lang.text.StrLookup;
 import org.apache.commons.lang.text.StrSubstitutor;
-import org.apache.sling.feature.Artifact;
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.launcher.impl.Main;
 import org.apache.sling.feature.launcher.spi.Launcher;
 import org.apache.sling.feature.launcher.spi.LauncherPrepareContext;
 import org.apache.sling.feature.launcher.spi.LauncherRunContext;
-import org.osgi.framework.Constants;
 
 /**
  * Launcher directly using the OSGi launcher API.
@@ -45,23 +43,6 @@ public class FrameworkLauncher implements Launcher {
             final ArtifactId frameworkId,
             final Feature app) throws Exception {
         context.addAppJar(context.getArtifactFile(frameworkId));
-        ArtifactId api = ArtifactId.fromMvnId("org.apache.sling:org.apache.sling.launchpad.api:1.2.0");
-        Artifact artifact = app.getBundles().getSame(api);
-        if (artifact != null)
-        {
-            api = artifact.getId();
-            context.addAppJar(context.getArtifactFile(api));
-            app.getBundles().removeExact(api);
-            String extra = app.getFrameworkProperties().get(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA);
-            if (extra != null && !extra.trim().isEmpty()) {
-                extra = extra + ",";
-            }
-            else {
-                extra = "";
-            }
-            extra = extra + "org.apache.sling.launchpad.api;version=\"" + api.getOSGiVersion() + "\"";
-            app.getFrameworkProperties().put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, extra);
-        }
     }
 
     /**
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/launchers/FrameworkRunner.java b/src/main/java/org/apache/sling/feature/launcher/impl/launchers/FrameworkRunner.java
index 3f3ebb6..02de5f0 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/launchers/FrameworkRunner.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/launchers/FrameworkRunner.java
@@ -16,12 +16,6 @@
  */
 package org.apache.sling.feature.launcher.impl.launchers;
 
-import org.apache.sling.feature.launcher.impl.Main;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.FrameworkEvent;
-import org.osgi.framework.launch.Framework;
-import org.osgi.framework.launch.FrameworkFactory;
-
 import java.io.File;
 import java.util.List;
 import java.util.Map;
@@ -29,6 +23,12 @@ import java.util.ServiceLoader;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
+import org.apache.sling.feature.launcher.impl.Main;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.launch.Framework;
+import org.osgi.framework.launch.FrameworkFactory;
+
 /**
  * Launcher directly using the OSGi launcher API.
  */
@@ -44,7 +44,7 @@ public class FrameworkRunner extends AbstractRunner {
             final Map<Integer, List<File>> bundlesMap,
             final List<Object[]> configurations,
             final List<File> installables) throws Exception {
-        super(frameworkProperties, configurations, installables);
+        super(configurations, installables);
 
         final ServiceLoader<FrameworkFactory> loader = ServiceLoader.load(FrameworkFactory.class);
         FrameworkFactory factory = null;
diff --git a/src/main/java/org/apache/sling/feature/launcher/spi/LauncherPrepareContext.java b/src/main/java/org/apache/sling/feature/launcher/spi/LauncherPrepareContext.java
index 6d6f02b..840c044 100644
--- a/src/main/java/org/apache/sling/feature/launcher/spi/LauncherPrepareContext.java
+++ b/src/main/java/org/apache/sling/feature/launcher/spi/LauncherPrepareContext.java
@@ -16,11 +16,11 @@
  */
 package org.apache.sling.feature.launcher.spi;
 
-import org.apache.sling.feature.ArtifactId;
-
 import java.io.File;
 import java.io.IOException;
 
+import org.apache.sling.feature.ArtifactId;
+
 /**
  * This is the context for the launcher
  */