= Aries Application Modules

Below are the list of bundles in the format of mavenBundle(groupId, artifactId) required if using Apache Aries application module.

== Core Runtime bundles

mavenBundle("org.apache.aries.blueprint", "org.apache.aries.blueprint" ), + mavenBundle("org.apache.aries", "org.apache.aries.util" ), + mavenBundle("org.apache.felix", "org.apache.felix.bundlerepository"), + mavenBundle("org.apache.aries.application","org.apache.aries.application.resolver.obr"), + mavenBundle("org.apache.aries.application","org.apache.aries.application.install" ), + mavenBundle("org.apache.aries.application","org.apache.aries.application.api" ), + mavenBundle("org.apache.aries.application","org.apache.aries.application.management" ), + mavenBundle("org.apache.aries.application","org.apache.aries.application.utils" ), + mavenBundle("org.apache.aries.application","org.apache.aries.application.modeller"), + mavenBundle("org.apache.aries.application","org.apache.aries.application.default.local.platform"), + mavenBundle("org.apache.aries.application","org.apache.aries.application.noop.platform.repo"), <-- This module no longer exists in 0.3.1-SNAPSHOT + mavenBundle("org.apache.aries.application","org.apache.aries.application.noop.postresolve.process"), <-- This module no longer exists in 0.3.1-SNAPSHOT + mavenBundle("org.apache.aries.application","org.apache.aries.application.deployment.management"), +

Besides the above bundles, either the non-isolated runtime or isolated runtime is also required.

== Non-isolated Runtime

mavenBundle("org.apache.aries.application","org.apache.aries.application.runtime" ),

== Isolated Runtime

mavenBundle("org.apache.aries.application","org.apache.aries.application.runtime.isolated"), + mavenBundle("org.apache.aries.application","org.apache.aries.application.runtime.framework"), + mavenBundle("org.apache.aries.application","org.apache.aries.application.runtime.framework.management"), + mavenBundle("org.apache.aries.application","org.apache.aries.application.runtime.repository"), +

== Replaceable bundles

If the application modules are used in a application server, the following bundles should/can be replaced and the services should/can be implemented by the application server.

=== org.apache.aries.application.default.local.platform

This bundle should be replaced with an alternative bundle by the application server.
This bundle provides the temp directory location.

Note - The following two bundles no longer exist in 0.3.1-SNAPSHOT

The following two bundles can be replaced by the application server if necessary.

=== org.apache.aries.application.noop.platform.repo

The above bundle provides the URL location for the application server runtime capabilities, which are xml file understood by the Felix OBR resolver.

=== org.apache.aries.application.noop.postresolve.process

The above bundle provides the post resolve process.
It can be replaced if the application server need to modify the deployment manifest generated by the application moduels.
