...
Strategy | Options | Pros | Cons | Note |
---|---|---|---|---|
Build-time conversion | Using tools (such as maven-bundle-plugin) to convert plain jars into OSGi bundles |
|
| Maven Bundle Plugin: http://felix.apache.org/site/maven-bundle-plugin-bnd.html\\\\ Felix Commons: http://felix.apache.org/site/apache-felix-commons.html |
| Use already-converted 3rd party bundles from Spring DM, Felix Common or Eclipse Orbit |
| Not all 3rd party jars are available in OSGi bundles |
|
Runtime converstion | Before the jar is installed (BundleContext.installBundle()) |
|
|
|
| Add a hook to the OSGi runtime to wrap the jar (such as |
|
| Equinox Hooks: |
Hybrid conversion | Build-time will generate the META-INF/MANIFEST.MF as a side file |
|
|
|
Virtual Libary Bundle for 3rd party jars
1) The launcher looks for runtime JARs and class folders in a Tuscany
distribution install or just the classpath entries used to start it.
2) Then it looks for OSGi Bundle-SymbolicName entries in their manifests
to determine if they are OSGi bundles or just regular JARs.
3) It creates a single in-memory bundle for these regular JARs, in an
Equinox BundleFileFactoryHook:
...
That step is fast as it just writes a Manifest to a byte[] in memory,
with no need to copy the JARs and re-package them, as the manifest
simply references their actual locations.
4) Bundle tuscany-extensibility-equinox contains a DynamicImport *,
enabling ServiceDiscovery to access the 3rd party packages.
5) Instead of Thread.getContextClassLoader(), Tuscany code must use
Class.forName() from modules that have the proper imports, and the
Tuscany ServiceDiscovery to discover META-INF/services.
...