Peter Penzov
Peter Penzov

Reputation: 1658

Order of deployment of bundles

I have a question about OSGI bundles deployment.

I have 7 bundles which I need to deploy in a strict order otherwise I get no class found error. Part of the bundles are used as static libraries, part of them export OSGI services.

In OSGI applications how this problem is usually solved?

Upvotes: 3

Views: 4612

Answers (3)

Alessandro Da Rugna
Alessandro Da Rugna

Reputation: 4695

If I understand your issue correctly, it is just a matter of providing the correct dependencies chain to be resolved by OSGi.
Your libraries should export packages that your services will import.

If BundleA requires classes from BundleB and OtherBundle, adding Import-Package and Export-Package metadata in the MANIFEST.MF of all bundles should be sufficient.

BundleA MANIFEST.MF

Import-Package: my.required.package.from.b, other.package.in.b, other.package

BundleB MANIFEST.MF

Export-Package: my.required.package.from.b, other.package.in.b

OtherBundle MANIFEST.MF

Export-Package: other.package

Then install all bundles, they will be in INSTALLED state. Start the main one (BundleA in this example). OSGi will resolve all dependencies (just be careful not to have cycles) and bundles will go in RESOLVED state (dependencies available) and then ACTIVE.

You don't need to manually add those dependencies, tools like maven-bundle-plugin can be easily configured.

Also this question What is the natural start order for package-dependent OSGI bundles may be useful.

Upvotes: 3

Flávio Ferreira
Flávio Ferreira

Reputation: 183

I agree that the best approach, as Neil Bartlett mentioned, is avoiding it. However sometimes ordering the start of the bundles is necessary. Even using Equinox or Felix you can have it using bundle start-level. It will ensure that your bundles will start in a specific order.

"A start level is associated with every bundle. The start level is a positive integer value that controls the order in which bundles are activated/started. Bundles with a low start level are started before bundles with a high start level. Hence, bundles with the start level, 1, are started first and bundles belonging to the kernel tend to have lower start levels, because they provide the prerequisites for running most other bundles." - Red Hat JBoss Fuse Documentation

Hope it helps.

Upvotes: 1

Neil Bartlett
Neil Bartlett

Reputation: 23948

This problem is solved by not solving it (at least, not in the way you have asked).

That is: don't have bundles that must to install/start in a strict order! This implies your bundles are very poorly designed. Instead, change your bundles so that they can start in any order.

If you have difficulties with this then please modify your question so that we can see why you think you need the start ordering.

Upvotes: 5

Related Questions