See comments below.

Lin

On Thu, Mar 12, 2009 at 1:51 AM, Jarek Gawor <jga...@gmail.com> wrote:
> The point I was trying to make is that with Geronimo the classloader
> hierarchy is pretty much created/setup at build time while in osgi if
> you are using Import-Package is at runtime. Here's an example. Say, we
> have configuration A that has dependency on configuration B and C.
> Both B and C have dependency on commons-logging.jar. In Geronimo it
> would be very likely that you would run into ClassCastExceptions with
> such configuration. And the only way to fix it, it would be to create
> a new configuration D that would have the dependency on
> commons-logging.jar and B and C configurations would have to be
> updated to have dependency on D.
> In osgi world, bundle B and C would define a Import-Package on the
> commons-logging package and the osgi system at runtime would figure
> out that B and C must be wired to the same bundle that provides the
> commons-logging library.
> So classloader-per-jar is important and so is the runtime dependency
> resolution to make sure that the same library is not loaded from two
> different classloaders within the hierarchy.

Here is my understanding on this scenario.  First, you don't really
need to develop a bundle
for commons-logging package(s).  Bundle B and C can just have the
commons-logging packages
on their Import-Package attribute, with the specific versions they
need, for example:

Import-Package = \
        org.apache.commons...;version=1.1, \
        *
When bundle A have Bundle B and C's APIs listed on Bundle A's
Import-Package attribute, it won't see the commons-logging package at
all.  It would only see the package if Bundle B/C exports the
commons-logging package on its Export-Package attribute, and Bundle A
has commons-logging package explicitly on its Import-Package
attribute.


>
> <random thoughts>
> Hmm... I'm not sure what would happen if B and C used Require-Bundle
> and specify two different bundle names for libraries that provide the
> commons-logging library. Would we would see ClassCastExceptions (same
> as in Geronimo right now) or would osgi just pick one of these bundles
> as the default?
>

Not sure about Require-Bundle.  I personally has never used it and I
never see it is being used in the OSGi repo.  Require-Bundle may not
offer the level of control that the Import-Package provides but it is
probably a lot harder to come up with the right Import-Package lists.
 I think this scenario should work just fine if using Import-Package.

Reply via email to