|Re: [equinox-dev] Re: Adding to the framework exported libraries?|
Gunnar's suggestions may be the better approach but will require you to place more of your "outer" application into real bundles. That is something you may not be in the position to do.
I was suggesting a system.bundle fragment as a way to add exports to the system.bundle without having to override the default org.osgi.framework.systempackages property which is set by the framework according the the execution environment you are on. Basically this would be a shell fragment that would not contain any code. Instead it is just exposing more packages that are available from the host's classloader by exporting them it the fragment's bundle manifest. The META-INF/MANIFEST.MF for the system.bundle fragment would look something like this ...
Export-Package: my.app.pkg1, my.app.pkg2
This fragment bundle is simply adding the exports my.app.pkg1 and my.app.pkg2 to the exports of the system.bundle (org.eclispe.osgi). This will allow other bundles to import the packages. As long as the classloader of the framework has access to the packages it will be able to load the classes for other bundles. This fragment bundle would be installed just like the other bundles you are installing into the framework.
Gunnar Wagenknecht <gunnar@xxxxxxxxxxxxxxx >
Sent by: equinox-dev-bounces@xxxxxxxxxxx
02/12/2007 12:44 AM
Please respond to
Equinox development mailing list <equinox-dev@xxxxxxxxxxx>
To equinox-dev@xxxxxxxxxxx cc Subject [equinox-dev] Re: Adding to the framework exported libraries?
> Hi Tom, thanks for the suggestion. Only reason i don't think this will
> work (and maybe i'm wrong?) is that i need my host application to expose
> instances (services) to the bundles, so for example my host application
> creates in instance of FooService, and then registers it with the root
> BundleContext of the Equinox framework. However, unless i somehow tell
> Equinox that the package is available from the host (parent classloader)
> it won't let any bundle load that depends on this package. So far i'm
> not seeing how Fragment Bundles can solve this problem, because they
> seem like they need to be full bundles and not just passed in, but there
> could be some API or technique i'm not familiar with?
The system bundle is "org.eclipse.osgi". It exports the system packages.
Fragments contribute to the classpath of their bundle host. Thus, if you
create a fragment to "org.eclipse.osgi" you can add the packages from
your application to the set of exported packages of the system bundle,
which makes them available to all bundles.
For registering your services from the host application I suggest
creating a bundle that is started when the framework is started. This
bundle can register any OSGi services, etc. It could be also the
fragment you created above.
equinox-dev mailing list
equinox-dev mailing list