[ 
https://issues.apache.org/jira/browse/FELIX-2822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12992765#comment-12992765
 ] 

Richard S. Hall edited comment on FELIX-2822 at 2/9/11 10:55 PM:
-----------------------------------------------------------------

After thinking about it, I realize that the system bundle should be handled 
differently than other bundles when the framework is stopped. Normal bundles 
are unresolved and effectively discarded. The system bundle was being treated 
the same way, but this was causing a problem since the framework instance can 
be reused.

To avoid this situation, since Felix extends BundleImpl, I just overrode 
BundleImpl.close() to do nothing. Thus, when the framework stops, all bundles 
except the system bundle are thrown away. This means that once the framework is 
started, the system bundle continues to exist and stays in the RESOLVED state 
forever, even after the framework stops.

This makes sense, because if you reuse the framework instance then the system 
bundle doesn't need to be resolved again since its configuration cannot change 
from one session to the next.

      was (Author: rickhall):
    After thinking about it, I realize that the system bundle should be handled 
differently than other bundles when the framework is stopped. Normal bundles 
are unresolved and effectively discarded. The system bundle was being treated 
the same way, but this was causing a problem since the framework instance can 
be reused.

To avoid this situation, since Felix extends BundleImpl, I just overrode 
BundleImpl.close() to do nothing. Thus, when the framework stops all bundles 
except the system bundle are thrown away. This means that once the framework is 
started, the system bundle continues to exist and stays in the RESOLVED state 
forever, even after the framework stops.

This makes sense, because if you reuse the framework instance then the system 
bundle doesn't need to be resolved again since it configuration cannot change 
from one run to the next.
  
> [Framework] System bundle module's state not reset when framework restarted 
> leading to NPE
> ------------------------------------------------------------------------------------------
>
>                 Key: FELIX-2822
>                 URL: https://issues.apache.org/jira/browse/FELIX-2822
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: framework-3.0.8
>            Reporter: Richard S. Hall
>            Assignee: Richard S. Hall
>            Priority: Minor
>             Fix For: framework-3.2.0
>
>
> Normally when a bundle is refreshed, we throw away its module and then 
> recreate it, so we are always starting with a fresh module. For the system 
> bundle, when we stop and restart the framework, the system bundle module is 
> reused. When the framework is restarted, the system bundle module state is 
> still resolved, so when we re-resolve it in Framework.init(), it doesn't get 
> empty wires injected into it since the resolver thinks it's resolved. This 
> leads to subsequent NPEs when the resolver tries to wire later modules to the 
> system bundle.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to