Whilst initially found wanting, a number of projects now exist to address this; including the SIGIL eclipse plug-in which Paremus recently contributed to the Apache Felix project, (SIGIL leveraging Peter Krien's BND tool).
In contrast, the issue of dependency management in Production is less immediately obvious, its impact more profound and generally ignored.
* Will aspects of the runtime environment affect the runtime dependencies within the application?
* Will applications be isolated from each other, or might they run within the same JVM?
* How are the released artifacts subsequently managed in the production environment with respect to ongoing bundle dependency and version management?
Echoing Kirk's concerns, Robert Dunne started his presentation at OSGi DevCon Europe with the observation that; 'whilst modularity was good, its benefits are often undermined by dependency and configuration complexity'. The subject of Robert's presentation? The Paremus Nimble Resolver, which is our response to the concerns posed by Kirk.
Nimble is a high performance runtime dependency resolver. To deploy a composite application to a Nimble enabled runtime (i.e. the Paremus Service Fabric) one specifies:
* The root component of the artifact.
* And a set of associated policies and constraints.
Nimble then does the rest.
Presented with the 'root', Nimble dynamical constructs the target composite; ensuring that the structural dependencies are resolved in a manner consistent with both organizational policies and the runtime environment within which it finds itself.
Nimble's OSGi capabilities include:
* Fragment attachment policies.
* Optional import policies.
* Import version range narrowing.
* The ability to resolve dependencies on extender bundles (DS, 'classic' Spring, Spring DM, iPOJO).
With Nimble policies allowing:
* The configuration of selected extensions.
* Flexible constraint requirement -> capability matching.
* The ability to configure optional dependency resolution behaviors.
Not just OSGi, Nimble is a generic artifact resolver with a plug-able architecture. Any artifact type may be supported, with support currently available for:
* OSGi Bundles
* POJO's, 'classic' Spring & Spring DM
* WAR
* Configurations.
A Nimble enable runtime quite literally dynamically assembles all required runtime application and infrastructure service dependencies around the deployed business components! Specify a WAR artifact and Nimble will instantiate the appropriate Servlet engine dictated by runtime policy attached to the WAR; i.e. Tomcat or Jetty Sir? Specify a 'Configuration', and Nimble responds by installing the target of the configuration, and of-course its dependencies.