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)

Reply via email to