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