OSGi Integration
Layers for Tuscany/SCA OSGi integration
Assembling Tuscany runtime from OSGi bundles for tuscany modules and 3rd party jars
OSGi providing modularity of the Tuscany runtime itself (business as usual for OSGi and not a programming model relationship). Package tuscany runtime modules and 3rd party dependencies as OSGi bundles, and use an OSGi runtime such as Felix or Equinox to install/run these bundles. This feature enables the assembly of Tuscany runtime as OSGi bundles and it formalizes the SPI contracts (class visibility across modules) using the OSGi Import-Package/Export-Package headers.
Objectives:
- Formalize the SPI contracts and enforce the class dependencies across modules
- Provide versioning and isolation support that so different tuscany extensions can depend on different versions of the same library
- Provide dynamic lifecycle for extensions, install/uninstall/start/stop a module
Key Modules:
- tuscany-extensibility-osgi: https://svn.apache.org/repos/asf/tuscany/java/sca/modules/extensibility-osgi (Based on Felix for testing)
- tuscany-extensibility-eclipse: https://svn.apache.org/repos/asf/tuscany/java/sca/modules/extensibility-equinox (based on Equinox)
These two modules enable the META-INF/services provider pattern to work with the OSGi bundles.
- tuscany-node2-launcher-osgi: https://svn.apache.org/repos/asf/tuscany/java/sca/modules/node2-launcher-osgi
This special launcher will discover tuscany bundles and 3rd party jars on paths defined by TUSCANY_HOME and TUSCANY_PATH system properties/environment variables. It will start an embedded OSGi runtime (Felix, Equinox or other), install (or wrap plain jars into) bundles, and use the SCA Node/Domain APIs to create/launch SCA nodes or domain manager.
The following testcase demonstrates the usage of this launcher to run HelloWorld composite and SCA Domain Manager:
/tuscany-node2-launcher-osgi/src/test/java/org/apache/tuscany/sca/node/osgi/launcher/NodeLauncherTestCase.java
Using OSGi bundles as SCA contributions
Package application artifacts into OSGi bundles and contribute them to SCA domain as SCA contributions
- tuscany-contribution-osgi: https://svn.apache.org/repos/asf/tuscany/java/sca/modules/contribution-osgi
OSGi bundles as SCA contributions (OSGi providing modularity for Java implementation types (e.g. implementation.osgi and implementation.java)).
Implementing SCA components using OSGi bundles
Support OSGi bundle as a component implementation type for Tuscany/SCA, expose OSGi services as SCA services and inject references to OSGi services
- tuscany-implementation-osgi: https://svn.apache.org/repos/asf/tuscany/java/sca/modules/implementation-osgi
OSGi bundles as an implementation technology for SCA components (implementation.osgi). Here OSGi services and references are mapped to SCA services/references and can be integrated with other
implementation technologies (e.g. BPEL, POJO, Groovy, etc...) and invoked or can invoke over the various SCA bindings. This is business as usual for SCA, which is designed to enable the assembly of
heterogeneous implementation technologies.
Running environment
- JSE with embedded OSGi runtime such as Eclipse Equinox and Apache Felix
- Running inside Eclipse workspace
- Maven surefire plugin for testing
- External OSGi runtime such as Eclipse or Felix Shell
- Other environment such as JEE (Web Container, EJB container)