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

Reply via email to