Felix Meschberger wrote:
Hi Asaf,

The main problem you would probably face when getting your hands on
something inside the OSGi framework is ClassLoading issues: You will have to
use a class (usually and interface) which is loaded from a class laoder
commoner to both the OSGi framework and the "outer world".

On the other hand, you might want your inside objects make themselves known
to the outside world through - for example - a bridge service, which is
registered by a BundleActivator given to the Felix constructor. This is how
the Equinox HttpService to Servlet bridge works.

To be precise, you don't pass in BundleActivator instances to the Felix constructor, but to Felix.start().

Regardless, this is the appropriate way to embed Felix and get access to the System Bundle context object, because each passed in BundleActivator instance is treated as an extension of the System Bundle, where start() and stop() on each will be invoked when the System Bundle is started and stopped, respectively.

This is the approach for your host application (i.e., the embedding application) to get a context to interact with the framework and any installed bundles/services, such as installing/removing bundles or using/providing services.

All is not roses however, there is a catch. If the host application wants to use services from bundles or provide services to bundles, the service interface classes must come from the class path so that the host application and the bundles use the same class definitions. As Felix points out elsewhere, you can use the org.osgi.framework.system.packages property to export packages from the class path via the System Bundle.

There is one alternative, which is if you just want to use services in the host application, you can instead use reflection to invoke service methods, then the host application does not need access to the class definitions at all.

-> richard



The details - as always - depend on what exactly you want to achieve.

Anyway, I would not hold on to the BundleContext given to an Activator for
this.

Hope this helps a bit.

Regards
Felix

On 4/11/07, Asaf Lahav <[EMAIL PROTECTED]> wrote:

Hi everybody,



I am running Felix as an Embedded OSGi framework.

What would be the best way for components outside of the OSGi boundaries
to
consume OSGi bundles and service references?

In other words, would it be bad design to maintain a singleton instance of
a
context handle I get in my custom activator?

If it is, what would be a better design?



Thanks in advance,

Asaf



Reply via email to