Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Strategy

Options

Pros

Cons

Note

Build-time conversion

Using tools (such as maven-bundle-plugin) to convert plain jars into OSGi bundles

  • Ready-to-use bundles for any OSGi runtime
  • No addtional runtime overhead to convert the jars
  • More control on how packages are imported/exported
  • Extra steps are required to build the bundles first and it increases the complexibilty for development testing inside an IDE such as Eclipse
  • Two sets of jars are created
  • Maven build uses different jars than the OSGi bunldes which are not published into maven

Maven Bundle Plugin:

http://felix.apache.org/site/maven-bundle-plugin-bnd.html\\\\

Felix Commons: http://felix.apache.org/site/apache-felix-commons.html
Ecipse Orbit: http://www.eclipse.org/orbit/
Spring DM Repo: http://static.springframework.org/osgi/docs/1.1.1/reference/html/appendix-osgi-repo.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())

 

  • Tuscany needs to install the bundles
  • Performance impact

 

 

Add a hook to the OSGi runtime to wrap the jar (such as

 

 

Equinox Hooks:
http://wiki.eclipse.org/index.php/Adaptor_Hooks http://www.eclipsecon.org/2008/sub/attachments/Equinox_Framework_How_to_get_Hooked.pdf

Hybrid conversion

Build-time will generate the META-INF/MANIFEST.MF as a side file
Runtime will wrap the 3rd party jar with the 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.

...