Felix Meschberger created FELIX-4792:
----------------------------------------
Summary: [SCR] Handle Errors on component initialization
Key: FELIX-4792
URL: https://issues.apache.org/jira/browse/FELIX-4792
Project: Felix
Issue Type: Bug
Components: Declarative Services (SCR)
Affects Versions: scr-1.8.2
Reporter: Felix Meschberger
Assignee: Felix Meschberger
Fix For: scr-2.0.0
During component initialization the component implementation class is loaded.
If the class or one of its dependencies cannot be properly loaded a
ClassDefNotFound error can be thrown.
This error bubbles up from BundleComponentActivator.initialEnable to the
AbstractExtender.createExtension method, where it is logged. The problem with
this is, that the BundleComponentActivator has registered all the components of
the bundle with the ComponentRegistry but when the error is thrown, the
BundleComponentActivator is not registered in Activator's m_componentBundles
map.
So, when the bundle is stopped, the components registered with the
ComponentRegistry stay registered and will never be cleaned away.
The simple fix is to catch Throwable in the
BundleComponentActivator.initialEnable method and log it. The single component
failing to load will stay inactive but the rest of the component registration
will continue unaffected.
Background: We have a situation where a bundle is compiled against an API
bundle whose exported API is not properly versioned. So the OSGi framework
happily wires the bundle to the older API bundle version but one of the
components fails to load due to missing API.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)