Generalize support for framework restart and update
---------------------------------------------------

                 Key: SLING-1888
                 URL: https://issues.apache.org/jira/browse/SLING-1888
             Project: Sling
          Issue Type: Improvement
          Components: Launchpad
    Affects Versions:  Launchpad Base 2.2.0
            Reporter: Felix Meschberger


Currently, the Sling launchpad implements controlled framework restart and 
update by extending the Felix framework implementation class overwriting the 
update() and update(InputStream) methods. This works fine with Apache Felix. 
But it fails supporting other frameworks like Equinox where overwriting the 
system bundle implementation is not as easy as in Apache Felix.

The solution might be to leverage the Bundle FindHook interface proposed for 
OSGi R4.3:

    find(org.osgi.framework.BundleContext context, 
Collection<org.osgi.framework.Bundle> bundles)

This hook is called whenever the BundleContext.getBundles() or 
BundleContext.getBundle(long) method is called. It allows the hook implementor 
to limit the returned bundles or otherwise modify the collection of bundles 
returned.

Our implementation would check whether the system bundle (bundle ID 0) is 
amongst the returned bundles. If so, a wrapper is created which overwrites the 
update() and update(InputStream) methods to actually implement Sling's 
Launchpad functionality:

    * Restart the framework in new class loader upon update()
    * Update the framework and restart it in a new class loader upon 
update(InputStream)

This would allow us to also fully support Equinox as a framework to launch.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to