On 18/04/2008, Bhaskar Maddala <[EMAIL PROTECTED]> wrote: > > Awesome, Thank you, I probably should have cheated and asked sooner ;)
just to wrap up this thread, you can use the Bnd tool to create bundles: http://aqute.biz/Code/Bnd and it will add the "uses" constraints for you by analyzing the bytecode. ( which is much, much easier than trying to calculate this manually :) HTH -Bhaskar > > On Fri, Apr 18, 2008 at 8:47 AM, Angelo van der Sijpt > > <[EMAIL PROTECTED]> wrote: > > > On 18 Apr 2008, at 14:23, Bhaskar Maddala wrote: > > > > > > > > > > However the uses directive in the absence of versions is still a bit > > > of a black hole. Going back to the original example > > > > > > A: Export-Package : foo > > > D: Export-Package : foo > > > C : Import-Package: foo, bar > > > B: Import-Package: foo > > > Export-Package: bar; uses:="foo" > > > > > > Is the choice of 'foo' in the 'absence' of the uses directive left to > > > the implementation? > > > > > > > In some sense, the foo which C and B get wired to are up to the > > implementation. However, section 3.7 of the spec does give some rules > for > > this: > > - A resolved exporter must be preferred over an unresolved exporter. > > - An exporter with a higher version is preferred over an exporter with > a > > lower version. > > - An exporter with a lower bundle ID is preferred over a bundle with a > > higher ID. > > > > If we apply this to our scenario (leaving out the uses constraint), > this > > will probably go right, even in different installation orders: one of A > or D > > will be resolved first, so both C and B will be wired to the same > bundle. > > However, with a little creativity, we can come up with an installation > order > > in which C and B will be wired to different versions of foo. For > example: > > install D > > install and start (or at least resolve) A > > install and resolve B (this will now get wired to A, since that is a > > resolved exporter) > > resolve D > > install and resolve C (this will now get wired to D, since that has a > lower > > bundle ID) > > > > Note that the uses constraints states something like "If you want to > use > > stuff from this package bar I export, make sure you use the same foo as > I > > do". > > > > > > > > > Which might explain why I would not get any ClassCastException as the > > > implementation I tried (Knopflerfish) might have been picking the > > > correct foo class, I will post a message there too. > > > > > > > True, I don't believe this scenario can really go wrong when deploying > all > > bundles at once. When you leave out the uses constraint, it still goes > right > > 'by accident'. > > > > Angelo > > > > > > ----------------------------- > > Angelo van der Sijpt > > Software Engineer iQ Products > > ----------------------------- > > +31-6-23218231 > > [EMAIL PROTECTED] > > www.luminis.nl > > K.v.k. Centraal Gelderland: 09 16 28 93 > > ----------------------------- > > > > > > > > _______________________________________________ > > OSGi Developer Mail List > > osgi-dev@mail.osgi.org > > https://mail.osgi.org/mailman/listinfo/osgi-dev > > > _______________________________________________ > OSGi Developer Mail List > osgi-dev@mail.osgi.org > https://mail.osgi.org/mailman/listinfo/osgi-dev > -- Cheers, Stuart
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev