From a9975759731217df15a517888948e2b041762d8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Baptiste=20Onofr=C3=A9?= Date: Sat, 21 Sep 2019 18:51:31 +0200 Subject: [PATCH] [KARAF-6224] Be sure configuration is loaded in early stage of activator start --- .../http/core/internal/osgi/Activator.java | 4 ++++ .../karaf/kar/internal/osgi/Activator.java | 4 ++++ .../log/core/internal/osgi/Activator.java | 4 ++++ .../karaf/management/internal/Activator.java | 4 ++++ .../karaf/profile/impl/osgi/Activator.java | 4 ++++ .../org/apache/karaf/shell/ssh/Activator.java | 4 ++++ .../karaf/util/tracker/BaseActivator.java | 20 +++++++++++++++++++ 7 files changed, 44 insertions(+) diff --git a/http/src/main/java/org/apache/karaf/http/core/internal/osgi/Activator.java b/http/src/main/java/org/apache/karaf/http/core/internal/osgi/Activator.java index 6be368ba05f..bcc7a87ec24 100644 --- a/http/src/main/java/org/apache/karaf/http/core/internal/osgi/Activator.java +++ b/http/src/main/java/org/apache/karaf/http/core/internal/osgi/Activator.java @@ -65,6 +65,10 @@ protected void doStart() throws Exception { return; } + if (!ensureStartupConfiguration("org.apache.karaf.http")) { + return; + } + final ServletEventHandler servletEventHandler = new ServletEventHandler(); register(ServletListener.class, servletEventHandler); diff --git a/kar/src/main/java/org/apache/karaf/kar/internal/osgi/Activator.java b/kar/src/main/java/org/apache/karaf/kar/internal/osgi/Activator.java index 940541ea2d1..73f96f937cc 100644 --- a/kar/src/main/java/org/apache/karaf/kar/internal/osgi/Activator.java +++ b/kar/src/main/java/org/apache/karaf/kar/internal/osgi/Activator.java @@ -42,6 +42,10 @@ protected void doStart() throws Exception { return; } + if (!ensureStartupConfiguration("org.apache.karaf.kar")) { + return; + } + boolean noAutoRefreshBundles = getBoolean("noAutoRefreshBundles", false); boolean noAutoStartBundles = getBoolean("noAutoStartBundles", false); String karStorage = getString("karStorage", System.getProperty("karaf.data") + File.separator + "kar"); diff --git a/log/src/main/java/org/apache/karaf/log/core/internal/osgi/Activator.java b/log/src/main/java/org/apache/karaf/log/core/internal/osgi/Activator.java index f47b456aa43..69aa9249f25 100644 --- a/log/src/main/java/org/apache/karaf/log/core/internal/osgi/Activator.java +++ b/log/src/main/java/org/apache/karaf/log/core/internal/osgi/Activator.java @@ -46,6 +46,10 @@ protected void doStart() throws Exception { return; } + if (!ensureStartupConfiguration("org.apache.karaf.log")) { + return; + } + int size = getInt("size", 500); String pattern = getString("pattern", "%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n"); String errorColor = getString("errorColor", "31"); diff --git a/management/server/src/main/java/org/apache/karaf/management/internal/Activator.java b/management/server/src/main/java/org/apache/karaf/management/internal/Activator.java index 187d8a6c21b..d6ea93dff61 100644 --- a/management/server/src/main/java/org/apache/karaf/management/internal/Activator.java +++ b/management/server/src/main/java/org/apache/karaf/management/internal/Activator.java @@ -70,6 +70,10 @@ protected void doStart() throws Exception { return; } + if (!ensureStartupConfiguration("org.apache.karaf.management")) { + return; + } + EventAdminLogger logger = null; if (getBoolean("audit.eventadmin.enabled", true)) { try { diff --git a/profile/src/main/java/org/apache/karaf/profile/impl/osgi/Activator.java b/profile/src/main/java/org/apache/karaf/profile/impl/osgi/Activator.java index fa1e925665e..6c3bd6cf54e 100644 --- a/profile/src/main/java/org/apache/karaf/profile/impl/osgi/Activator.java +++ b/profile/src/main/java/org/apache/karaf/profile/impl/osgi/Activator.java @@ -36,6 +36,10 @@ public class Activator extends BaseActivator implements ManagedService { @Override protected void doStart() throws Exception { + if (!ensureStartupConfiguration("org.apache.karaf.profile")) { + return; + } + Path root = Paths.get(getString("profilesDirectory", System.getProperty("karaf.home") + "/profiles")); ProfileServiceImpl service = new ProfileServiceImpl(root); register(ProfileService.class, service); diff --git a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java index 000af3cf3ca..292322af101 100644 --- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java +++ b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java @@ -93,6 +93,10 @@ protected void doStart() throws Exception { return; } + if (!ensureStartupConfiguration("org.apache.karaf.shell")) { + return; + } + RegexCommandLoggingFilter filter = new RegexCommandLoggingFilter(); filter.setPattern("ssh (.*?)-P +([^ ]+)"); filter.setGroup(2); diff --git a/util/src/main/java/org/apache/karaf/util/tracker/BaseActivator.java b/util/src/main/java/org/apache/karaf/util/tracker/BaseActivator.java index eb8644f860c..de39cb0844c 100644 --- a/util/src/main/java/org/apache/karaf/util/tracker/BaseActivator.java +++ b/util/src/main/java/org/apache/karaf/util/tracker/BaseActivator.java @@ -16,6 +16,7 @@ */ package org.apache.karaf.util.tracker; +import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; @@ -38,6 +39,8 @@ import java.util.stream.StreamSupport; import org.osgi.framework.*; +import org.osgi.service.cm.Configuration; +import org.osgi.service.cm.ConfigurationAdmin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -144,6 +147,23 @@ protected void doStop() { } } + protected boolean ensureStartupConfiguration(String configId) throws IOException { + if (this.configuration != null) { + return true; + } + ConfigurationAdmin configurationAdmin = getTrackedService(ConfigurationAdmin.class); + if (configurationAdmin != null) { + Configuration configuration = configurationAdmin.getConfiguration(configId); + Dictionary properties = (configuration == null) ? null : configuration.getProperties(); + + if (properties != null) { + this.configuration = properties; + return true; + } + } + return false; + } + /** * Called in {@link #doOpen()}. *