Hi,
We are running a custom distribution based on Karaf 4.2.9. This distribution
also contains the subsystem runtime (as provided by the subsystems Karaf
feature). Most bundles are running in the root subsystem (all the stuff that is
not installed via subsystems), but for some parts we want to run isolated we
have scoped (composite) subsystems.
All this is running fine, but if we stop the container (while a scoped
subsystem is running that is referencing packages from the root subsystem) and
try to start the Karaf container again, we are getting the following error:
2020 09 01 03:50:15#+00#ERROR#Felix##anonymous#FelixStartLevel#####Bundle
org.apache.aries.subsystem.core [148] Error starting
mvn:org.apache.aries.subsystem/org.apache.aries.subsystem.core/2.0.10
(org.osgi.framework.BundleException: Activator start error in bundle
org.apache.aries.subsystem.core [148].)org.osgi.framework.BundleException:
Activator start error in bundle org.apache.aries.subsystem.core [148].
at
org.apache.felix.framework.Felix.activateBundle(Felix.java:2290)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2146)
at
org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1373)
at
org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
at java.lang.Thread.run(Thread.java:836)
Caused by: org.osgi.service.subsystem.SubsystemException:
org.osgi.framework.BundleException: Cannot start bundle org.apache.xbean.finder
[197] because its start level is 80, which is greater than the framework's
start level of 30.
at
org.apache.aries.subsystem.core.internal.StartAction.run(StartAction.java:346)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.aries.subsystem.core.internal.BasicSubsystem.start(BasicSubsystem.java:321)
at
org.apache.aries.subsystem.core.internal.Activator.activate(Activator.java:160)
at
org.apache.aries.subsystem.core.internal.Activator.addingService(Activator.java:274)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
at
org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
at
org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)
at
org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
at
org.apache.aries.subsystem.core.internal.Activator.start(Activator.java:129)
at
org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
at
org.apache.felix.framework.Felix.activateBundle(Felix.java:2240)
... 4 common frames omitted
Caused by: org.osgi.framework.BundleException: Cannot start bundle
org.apache.xbean.finder [197] because its start level is 80, which is greater
than the framework's start level of 30.
at org.apache.felix.framework.Felix.startBundle(Felix.java:2013)
at
org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
at
org.apache.aries.subsystem.core.internal.StartAction.startBundleResource(StartAction.java:565)
at
org.apache.aries.subsystem.core.internal.StartAction.startResource(StartAction.java:593)
at
org.apache.aries.subsystem.core.internal.StartAction.run(StartAction.java:306)
at
org.apache.aries.subsystem.core.internal.StartAction.startSubsystemResource(StartAction.java:627)
at
org.apache.aries.subsystem.core.internal.StartAction.startResource(StartAction.java:591)
at
org.apache.aries.subsystem.core.internal.StartAction.run(StartAction.java:306)
... 17 common frames omitted
|
2020 09 01
03:50:15#+00#ERROR#org.osgi.framework.FrameworkEvent##anonymous#FelixDispatchQueue#####FrameworkEvent
ERRORorg.osgi.framework.BundleException: Activator start error in bundle
org.apache.aries.subsystem.core [148].
at
org.apache.felix.framework.Felix.activateBundle(Felix.java:2290)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2146)
at
org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1373)
at
org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
at java.lang.Thread.run(Thread.java:836)
Caused by: org.osgi.service.subsystem.SubsystemException:
org.osgi.framework.BundleException: Cannot start bundle org.apache.xbean.finder
[197] because its start level is 80, which is greater than the framework's
start level of 30.
at
org.apache.aries.subsystem.core.internal.StartAction.run(StartAction.java:346)
at java.security.AccessController.doPrivileged(Native Method)
at
org.apache.aries.subsystem.core.internal.BasicSubsystem.start(BasicSubsystem.java:321)
at
org.apache.aries.subsystem.core.internal.Activator.activate(Activator.java:160)
at
org.apache.aries.subsystem.core.internal.Activator.addingService(Activator.java:274)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:870)
at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
at
org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
at
org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318)
at
org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261)
at
org.apache.aries.subsystem.core.internal.Activator.start(Activator.java:129)
at
org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
at
org.apache.felix.framework.Felix.activateBundle(Felix.java:2240)
... 4 common frames omitted
Caused by: org.osgi.framework.BundleException: Cannot start bundle
org.apache.xbean.finder [197] because its start level is 80, which is greater
than the framework's start level of 30.
at org.apache.felix.framework.Felix.startBundle(Felix.java:2013)
at
org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
at
org.apache.aries.subsystem.core.internal.StartAction.startBundleResource(StartAction.java:565)
at
org.apache.aries.subsystem.core.internal.StartAction.startResource(StartAction.java:593)
at
org.apache.aries.subsystem.core.internal.StartAction.run(StartAction.java:306)
at
org.apache.aries.subsystem.core.internal.StartAction.startSubsystemResource(StartAction.java:627)
at
org.apache.aries.subsystem.core.internal.StartAction.startResource(StartAction.java:591)
at
org.apache.aries.subsystem.core.internal.StartAction.run(StartAction.java:306)
... 17 common frames omitted
|
The bundle that fails to start is a random bundle from the root subsystem. As a
consequence the subsystem runtime doesn't start.
I have analyzed the code and it seems that the subsystem runtime tries to start
all bundles from the root subsystem when it starts up. However as the subsystem
runtime has a start level of 30 and most bundles in the root subsystem have a
start level of 80 and obviously Felix refuses the startup of the bundles at
that time.
For testing I have copied the subsystems feature into a subsystems-patched
feature with the only difference that I removed the start-level="30" attribute
from the three bundles directly included in this feature (Aries subsystem-api,
subsystem-core and the Karaf subsystem-core bundle). As a result the
subsystem-core bundle was started at start level 80, and the issue did not
occur anymore.
Is there a reason why these bundles are started with start level 30?
Best regards
Stephan