diff --git a/assemblies/features/framework/src/main/filtered-resources/resources/etc/org.apache.karaf.features.cfg b/assemblies/features/framework/src/main/filtered-resources/resources/etc/org.apache.karaf.features.cfg index 8661c0b..6206e7a 100644 --- a/assemblies/features/framework/src/main/filtered-resources/resources/etc/org.apache.karaf.features.cfg +++ b/assemblies/features/framework/src/main/filtered-resources/resources/etc/org.apache.karaf.features.cfg @@ -18,6 +18,15 @@ ################################################################################ # +# Defines if the startlvl should be respected during feature startup. The default value is true. The default +# behavior for 2.x is false (!) for this property +# +# Be aware that this property is deprecated and will be removed in Karaf 4.0. So, if you need to +# set this to false, please use this only as a temporary solution! +# +#respectStartLvlDuringFeatureStartup=true + +# # Comma separated list of features repositories to register by default # featuresRepositories=mvn:org.apache.karaf.features/standard/${project.version}/xml/features,mvn:org.apache.karaf.features/enterprise/${project.version}/xml/features diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java index 4c5663b..b6b91e0 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java @@ -16,7 +16,28 @@ */ package org.apache.karaf.features.internal; -import static java.lang.String.format; +import org.apache.felix.utils.version.VersionRange; +import org.apache.felix.utils.version.VersionTable; +import org.apache.karaf.features.BundleInfo; +import org.apache.karaf.features.Conditional; +import org.apache.karaf.features.Dependency; +import org.apache.karaf.features.Feature; +import org.apache.karaf.features.FeatureEvent; +import org.apache.karaf.features.FeaturesListener; +import org.apache.karaf.features.FeaturesService; +import org.apache.karaf.features.Repository; +import org.apache.karaf.features.RepositoryEvent; +import org.apache.karaf.features.Resolver; +import org.apache.karaf.features.internal.BundleManager.BundleInstallerResult; +import org.apache.karaf.util.collections.CopyOnWriteArrayIdentityList; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleException; +import org.osgi.framework.Constants; +import org.osgi.framework.Version; +import org.osgi.framework.startlevel.BundleStartLevel; +import org.osgi.util.tracker.ServiceTracker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.Closeable; import java.io.File; @@ -30,6 +51,7 @@ import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.Dictionary; import java.util.EnumSet; import java.util.Enumeration; @@ -44,28 +66,7 @@ import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.felix.utils.version.VersionRange; -import org.apache.felix.utils.version.VersionTable; -import org.apache.karaf.features.BundleInfo; -import org.apache.karaf.features.Conditional; -import org.apache.karaf.features.Dependency; -import org.apache.karaf.features.Feature; -import org.apache.karaf.features.FeatureEvent; -import org.apache.karaf.features.FeaturesListener; -import org.apache.karaf.features.FeaturesService; -import org.apache.karaf.features.Repository; -import org.apache.karaf.features.RepositoryEvent; -import org.apache.karaf.features.Resolver; -import org.apache.karaf.features.internal.BundleManager.BundleInstallerResult; -import org.apache.karaf.util.collections.CopyOnWriteArrayIdentityList; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleException; -import org.osgi.framework.Constants; -import org.osgi.framework.Version; -import org.osgi.framework.startlevel.BundleStartLevel; -import org.osgi.util.tracker.ServiceTracker; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import static java.lang.String.format; /** * The Features service implementation. @@ -79,6 +80,7 @@ public class FeaturesServiceImpl implements FeaturesService { private final BundleManager bundleManager; private final FeatureConfigInstaller configManager; + private boolean respectStartLvlDuringFeatureStartup; private long resolverTimeout = 5000; private Set uris; private Map repositories = new HashMap(); @@ -105,6 +107,10 @@ public class FeaturesServiceImpl implements FeaturesService { this.resolverTimeout = resolverTimeout; } + public void setRespectStartLvlDuringFeatureStartup(boolean respectStartLvlDuringFeatureStartup) { + this.respectStartLvlDuringFeatureStartup = respectStartLvlDuringFeatureStartup; + } + public void registerListener(FeaturesListener listener) { listeners.add(listener); for (Repository repository : listRepositories()) { @@ -359,8 +365,8 @@ public class FeaturesServiceImpl implements FeaturesService { * @throws Exception in case of install failure. */ public void installFeatures(Set features, EnumSet {code} +{warning} +Before Karaf 3.0 the start-level was NOT considered during the feature startup, but only the order in which bundles are defined in your feature.xml. Starting with 3.0 the start-level is no considered correctly. If you need to use the old behavior you can uncomment and change the respectStartLvlDuringFeatureStartup variable in org.apache.karaf.features.xml to false. But please be aware that it will be removed in 4.0 and should therefore be used only temporarily. +{warning} + h4. Bundle 'dependency' A bundle can be flagged as being a dependency. Such information can be used by resolvers to compute the full list of bundles to be installed.