Hi Matthias,

By default, the features are installed asynchronously (in different threads).

1/
The prerequisite flag "forces" the dependency feature to be fully
installed before continuing the current feature.
So it means basically, that:
<feature name="foo">
  <feature prerequisite="true">bar</feature>
  <bundle>b</bundle>
</feature>

The bar feature will be fully installed and started before the
installation of bundle b.

2/
dependency flag is a way to avoid to install a feature if there are
already other features or bundles installed providing the same
capabilities.
Imagine, you have a feature provide Capability:foo, if you have a
second feature with the same Capability, it's not necessary to install
it.
A good example is the way we manage the HTTP provider (Jetty, Tomcat,
Undertow). In your feature, you define you need a capability
http-provider.
If you have a feature already providing this capability (let's say
pax-web-jetty), then the pax-web-tomcat feature won't be installed.
So it means, that:
<feature name="foo">
  <feature dependency="true">pax-web-tomcat</feature>
  <bundle>b</bundle>
</feature>
pax-web-tomcat feature will be installed only if pax-web-jetty is not
already installed.

Regards
JB

On Wed, Mar 13, 2024 at 8:52 AM Matthias Koch <matthias.k...@averbis.com> wrote:
>
> Hi
>
> we are currently building more and more features for our custom assembly
> and we have problems of understanding the differences of:
>
> 1. A depending feature
> 2. A depending feature with prerequisite=true
> 3. A depending feature with dependency=true
>
>
> Here is what we understand (or at least think we understand) so far.
>
> 1.
> <feature name="foo">
>      <feature dependency="false" prerequisite="false">bar</feature>
> </feature>
> The feature foo depends on feature bar. So if you install feature foo,
> then feature bar is also installed.
> Additionally when we create feature foo via maven plugin, no bundle that
> already exists in feature bar we be added to the bundle list.
>
> 2.
> <feature name="foo">
>      <feature dependency="false" prerequisite="true">bar</feature>
> </feature>
> The feature bar is prerequisite of feature foo and will therefore be
> 'started' before feature foo is installed.
>
> 3.
> <feature name="foo">
>      <feature dependency="true" prerequisite="false">bar</feature>
> </feature>
> We can't figure out what this configuration does.
>
> Please tell me if we are understanding the 1. and 2. part correctly and
> help me understand what the 3. part means.
>
> Kind regards
> Matthias
>

Reply via email to