> Import-Package: org.osgi.framework;version="1.3.0"
This actually is [1.3.0,infinity), so it is not depending on a
point version.

Kind regards,

        Peter Kriens



On 4 jun 2008, at 01:09, Mirko Jahn wrote:

Hi Rajini,

this is actually my most favorite topic ;-) So, please allow me to
elaborate a little bit on that one.

As a starter, I can highly recommend the Eclipse wiki on that [1] and
maybe [2]. If you want to safe you some time wrapping 3rd party
libraries, first take a look at the following repositories, which all
contain several versions of 3rd party libraries [3], [4] and [5].

Further more, I would strongly recommend you to design your
dependencies only on package level with version ranges on major
versions like the following example illustrates (and never on the
service segment):
Import-Package: org.osgi.framework;version="[1.3.0,2.0.0)"
In this very example, if you don't use the added functionality in
1.3.0, you should even use:
Import-Package: org.osgi.framework;version="[1.2.0,2.0.0)"
Always use the smallest compatible version!

Never depend on a single version and all new upcoming versions,
because this might break, without you noticing it:
Import-Package: org.osgi.framework;version="1.3.0"
Actually your unit tests should ensure that this won't happen, but
this way you're on the safe side.

When you export packages, always provide the version and the uses
clause, if necessary!
Import your exports is actually considered a best practice and helps
your container to create the correct class space [6] (I actually
blogged about oddities with fragments recently[7] slightly touching
the import/export pattern).

If you're very nice and are providing a special "implementation" of a
well known API, which is exported (like SLF4J for instance), you event
might provide a property containing you as vendor, so one can bind an
import not only on the API, but also on the vendor if necessary.

Taking all this into account, you should be pretty safe. The container
takes care of the rest and ideally you will not need to uninstall any
version! It should work just magically :-)

Bundle versions are now no longer that important, but should still
follow the guidlines outlined in [1]. Especially if the bundle
provides services, but no actual API/packages. Version changes are
then mostly reflected in the version of the bundle itself.

The general question on how to bundle APIs/SPIs and implementations
were discussed just yesterday on this list as well and I can certainly
recommend you the read.

It is kinda late here in Germany, so I hope I didn't forget anything.
If so, OSGi experts out there, please don't hesitate to correct me or
add stuff I didn't mention.

Cheers,
Mirko

Btw.: Adding manifest headers won't work for all libraries. Some have
to be changed in order to work in OSGi. (F.i. if they rely on the
ContextClassLoader or use Class.forName(className)) Further issues
with wrapping 3rd party libraries have also extensively discussed on
this list, so a search might bring you even more insight, what might
be involved here.
References:
[1] http://wiki.eclipse.org/index.php/Version_Numbering
[2] http://wiki.eclipse.org/Adding_Bundles_to_Orbit
[3] http://download.eclipse.org/tools/orbit/downloads/
[4] http://www.osgi.org/Repository/HomePage
[5] http://www.springsource.com/repository
[6] http://www.osgi.org/blog/2007/04/importance-of-exporting-nd-importing.html
[7] http://osgi.mjahn.net/2008/03/13/half-bundle-half-jar-–-the- nature-of-fragment-a-blessing-or-a-curse/

On Tue, Jun 3, 2008 at 11:10 PM, Rajini Sivaram
<[EMAIL PROTECTED]> wrote:


Hello,

Are there guidelines that would be useful in defining version constraints when OSGi-enabling 3rd party libraries? Typically, should constraints be made as broad as possible to enable flexible resolution, or should they be made as narrow as possible to enable multiple versions to coexist? The OSGi specification says "the import should be as unconstrained as possible to allow the resolver maximum flexibility" in the context of importing exported packages. But doesn't too unconstrained also mean that multiple variants cannot execute side-by-side?

To add some context to the question, we are looking at OSGi- enabling Tuscany which uses around 150 3rd party libraries. Many of these libraries are likely to be shared with applications, and in some cases, applications may want to use a different version of a library and share it with Tuscany, and in some other cases applications may want to use a different version of a 3rd party library from Tuscany without any sharing. Is there a recommended versioning technique which would do the right thing in a vast majority of cases? Is there any way that we can completely avoid applications ever having to uninstall Tuscany's version of 3rd party bundles, regardless of what sharing/isolation they require?


Thank you...

Regards,

Rajini
_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev

_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev

_______________________________________________
OSGi Developer Mail List
[email protected]
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to