Karaf Feature vs. OBR

classic Classic list List threaded Threaded
41 messages Options
123
Reply | Threaded
Open this post in threaded view
|

Karaf Feature vs. OBR

dleangen

Hi!

I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.

An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.

A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.


So many similarities!


I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?

Is it to try to force lock-in to Karaf? Or am I completely missing something?


Thanks for explaining! :-)


Cheers,
=David


Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

cschneider
Hi David,

I think the reason is more that features in karaf used to work a lot simpler in the start. They were simply a list of bundles to install. Over time features got more and more abilities.
So it is less to lock in people and more simply a history matter.

Since karaf 4 features use the felix resolver. You can imagine a feature as a mix of obr and requirements for the resolver.
If a bundle in a feature is marked as dependency=true then it behaves in the same way as a bundle listed in an OBR if the feature is installed. It is simply there to be selected if necessary. If dependency=false (the default) then the bundle is also a requirement for the resolver if the feature is to be installed.

I agree with you that it would be great to move to a more general way that then also works in different environments.
Some time ago I wrote down some ideas for a feature replacement that is less karaf specific.

The main things features provide:

- List of bundles to choose from
- List of bundles to install (requirements)
- Configs to install
- Conditionally install additional bundles if other features are present

The first three things can already be done without features:
- An OBR index can supply the list of bundles to choose from ( I already started to provide OBR repos in some projects like Aries RSA)
- We could use a list of top level bundles as initial requirements
- A bundle can require other bundles using Require-Bundle headers. This could allow feature like bundles that list other top level bundles
- Configurations can be provided inside of bundles using the Configurer spec and impl from enroute

For conditional bundles there is no replacement outside of features.

So we could develop a replacement of features that works in all OSGi environments. It is just matter of knowledge and effort to implement this.

You can see in the  CXF-DOSGi SOAP sample what can already be done with OBR and a resolver:
The runbundles are automatically determined by the resolver.
As you can see it is already possible but still quite a bit more effort than with karaf features at the moment.

Christian



2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]>:

Hi!

I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.

An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.

A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.


So many similarities!


I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?

Is it to try to force lock-in to Karaf? Or am I completely missing something?


Thanks for explaining! :-)


Cheers,
=David





--
--
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com
Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

jbonofre
And anyway, Karaf Features can leverage OBR (directly or via Cave).

Karaf can load OBR repos in org.apache.karaf.features.cfg and use it directly.

Regards
JB

On 06/14/2017 06:46 PM, Christian Schneider wrote:

> Hi David,
>
> I think the reason is more that features in karaf used to work a lot simpler in
> the start. They were simply a list of bundles to install. Over time features got
> more and more abilities.
> So it is less to lock in people and more simply a history matter.
>
> Since karaf 4 features use the felix resolver. You can imagine a feature as a
> mix of obr and requirements for the resolver.
> If a bundle in a feature is marked as dependency=true then it behaves in the
> same way as a bundle listed in an OBR if the feature is installed. It is simply
> there to be selected if necessary. If dependency=false (the default) then the
> bundle is also a requirement for the resolver if the feature is to be installed.
>
> I agree with you that it would be great to move to a more general way that then
> also works in different environments.
> Some time ago I wrote down some ideas for a feature replacement that is less
> karaf specific.
> http://liquid-reality.de/display/liquid/Design+repository+based+features+for+Apache+Karaf
>
> The main things features provide:
>
> - List of bundles to choose from
> - List of bundles to install (requirements)
> - Configs to install
> - Conditionally install additional bundles if other features are present
>
> The first three things can already be done without features:
> - An OBR index can supply the list of bundles to choose from ( I already started
> to provide OBR repos in some projects like Aries RSA)
> - We could use a list of top level bundles as initial requirements
> - A bundle can require other bundles using Require-Bundle headers. This could
> allow feature like bundles that list other top level bundles
> - Configurations can be provided inside of bundles using the Configurer spec and
> impl from enroute
>
> For conditional bundles there is no replacement outside of features.
>
> So we could develop a replacement of features that works in all OSGi
> environments. It is just matter of knowledge and effort to implement this.
>
> You can see in the  CXF-DOSGi SOAP sample what can already be done with OBR and
> a resolver:
> https://github.com/apache/cxf-dosgi/blob/master/samples/soap/soap.bndrun#L1-L41
> The runbundles are automatically determined by the resolver.
> As you can see it is already possible but still quite a bit more effort than
> with karaf features at the moment.
>
> Christian
>
>
>
> 2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]
> <mailto:[hidden email]>>:
>
>
>     Hi!
>
>     I am trying to wrap my head around the differences between an OBR and a
>     Karaf Feature. The concepts seem to be overlapping.
>
>     An OBR has an index of the contained bundles, as well as meta information,
>     which includes requirements and capabilities. An OBR is therefore very
>     useful for resolving bundles, and partitioning bundles into some kind of
>     category. It can also be versioned, and can contained different versions of
>     bundles. An OBR could potentially be used to keep snapshots of system
>     releases. I believe that this is somewhat how Apache ACE works. (A
>     Distribution can be rolled back by simply referring to a different OBR and
>     allowing the system to re-resolve.) The actual bundles need to be stored
>     somewhere. The OBR index needs to provide links to that storage.
>
>     A Karaf Feature is basically an index of bundles (and configurations), too.
>     I think that it can also be versioned, and can contain different versions of
>     bundles. Like an OBR, it is very useful for partitioning bundles into some
>     kind of category, so the groups of bundles can be manipulated as a single
>     unit. Just like an OBR, the Karaf Feature also needs to provide a link to
>     the bundles. AFAIU, resolution is done somehow in Karaf, based on the
>     bundles available via the Features, so in the end the entire mechanism seems
>     almost identical to what the OBR is doing.
>
>
>     So many similarities!
>
>
>     I understand that a Feature can include configurations, which is nice, but
>     why have a competing non-official standard against an official standard? If
>     configurations is the only problem, then why not build it on top of OBRs,
>     rather than creating something completely new and different and competing?
>
>     Is it to try to force lock-in to Karaf? Or am I completely missing something?
>
>
>     Thanks for explaining! :-)
>
>
>     Cheers,
>     =David
>
>
>
>
>
> --
> --
> Christian Schneider
> http://www.liquid-reality.de 
> <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e46&URL=http%3a%2f%2fwww.liquid-reality.de>
>
> Open Source Architect
> http://www.talend.com 
> <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e46&URL=http%3a%2f%2fwww.talend.com>

--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com
Reply | Threaded
Open this post in threaded view
|

RE: Karaf Feature vs. OBR

Scott
When we say "OBR" are we referring to the OSGi Subsystem spec?

Scott

-----Original Message-----
From: Jean-Baptiste Onofré [mailto:[hidden email]]
Sent: Wednesday, June 14, 2017 11:49 AM
To: [hidden email]
Subject: Re: Karaf Feature vs. OBR

And anyway, Karaf Features can leverage OBR (directly or via Cave).

Karaf can load OBR repos in org.apache.karaf.features.cfg and use it directly.

Regards
JB

On 06/14/2017 06:46 PM, Christian Schneider wrote:

> Hi David,
>
> I think the reason is more that features in karaf used to work a lot
> simpler in the start. They were simply a list of bundles to install.
> Over time features got more and more abilities.
> So it is less to lock in people and more simply a history matter.
>
> Since karaf 4 features use the felix resolver. You can imagine a
> feature as a mix of obr and requirements for the resolver.
> If a bundle in a feature is marked as dependency=true then it behaves
> in the same way as a bundle listed in an OBR if the feature is
> installed. It is simply there to be selected if necessary. If
> dependency=false (the default) then the bundle is also a requirement for the resolver if the feature is to be installed.
>
> I agree with you that it would be great to move to a more general way
> that then also works in different environments.
> Some time ago I wrote down some ideas for a feature replacement that
> is less karaf specific.
> http://liquid-reality.de/display/liquid/Design+repository+based+featur
> es+for+Apache+Karaf
>
> The main things features provide:
>
> - List of bundles to choose from
> - List of bundles to install (requirements)
> - Configs to install
> - Conditionally install additional bundles if other features are
> present
>
> The first three things can already be done without features:
> - An OBR index can supply the list of bundles to choose from ( I
> already started to provide OBR repos in some projects like Aries RSA)
> - We could use a list of top level bundles as initial requirements
> - A bundle can require other bundles using Require-Bundle headers.
> This could allow feature like bundles that list other top level
> bundles
> - Configurations can be provided inside of bundles using the
> Configurer spec and impl from enroute
>
> For conditional bundles there is no replacement outside of features.
>
> So we could develop a replacement of features that works in all OSGi
> environments. It is just matter of knowledge and effort to implement this.
>
> You can see in the  CXF-DOSGi SOAP sample what can already be done
> with OBR and a resolver:
> https://github.com/apache/cxf-dosgi/blob/master/samples/soap/soap.bndr
> un#L1-L41 The runbundles are automatically determined by the resolver.
> As you can see it is already possible but still quite a bit more
> effort than with karaf features at the moment.
>
> Christian
>
>
>
> 2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]
> <mailto:[hidden email]>>:
>
>
>     Hi!
>
>     I am trying to wrap my head around the differences between an OBR and a
>     Karaf Feature. The concepts seem to be overlapping.
>
>     An OBR has an index of the contained bundles, as well as meta information,
>     which includes requirements and capabilities. An OBR is therefore very
>     useful for resolving bundles, and partitioning bundles into some kind of
>     category. It can also be versioned, and can contained different versions of
>     bundles. An OBR could potentially be used to keep snapshots of system
>     releases. I believe that this is somewhat how Apache ACE works. (A
>     Distribution can be rolled back by simply referring to a different OBR and
>     allowing the system to re-resolve.) The actual bundles need to be stored
>     somewhere. The OBR index needs to provide links to that storage.
>
>     A Karaf Feature is basically an index of bundles (and configurations), too.
>     I think that it can also be versioned, and can contain different versions of
>     bundles. Like an OBR, it is very useful for partitioning bundles into some
>     kind of category, so the groups of bundles can be manipulated as a single
>     unit. Just like an OBR, the Karaf Feature also needs to provide a link to
>     the bundles. AFAIU, resolution is done somehow in Karaf, based on the
>     bundles available via the Features, so in the end the entire mechanism seems
>     almost identical to what the OBR is doing.
>
>
>     So many similarities!
>
>
>     I understand that a Feature can include configurations, which is nice, but
>     why have a competing non-official standard against an official standard? If
>     configurations is the only problem, then why not build it on top of OBRs,
>     rather than creating something completely new and different and competing?
>
>     Is it to try to force lock-in to Karaf? Or am I completely missing something?
>
>
>     Thanks for explaining! :-)
>
>
>     Cheers,
>     =David
>
>
>
>
>
> --
> --
> Christian Schneider
> http://www.liquid-reality.de
> <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7
> e46&URL=http%3a%2f%2fwww.liquid-reality.de>
>
> Open Source Architect
> http://www.talend.com
> <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7
> e46&URL=http%3a%2f%2fwww.talend.com>

--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com
Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

jbonofre
No, the OSGi Repository spec.

Regards
JB

On 06/14/2017 08:43 PM, Leschke, Scott wrote:

> When we say "OBR" are we referring to the OSGi Subsystem spec?
>
> Scott
>
> -----Original Message-----
> From: Jean-Baptiste Onofré [mailto:[hidden email]]
> Sent: Wednesday, June 14, 2017 11:49 AM
> To: [hidden email]
> Subject: Re: Karaf Feature vs. OBR
>
> And anyway, Karaf Features can leverage OBR (directly or via Cave).
>
> Karaf can load OBR repos in org.apache.karaf.features.cfg and use it directly.
>
> Regards
> JB
>
> On 06/14/2017 06:46 PM, Christian Schneider wrote:
>> Hi David,
>>
>> I think the reason is more that features in karaf used to work a lot
>> simpler in the start. They were simply a list of bundles to install.
>> Over time features got more and more abilities.
>> So it is less to lock in people and more simply a history matter.
>>
>> Since karaf 4 features use the felix resolver. You can imagine a
>> feature as a mix of obr and requirements for the resolver.
>> If a bundle in a feature is marked as dependency=true then it behaves
>> in the same way as a bundle listed in an OBR if the feature is
>> installed. It is simply there to be selected if necessary. If
>> dependency=false (the default) then the bundle is also a requirement for the resolver if the feature is to be installed.
>>
>> I agree with you that it would be great to move to a more general way
>> that then also works in different environments.
>> Some time ago I wrote down some ideas for a feature replacement that
>> is less karaf specific.
>> http://liquid-reality.de/display/liquid/Design+repository+based+featur
>> es+for+Apache+Karaf
>>
>> The main things features provide:
>>
>> - List of bundles to choose from
>> - List of bundles to install (requirements)
>> - Configs to install
>> - Conditionally install additional bundles if other features are
>> present
>>
>> The first three things can already be done without features:
>> - An OBR index can supply the list of bundles to choose from ( I
>> already started to provide OBR repos in some projects like Aries RSA)
>> - We could use a list of top level bundles as initial requirements
>> - A bundle can require other bundles using Require-Bundle headers.
>> This could allow feature like bundles that list other top level
>> bundles
>> - Configurations can be provided inside of bundles using the
>> Configurer spec and impl from enroute
>>
>> For conditional bundles there is no replacement outside of features.
>>
>> So we could develop a replacement of features that works in all OSGi
>> environments. It is just matter of knowledge and effort to implement this.
>>
>> You can see in the  CXF-DOSGi SOAP sample what can already be done
>> with OBR and a resolver:
>> https://github.com/apache/cxf-dosgi/blob/master/samples/soap/soap.bndr
>> un#L1-L41 The runbundles are automatically determined by the resolver.
>> As you can see it is already possible but still quite a bit more
>> effort than with karaf features at the moment.
>>
>> Christian
>>
>>
>>
>> 2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]
>> <mailto:[hidden email]>>:
>>
>>
>>      Hi!
>>
>>      I am trying to wrap my head around the differences between an OBR and a
>>      Karaf Feature. The concepts seem to be overlapping.
>>
>>      An OBR has an index of the contained bundles, as well as meta information,
>>      which includes requirements and capabilities. An OBR is therefore very
>>      useful for resolving bundles, and partitioning bundles into some kind of
>>      category. It can also be versioned, and can contained different versions of
>>      bundles. An OBR could potentially be used to keep snapshots of system
>>      releases. I believe that this is somewhat how Apache ACE works. (A
>>      Distribution can be rolled back by simply referring to a different OBR and
>>      allowing the system to re-resolve.) The actual bundles need to be stored
>>      somewhere. The OBR index needs to provide links to that storage.
>>
>>      A Karaf Feature is basically an index of bundles (and configurations), too.
>>      I think that it can also be versioned, and can contain different versions of
>>      bundles. Like an OBR, it is very useful for partitioning bundles into some
>>      kind of category, so the groups of bundles can be manipulated as a single
>>      unit. Just like an OBR, the Karaf Feature also needs to provide a link to
>>      the bundles. AFAIU, resolution is done somehow in Karaf, based on the
>>      bundles available via the Features, so in the end the entire mechanism seems
>>      almost identical to what the OBR is doing.
>>
>>
>>      So many similarities!
>>
>>
>>      I understand that a Feature can include configurations, which is nice, but
>>      why have a competing non-official standard against an official standard? If
>>      configurations is the only problem, then why not build it on top of OBRs,
>>      rather than creating something completely new and different and competing?
>>
>>      Is it to try to force lock-in to Karaf? Or am I completely missing something?
>>
>>
>>      Thanks for explaining! :-)
>>
>>
>>      Cheers,
>>      =David
>>
>>
>>
>>
>>
>> --
>> --
>> Christian Schneider
>> http://www.liquid-reality.de
>> <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7
>> e46&URL=http%3a%2f%2fwww.liquid-reality.de>
>>
>> Open Source Architect
>> http://www.talend.com
>> <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7
>> e46&URL=http%3a%2f%2fwww.talend.com>
>
> --
> Jean-Baptiste Onofré
> [hidden email]
> http://blog.nanthrax.net
> Talend - http://www.talend.com
>

--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com
Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

dleangen
In reply to this post by jbonofre

Thank you JB and Christian,

I think that about answers my question. Right now I don’t have time to actually invest in doing anything about it, but I was just curious. :-)


Cheers,
=David


> On Jun 15, 2017, at 1:49 AM, Jean-Baptiste Onofré <[hidden email]> wrote:
>
> And anyway, Karaf Features can leverage OBR (directly or via Cave).
>
> Karaf can load OBR repos in org.apache.karaf.features.cfg and use it directly.
>
> Regards
> JB
>
> On 06/14/2017 06:46 PM, Christian Schneider wrote:
>> Hi David,
>> I think the reason is more that features in karaf used to work a lot simpler in the start. They were simply a list of bundles to install. Over time features got more and more abilities.
>> So it is less to lock in people and more simply a history matter.
>> Since karaf 4 features use the felix resolver. You can imagine a feature as a mix of obr and requirements for the resolver.
>> If a bundle in a feature is marked as dependency=true then it behaves in the same way as a bundle listed in an OBR if the feature is installed. It is simply there to be selected if necessary. If dependency=false (the default) then the bundle is also a requirement for the resolver if the feature is to be installed.
>> I agree with you that it would be great to move to a more general way that then also works in different environments.
>> Some time ago I wrote down some ideas for a feature replacement that is less karaf specific.
>> http://liquid-reality.de/display/liquid/Design+repository+based+features+for+Apache+Karaf
>> The main things features provide:
>> - List of bundles to choose from
>> - List of bundles to install (requirements)
>> - Configs to install
>> - Conditionally install additional bundles if other features are present
>> The first three things can already be done without features:
>> - An OBR index can supply the list of bundles to choose from ( I already started to provide OBR repos in some projects like Aries RSA)
>> - We could use a list of top level bundles as initial requirements
>> - A bundle can require other bundles using Require-Bundle headers. This could allow feature like bundles that list other top level bundles
>> - Configurations can be provided inside of bundles using the Configurer spec and impl from enroute
>> For conditional bundles there is no replacement outside of features.
>> So we could develop a replacement of features that works in all OSGi environments. It is just matter of knowledge and effort to implement this.
>> You can see in the  CXF-DOSGi SOAP sample what can already be done with OBR and a resolver:
>> https://github.com/apache/cxf-dosgi/blob/master/samples/soap/soap.bndrun#L1-L41
>> The runbundles are automatically determined by the resolver.
>> As you can see it is already possible but still quite a bit more effort than with karaf features at the moment.
>> Christian
>> 2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email] <mailto:[hidden email]>>:
>>    Hi!
>>    I am trying to wrap my head around the differences between an OBR and a
>>    Karaf Feature. The concepts seem to be overlapping.
>>    An OBR has an index of the contained bundles, as well as meta information,
>>    which includes requirements and capabilities. An OBR is therefore very
>>    useful for resolving bundles, and partitioning bundles into some kind of
>>    category. It can also be versioned, and can contained different versions of
>>    bundles. An OBR could potentially be used to keep snapshots of system
>>    releases. I believe that this is somewhat how Apache ACE works. (A
>>    Distribution can be rolled back by simply referring to a different OBR and
>>    allowing the system to re-resolve.) The actual bundles need to be stored
>>    somewhere. The OBR index needs to provide links to that storage.
>>    A Karaf Feature is basically an index of bundles (and configurations), too.
>>    I think that it can also be versioned, and can contain different versions of
>>    bundles. Like an OBR, it is very useful for partitioning bundles into some
>>    kind of category, so the groups of bundles can be manipulated as a single
>>    unit. Just like an OBR, the Karaf Feature also needs to provide a link to
>>    the bundles. AFAIU, resolution is done somehow in Karaf, based on the
>>    bundles available via the Features, so in the end the entire mechanism seems
>>    almost identical to what the OBR is doing.
>>    So many similarities!
>>    I understand that a Feature can include configurations, which is nice, but
>>    why have a competing non-official standard against an official standard? If
>>    configurations is the only problem, then why not build it on top of OBRs,
>>    rather than creating something completely new and different and competing?
>>    Is it to try to force lock-in to Karaf? Or am I completely missing something?
>>    Thanks for explaining! :-)
>>    Cheers,
>>    =David
>> --
>> --
>> Christian Schneider
>> http://www.liquid-reality.de <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e46&URL=http%3a%2f%2fwww.liquid-reality.de>
>> Open Source Architect
>> http://www.talend.com <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e46&URL=http%3a%2f%2fwww.talend.com>
>
> --
> Jean-Baptiste Onofré
> [hidden email]
> http://blog.nanthrax.net
> Talend - http://www.talend.com

Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

dleangen

I just did a Google search for apache cave nexus to see if anybody provided a comparison, and this is what I found:


An Apache Life-Way

… the first moccasin game was played there in a hint of such a nexus. “At the bottom of this hole, a cave


:-)


=David


On Jun 15, 2017, at 4:47 AM, David Leangen <[hidden email]> wrote:


Thank you JB and Christian,

I think that about answers my question. Right now I don’t have time to actually invest in doing anything about it, but I was just curious. :-)


Cheers,
=David


On Jun 15, 2017, at 1:49 AM, Jean-Baptiste Onofré <[hidden email]> wrote:

And anyway, Karaf Features can leverage OBR (directly or via Cave).

Karaf can load OBR repos in org.apache.karaf.features.cfg and use it directly.

Regards
JB

On 06/14/2017 06:46 PM, Christian Schneider wrote:
Hi David,
I think the reason is more that features in karaf used to work a lot simpler in the start. They were simply a list of bundles to install. Over time features got more and more abilities.
So it is less to lock in people and more simply a history matter.
Since karaf 4 features use the felix resolver. You can imagine a feature as a mix of obr and requirements for the resolver.
If a bundle in a feature is marked as dependency=true then it behaves in the same way as a bundle listed in an OBR if the feature is installed. It is simply there to be selected if necessary. If dependency=false (the default) then the bundle is also a requirement for the resolver if the feature is to be installed.
I agree with you that it would be great to move to a more general way that then also works in different environments.
Some time ago I wrote down some ideas for a feature replacement that is less karaf specific.
http://liquid-reality.de/display/liquid/Design+repository+based+features+for+Apache+Karaf
The main things features provide:
- List of bundles to choose from
- List of bundles to install (requirements)
- Configs to install
- Conditionally install additional bundles if other features are present
The first three things can already be done without features:
- An OBR index can supply the list of bundles to choose from ( I already started to provide OBR repos in some projects like Aries RSA)
- We could use a list of top level bundles as initial requirements
- A bundle can require other bundles using Require-Bundle headers. This could allow feature like bundles that list other top level bundles
- Configurations can be provided inside of bundles using the Configurer spec and impl from enroute
For conditional bundles there is no replacement outside of features.
So we could develop a replacement of features that works in all OSGi environments. It is just matter of knowledge and effort to implement this.
You can see in the  CXF-DOSGi SOAP sample what can already be done with OBR and a resolver:
https://github.com/apache/cxf-dosgi/blob/master/samples/soap/soap.bndrun#L1-L41
The runbundles are automatically determined by the resolver.
As you can see it is already possible but still quite a bit more effort than with karaf features at the moment.
Christian
2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email] <mailto:[hidden email]>>:
  Hi!
  I am trying to wrap my head around the differences between an OBR and a
  Karaf Feature. The concepts seem to be overlapping.
  An OBR has an index of the contained bundles, as well as meta information,
  which includes requirements and capabilities. An OBR is therefore very
  useful for resolving bundles, and partitioning bundles into some kind of
  category. It can also be versioned, and can contained different versions of
  bundles. An OBR could potentially be used to keep snapshots of system
  releases. I believe that this is somewhat how Apache ACE works. (A
  Distribution can be rolled back by simply referring to a different OBR and
  allowing the system to re-resolve.) The actual bundles need to be stored
  somewhere. The OBR index needs to provide links to that storage.
  A Karaf Feature is basically an index of bundles (and configurations), too.
  I think that it can also be versioned, and can contain different versions of
  bundles. Like an OBR, it is very useful for partitioning bundles into some
  kind of category, so the groups of bundles can be manipulated as a single
  unit. Just like an OBR, the Karaf Feature also needs to provide a link to
  the bundles. AFAIU, resolution is done somehow in Karaf, based on the
  bundles available via the Features, so in the end the entire mechanism seems
  almost identical to what the OBR is doing.
  So many similarities!
  I understand that a Feature can include configurations, which is nice, but
  why have a competing non-official standard against an official standard? If
  configurations is the only problem, then why not build it on top of OBRs,
  rather than creating something completely new and different and competing?
  Is it to try to force lock-in to Karaf? Or am I completely missing something?
  Thanks for explaining! :-)
  Cheers,
  =David
--
--
Christian Schneider
http://www.liquid-reality.de <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e46&URL=http%3a%2f%2fwww.liquid-reality.de>
Open Source Architect
http://www.talend.com <https://owa.talend.com/owa/redir.aspx?C=3aa4083e0c744ae1ba52bd062c5a7e46&URL=http%3a%2f%2fwww.talend.com>

--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com


Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

Guillaume Nodet-2
In reply to this post by dleangen
So if you consider an OBR as being a collection of resources, each resource having capabilities and requirements, then a feature repository is an OBR repository, it's just the syntax is more concise.
If you want to look at what the repository look like, you can launch the following command in karaf:
  > feature:install --store resolution.json --verbose --simulate  scr

Then, look at the resolution.json file, it will contain the OBR repository used by the resolver in a json format.  The xml syntax would be slightly different of course, and a bit more verbose too, but roughly the same data.
I do think the features syntax is a bit more understandable.

But you do not want to compare OBR and features.  I haven't seen any OBR repository used which would contain other things than just OSGi bundles.
Features is more a deployment artifact than an OSGi bundle, so it's more to be compared with OSGi subsystems.

With pure OBR, you can't group bundles together, you usually don't want to edit such a repository file manually, so at the end, you can never really hack the content.  It has to be generated, and is mostly generated only from a set of OSGi bundles.  You can't capture all the constraints by using bundles only.

2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]>:

Hi!

I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.

An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.

A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.


So many similarities!


I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?

Is it to try to force lock-in to Karaf? Or am I completely missing something?


Thanks for explaining! :-)


Cheers,
=David





--
------------------------
Guillaume Nodet

Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

dleangen

Hi Guillaume,

Thank you for this assessment.

I agree that Features adds value. Your post explains a lot of good reasons why this is so.

My question is more about “why compete with OBR?”. Instead of embracing OBR and working on top of it, it seems that Features want to replace it. This is causing me to have to make a lot of choices in my deployment mechanism.

Features could be really helpful for deployment by managing OBRs, configurations, and other deployment information. They could also manage versioning better etc. Maybe something like what Apache ACE was trying to do. However, instead of “adding” value, currently Features are completely replacing OBR, which I find interesting. But I understand that there is some legacy to this. Now that it works, it would take some momentum to move to a more standards-based approach.


My current issue is: how can I use Features for Continuous Deployment? I am having trouble with automation. That is what got me interested in the idea behind the Features…


Cheers,
=David



On Jun 15, 2017, at 6:38 AM, Guillaume Nodet <[hidden email]> wrote:

So if you consider an OBR as being a collection of resources, each resource having capabilities and requirements, then a feature repository is an OBR repository, it's just the syntax is more concise.
If you want to look at what the repository look like, you can launch the following command in karaf:
  > feature:install --store resolution.json --verbose --simulate  scr

Then, look at the resolution.json file, it will contain the OBR repository used by the resolver in a json format.  The xml syntax would be slightly different of course, and a bit more verbose too, but roughly the same data.
I do think the features syntax is a bit more understandable.

But you do not want to compare OBR and features.  I haven't seen any OBR repository used which would contain other things than just OSGi bundles.
Features is more a deployment artifact than an OSGi bundle, so it's more to be compared with OSGi subsystems.

With pure OBR, you can't group bundles together, you usually don't want to edit such a repository file manually, so at the end, you can never really hack the content.  It has to be generated, and is mostly generated only from a set of OSGi bundles.  You can't capture all the constraints by using bundles only.

2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]>:

Hi!

I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.

An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.

A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.


So many similarities!


I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?

Is it to try to force lock-in to Karaf? Or am I completely missing something?


Thanks for explaining! :-)


Cheers,
=David





--
------------------------
Guillaume Nodet


Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

cschneider
There is one big downside to OBR unfortunately. Inside OBR the content of bundles needs to be refered as a url. While karaf can work with mvn urls other systems like bndtools can not. Now the problem is that you can not populate an OBR well without maven urls if your artifacts reside in maven and you also want to use maven SNAPSHOTs.

So I think there is a gap in OBR that needs to be closed. One solution would be to add the mvn urls to the spec so they are universally accepted. 

Another solution is to consider the OBR just as a cache and define the list of bundles in a pom. Bndtools is going that way and I think karaf could do the same. So a feature could simply point to a pom or when deployed to maven we could assume to use the pom of the project the feature resides in as default. This would allow to simply define OBRs by using a pom.

Christian


2017-06-14 23:58 GMT+02:00 David Leangen <[hidden email]>:

Hi Guillaume,

Thank you for this assessment.

I agree that Features adds value. Your post explains a lot of good reasons why this is so.

My question is more about “why compete with OBR?”. Instead of embracing OBR and working on top of it, it seems that Features want to replace it. This is causing me to have to make a lot of choices in my deployment mechanism.

Features could be really helpful for deployment by managing OBRs, configurations, and other deployment information. They could also manage versioning better etc. Maybe something like what Apache ACE was trying to do. However, instead of “adding” value, currently Features are completely replacing OBR, which I find interesting. But I understand that there is some legacy to this. Now that it works, it would take some momentum to move to a more standards-based approach.


My current issue is: how can I use Features for Continuous Deployment? I am having trouble with automation. That is what got me interested in the idea behind the Features…


Cheers,
=David



On Jun 15, 2017, at 6:38 AM, Guillaume Nodet <[hidden email]> wrote:

So if you consider an OBR as being a collection of resources, each resource having capabilities and requirements, then a feature repository is an OBR repository, it's just the syntax is more concise.
If you want to look at what the repository look like, you can launch the following command in karaf:
  > feature:install --store resolution.json --verbose --simulate  scr

Then, look at the resolution.json file, it will contain the OBR repository used by the resolver in a json format.  The xml syntax would be slightly different of course, and a bit more verbose too, but roughly the same data.
I do think the features syntax is a bit more understandable.

But you do not want to compare OBR and features.  I haven't seen any OBR repository used which would contain other things than just OSGi bundles.
Features is more a deployment artifact than an OSGi bundle, so it's more to be compared with OSGi subsystems.

With pure OBR, you can't group bundles together, you usually don't want to edit such a repository file manually, so at the end, you can never really hack the content.  It has to be generated, and is mostly generated only from a set of OSGi bundles.  You can't capture all the constraints by using bundles only.

2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]>:

Hi!

I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.

An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.

A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.


So many similarities!


I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?

Is it to try to force lock-in to Karaf? Or am I completely missing something?


Thanks for explaining! :-)


Cheers,
=David





--
------------------------
Guillaume Nodet





--
--
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com
Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

Guillaume Nodet-2
In reply to this post by dleangen
Again, I'm not sure why you see features competing with OBR.
We do actually leverage OBR internally, and we can also leverage it externally though it's not much advertised, but it was hinted by Jean-Baptiste when he talked about Cave.

OBR is the repository specification, so it defines a Repository interface.  We do have multiple implementations of it in Karaf : the standardized XML one, a JSON based repository implementation and an in-vm one.

A feature descriptor supports the <resource-repository> element. The content of this element is an url to a OBR repository (eventually prefixed with json: or xml:).  All features defined in the features repository will behave as if they have the resources defined in the OBR repository with <bundle dependency="true">xxx</bundle>.

You can also provide a list of global repositories and configure it in etc/org.apache.karaf.features.cfg with the resourceRepositories key (a command separated list of urls).

Also, there's absolutely no value in the OBR bundle description compared to a manifest.  It contains the same information in a different form and is usually generated from the manifest.  Fwiw, when a feature has a reference to a bundle, we do generate the OSGi Resource from the manifest directly without using the OBR xml  description, but it's the same.

I'm really not sure what we could do to leverage OBR more...


2017-06-14 23:58 GMT+02:00 David Leangen <[hidden email]>:

Hi Guillaume,

Thank you for this assessment.

I agree that Features adds value. Your post explains a lot of good reasons why this is so.

My question is more about “why compete with OBR?”. Instead of embracing OBR and working on top of it, it seems that Features want to replace it. This is causing me to have to make a lot of choices in my deployment mechanism.

Features could be really helpful for deployment by managing OBRs, configurations, and other deployment information. They could also manage versioning better etc. Maybe something like what Apache ACE was trying to do. However, instead of “adding” value, currently Features are completely replacing OBR, which I find interesting. But I understand that there is some legacy to this. Now that it works, it would take some momentum to move to a more standards-based approach.


My current issue is: how can I use Features for Continuous Deployment? I am having trouble with automation. That is what got me interested in the idea behind the Features…


Cheers,
=David



On Jun 15, 2017, at 6:38 AM, Guillaume Nodet <[hidden email]> wrote:

So if you consider an OBR as being a collection of resources, each resource having capabilities and requirements, then a feature repository is an OBR repository, it's just the syntax is more concise.
If you want to look at what the repository look like, you can launch the following command in karaf:
  > feature:install --store resolution.json --verbose --simulate  scr

Then, look at the resolution.json file, it will contain the OBR repository used by the resolver in a json format.  The xml syntax would be slightly different of course, and a bit more verbose too, but roughly the same data.
I do think the features syntax is a bit more understandable.

But you do not want to compare OBR and features.  I haven't seen any OBR repository used which would contain other things than just OSGi bundles.
Features is more a deployment artifact than an OSGi bundle, so it's more to be compared with OSGi subsystems.

With pure OBR, you can't group bundles together, you usually don't want to edit such a repository file manually, so at the end, you can never really hack the content.  It has to be generated, and is mostly generated only from a set of OSGi bundles.  You can't capture all the constraints by using bundles only.

2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]>:

Hi!

I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.

An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.

A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.


So many similarities!


I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?

Is it to try to force lock-in to Karaf? Or am I completely missing something?


Thanks for explaining! :-)


Cheers,
=David





--
------------------------
Guillaume Nodet





--
------------------------
Guillaume Nodet

Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

dleangen
In reply to this post by cschneider

Hi Christian,

Thanks for this information.

> There is one big downside to OBR unfortunately. Inside OBR the content of bundles needs to be refered as a url. While karaf can work with mvn urls other systems like bndtools can not. Now the problem is that you can not populate an OBR well without maven urls if your artifacts reside in maven and you also want to use maven SNAPSHOTs.

My understanding is that this is very much by design. The reason is to have a “strongly” curated repository to promote well-behaved and predictable builds and deployments.

I could be wrong. Maybe would be good to verify with some of the alliance peeps.


> Another solution is to consider the OBR just as a cache and define the list of bundles in a pom. Bndtools is going that way and I think karaf could do the same. So a feature could simply point to a pom or when deployed to maven we could assume to use the pom of the project the feature resides in as default. This would allow to simply define OBRs by using a pom.

You think bndtools is going that way? Or rather, they are just trying to bring in more Maven people? I don’t understand what the purpose would be. If the bundles are already defined in the OBR, why have a second list?


Cheers,
=David



> On Jun 15, 2017, at 3:18 PM, Christian Schneider <[hidden email]> wrote:
>
> There is one big downside to OBR unfortunately. Inside OBR the content of bundles needs to be refered as a url. While karaf can work with mvn urls other systems like bndtools can not. Now the problem is that you can not populate an OBR well without maven urls if your artifacts reside in maven and you also want to use maven SNAPSHOTs.
>
> So I think there is a gap in OBR that needs to be closed. One solution would be to add the mvn urls to the spec so they are universally accepted.
>
> Another solution is to consider the OBR just as a cache and define the list of bundles in a pom. Bndtools is going that way and I think karaf could do the same. So a feature could simply point to a pom or when deployed to maven we could assume to use the pom of the project the feature resides in as default. This would allow to simply define OBRs by using a pom.
>
> Christian
>
>
> 2017-06-14 23:58 GMT+02:00 David Leangen <[hidden email]>:
>
> Hi Guillaume,
>
> Thank you for this assessment.
>
> I agree that Features adds value. Your post explains a lot of good reasons why this is so.
>
> My question is more about “why compete with OBR?”. Instead of embracing OBR and working on top of it, it seems that Features want to replace it. This is causing me to have to make a lot of choices in my deployment mechanism.
>
> Features could be really helpful for deployment by managing OBRs, configurations, and other deployment information. They could also manage versioning better etc. Maybe something like what Apache ACE was trying to do. However, instead of “adding” value, currently Features are completely replacing OBR, which I find interesting. But I understand that there is some legacy to this. Now that it works, it would take some momentum to move to a more standards-based approach.
>
>
> My current issue is: how can I use Features for Continuous Deployment? I am having trouble with automation. That is what got me interested in the idea behind the Features…
>
>
> Cheers,
> =David
>
>
>
>> On Jun 15, 2017, at 6:38 AM, Guillaume Nodet <[hidden email]> wrote:
>>
>> So if you consider an OBR as being a collection of resources, each resource having capabilities and requirements, then a feature repository is an OBR repository, it's just the syntax is more concise.
>> If you want to look at what the repository look like, you can launch the following command in karaf:
>>   > feature:install --store resolution.json --verbose --simulate  scr
>>
>> Then, look at the resolution.json file, it will contain the OBR repository used by the resolver in a json format.  The xml syntax would be slightly different of course, and a bit more verbose too, but roughly the same data.
>> I do think the features syntax is a bit more understandable.
>>
>> But you do not want to compare OBR and features.  I haven't seen any OBR repository used which would contain other things than just OSGi bundles.
>> Features is more a deployment artifact than an OSGi bundle, so it's more to be compared with OSGi subsystems.
>>
>> With pure OBR, you can't group bundles together, you usually don't want to edit such a repository file manually, so at the end, you can never really hack the content.  It has to be generated, and is mostly generated only from a set of OSGi bundles.  You can't capture all the constraints by using bundles only.
>>
>> 2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]>:
>>
>> Hi!
>>
>> I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.
>>
>> An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.
>>
>> A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.
>>
>>
>> So many similarities!
>>
>>
>> I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?
>>
>> Is it to try to force lock-in to Karaf? Or am I completely missing something?
>>
>>
>> Thanks for explaining! :-)
>>
>>
>> Cheers,
>> =David
>>
>>
>>
>>
>>
>> --
>> ------------------------
>> Guillaume Nodet
>>
>
>
>
>
> --
> --
> Christian Schneider
> http://www.liquid-reality.de
>
> Open Source Architect
> http://www.talend.com

Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

dleangen
In reply to this post by Guillaume Nodet-2

Thanks Guillaume. A lot of good food for thought.

Again, I'm not sure why you see features competing with OBR.

Coming from bnd/EnRoute, in my build environment I can create different OBRs, and “release" to them. I can use a different OBR per workspace, which means that I can develop each “feature" separately, and release it to its own OBR. Thus, an OBR defines a “feature”.

What I would like to be able to do is simply push the OBR into my container, without having any extra layer. When I tried in the past, there were some bugs and it did not work out very successfully. Maybe things have changed since then…

Using Apache ACE as an example, an OBR can be used in a way that is very similar to a Feature. It works extremely well in the EnRoute environment, and cuts down a lot of noise, IMO.

A feature descriptor supports the <resource-repository> element. The content of this element is an url to a OBR repository (eventually prefixed with json: or xml:).  All features defined in the features repository will behave as if they have the resources defined in the OBR repository with <bundle dependency="true">xxx</bundle>.

Ok, either I did not know that, or I forgot about that. I’ll take a look. IIRC I think this is what didn’t work for me when I tried some time ago.

You can also provide a list of global repositories and configure it in etc/org.apache.karaf.features.cfg with the resourceRepositories key (a command separated list of urls).

The problem with this approach is, unless something has changed, I have to restart my container each time there is a change. I would also have to figure out a way to push the changes to Karaf. Perhaps this is easier than I thought, but I did not find a good way last time I look into this.

Also, there's absolutely no value in the OBR bundle description compared to a manifest.  It contains the same information in a different form and is usually generated from the manifest.  Fwiw, when a feature has a reference to a bundle, we do generate the OSGi Resource from the manifest directly without using the OBR xml  description, but it's the same.

True, but then again my understanding is that a properly curated OBR should provide a set of bundles, and should not change (which is why the ID gets updated each time there is even a minor change). The information could very well come from the bundles, but if the bundles don’t change and the index is trusted, then the pre-parsed manifest info is already in the index, so it’s a duplicate effort to redo the parsing. No?


Perhaps the Karaf/Maven way of thinking is very different from the bnd way? Or maybe there has been convergence over the past few years, but the tooling has not kept up? (That is what I am trying to figure out, since I don’t know Maven very deeply, and based on what I understand, I think I prefer the bnd way.)


Cheers,
=David



On Jun 15, 2017, at 3:27 PM, Guillaume Nodet <[hidden email]> wrote:

Again, I'm not sure why you see features competing with OBR.
We do actually leverage OBR internally, and we can also leverage it externally though it's not much advertised, but it was hinted by Jean-Baptiste when he talked about Cave.

OBR is the repository specification, so it defines a Repository interface.  We do have multiple implementations of it in Karaf : the standardized XML one, a JSON based repository implementation and an in-vm one.

A feature descriptor supports the <resource-repository> element. The content of this element is an url to a OBR repository (eventually prefixed with json: or xml:).  All features defined in the features repository will behave as if they have the resources defined in the OBR repository with <bundle dependency="true">xxx</bundle>.

You can also provide a list of global repositories and configure it in etc/org.apache.karaf.features.cfg with the resourceRepositories key (a command separated list of urls).

Also, there's absolutely no value in the OBR bundle description compared to a manifest.  It contains the same information in a different form and is usually generated from the manifest.  Fwiw, when a feature has a reference to a bundle, we do generate the OSGi Resource from the manifest directly without using the OBR xml  description, but it's the same.

I'm really not sure what we could do to leverage OBR more...


2017-06-14 23:58 GMT+02:00 David Leangen <[hidden email]>:

Hi Guillaume,

Thank you for this assessment.

I agree that Features adds value. Your post explains a lot of good reasons why this is so.

My question is more about “why compete with OBR?”. Instead of embracing OBR and working on top of it, it seems that Features want to replace it. This is causing me to have to make a lot of choices in my deployment mechanism.

Features could be really helpful for deployment by managing OBRs, configurations, and other deployment information. They could also manage versioning better etc. Maybe something like what Apache ACE was trying to do. However, instead of “adding” value, currently Features are completely replacing OBR, which I find interesting. But I understand that there is some legacy to this. Now that it works, it would take some momentum to move to a more standards-based approach.


My current issue is: how can I use Features for Continuous Deployment? I am having trouble with automation. That is what got me interested in the idea behind the Features…


Cheers,
=David



On Jun 15, 2017, at 6:38 AM, Guillaume Nodet <[hidden email]> wrote:

So if you consider an OBR as being a collection of resources, each resource having capabilities and requirements, then a feature repository is an OBR repository, it's just the syntax is more concise.
If you want to look at what the repository look like, you can launch the following command in karaf:
  > feature:install --store resolution.json --verbose --simulate  scr

Then, look at the resolution.json file, it will contain the OBR repository used by the resolver in a json format.  The xml syntax would be slightly different of course, and a bit more verbose too, but roughly the same data.
I do think the features syntax is a bit more understandable.

But you do not want to compare OBR and features.  I haven't seen any OBR repository used which would contain other things than just OSGi bundles.
Features is more a deployment artifact than an OSGi bundle, so it's more to be compared with OSGi subsystems.

With pure OBR, you can't group bundles together, you usually don't want to edit such a repository file manually, so at the end, you can never really hack the content.  It has to be generated, and is mostly generated only from a set of OSGi bundles.  You can't capture all the constraints by using bundles only.

2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]>:

Hi!

I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.

An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.

A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.


So many similarities!


I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?

Is it to try to force lock-in to Karaf? Or am I completely missing something?


Thanks for explaining! :-)


Cheers,
=David





--
------------------------
Guillaume Nodet





--
------------------------
Guillaume Nodet


Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

jbonofre
In reply to this post by Guillaume Nodet-2
It's what I said: for me there's interaction not competition.

Again, we fully support OBR as resource repos in etc/org.apache.karaf.features.cfg.

Regards
JB

On 06/15/2017 08:27 AM, Guillaume Nodet wrote:

> Again, I'm not sure why you see features competing with OBR.
> We do actually leverage OBR internally, and we can also leverage it externally
> though it's not much advertised, but it was hinted by Jean-Baptiste when he
> talked about Cave.
>
> OBR is the repository specification, so it defines a Repository interface.  We
> do have multiple implementations of it in Karaf : the standardized XML one, a
> JSON based repository implementation and an in-vm one.
>
> A feature descriptor supports the <resource-repository> element. The content of
> this element is an url to a OBR repository (eventually prefixed with json: or
> xml:).  All features defined in the features repository will behave as if they
> have the resources defined in the OBR repository with <bundle
> dependency="true">xxx</bundle>.
>
> You can also provide a list of global repositories and configure it in
> etc/org.apache.karaf.features.cfg with the resourceRepositories key (a command
> separated list of urls).
>
> Also, there's absolutely no value in the OBR bundle description compared to a
> manifest.  It contains the same information in a different form and is usually
> generated from the manifest.  Fwiw, when a feature has a reference to a bundle,
> we do generate the OSGi Resource from the manifest directly without using the
> OBR xml  description, but it's the same.
>
> I'm really not sure what we could do to leverage OBR more...
>
>
> 2017-06-14 23:58 GMT+02:00 David Leangen <[hidden email]
> <mailto:[hidden email]>>:
>
>
>     Hi Guillaume,
>
>     Thank you for this assessment.
>
>     I agree that Features adds value. Your post explains a lot of good reasons
>     why this is so.
>
>     My question is more about “why compete with OBR?”. Instead of embracing OBR
>     and working on top of it, it seems that Features want to replace it. This is
>     causing me to have to make a lot of choices in my deployment mechanism.
>
>     Features could be really helpful for deployment by managing OBRs,
>     configurations, and other deployment information. They could also manage
>     versioning better etc. Maybe something like what Apache ACE was trying to
>     do. However, instead of “adding” value, currently Features are completely
>     replacing OBR, which I find interesting. But I understand that there is some
>     legacy to this. Now that it works, it would take some momentum to move to a
>     more standards-based approach.
>
>
>     My current issue is: how can I use Features for Continuous Deployment? I am
>     having trouble with automation. That is what got me interested in the idea
>     behind the Features…
>
>
>     Cheers,
>     =David
>
>
>
>>     On Jun 15, 2017, at 6:38 AM, Guillaume Nodet <[hidden email]
>>     <mailto:[hidden email]>> wrote:
>>
>>     So if you consider an OBR as being a collection of resources, each
>>     resource having capabilities and requirements, then a feature repository
>>     is an OBR repository, it's just the syntax is more concise.
>>     If you want to look at what the repository look like, you can launch the
>>     following command in karaf:
>>       > feature:install--store resolution.json --verbose --simulate  scr
>>
>>     Then, look at the resolution.json file, it will contain the OBR repository
>>     used by the resolver in a json format.  The xml syntax would be slightly
>>     different of course, and a bit more verbose too, but roughly the same data.
>>     I do think the features syntax is a bit more understandable.
>>
>>     But you do not want to compare OBR and features.  I haven't seen any OBR
>>     repository used which would contain other things than just OSGi bundles.
>>     Features is more a deployment artifact than an OSGi bundle, so it's more
>>     to be compared with OSGi subsystems.
>>
>>     With pure OBR, you can't group bundles together, you usually don't want to
>>     edit such a repository file manually, so at the end, you can never really
>>     hack the content.  It has to be generated, and is mostly generated only
>>     from a set of OSGi bundles.  You can't capture all the constraints by
>>     using bundles only.
>>
>>     2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]
>>     <mailto:[hidden email]>>:
>>
>>
>>         Hi!
>>
>>         I am trying to wrap my head around the differences between an OBR and
>>         a Karaf Feature. The concepts seem to be overlapping.
>>
>>         An OBR has an index of the contained bundles, as well as meta
>>         information, which includes requirements and capabilities. An OBR is
>>         therefore very useful for resolving bundles, and partitioning bundles
>>         into some kind of category. It can also be versioned, and can
>>         contained different versions of bundles. An OBR could potentially be
>>         used to keep snapshots of system releases. I believe that this is
>>         somewhat how Apache ACE works. (A Distribution can be rolled back by
>>         simply referring to a different OBR and allowing the system to
>>         re-resolve.) The actual bundles need to be stored somewhere. The OBR
>>         index needs to provide links to that storage.
>>
>>         A Karaf Feature is basically an index of bundles (and configurations),
>>         too. I think that it can also be versioned, and can contain different
>>         versions of bundles. Like an OBR, it is very useful for partitioning
>>         bundles into some kind of category, so the groups of bundles can be
>>         manipulated as a single unit. Just like an OBR, the Karaf Feature also
>>         needs to provide a link to the bundles. AFAIU, resolution is done
>>         somehow in Karaf, based on the bundles available via the Features, so
>>         in the end the entire mechanism seems almost identical to what the OBR
>>         is doing.
>>
>>
>>         So many similarities!
>>
>>
>>         I understand that a Feature can include configurations, which is nice,
>>         but why have a competing non-official standard against an official
>>         standard? If configurations is the only problem, then why not build it
>>         on top of OBRs, rather than creating something completely new and
>>         different and competing?
>>
>>         Is it to try to force lock-in to Karaf? Or am I completely missing
>>         something?
>>
>>
>>         Thanks for explaining! :-)
>>
>>
>>         Cheers,
>>         =David
>>
>>
>>
>>
>>
>>     --
>>     ------------------------
>>     Guillaume Nodet
>>
>
>
>
>
> --
> ------------------------
> Guillaume Nodet
>

--
Jean-Baptiste Onofré
[hidden email]
http://blog.nanthrax.net
Talend - http://www.talend.com
Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

cschneider
In reply to this post by dleangen
Without mvn urls you can either use file urls or http urls. Both suck in some important regards:

A file url requires that the refered jar resides near the OBR. Today most people work with maven repos. So a natural place for an artifact is the local maven repository. It is difficult to point a file url to it as it will always be depending on the user setup. 
As a workaround file urls worked well for me in bndtools. What I did was to always generrate my OBR content during the build so it was no problem that the urls depend on my setup.
This means though that you can never publish the contents of the OBR. The good thing is that you can work with maven SNAPSHOTs this way.

For http urls you can point to the http url of a jar in a maven repo like maven central .. there are many downsides though.
1. The url is absolute. So you always point to a certain external resource. So you need additional measures if you want to cache the artifact locally.
2. For maven snapshots the urls in a remote maven repo always change. So you can not point to the newest snapshot which you want to do during active development
3. These absolute urls make you dependent on the external repo availability and you need to open your firewall to access it.

mvn urls on the other hand work extremly well in enterprise environments as you can leverage local mvn proxies. You can also access secured reporitories that require authentication.

So if you really try to use plain OBR without mvn urls in a maven build it sucks a lot. This is why Peter did the mvn based repos in bndtools 3.3.0. I discussed a lot with him about these. The current state works quite well but unfortunately it is completely outside the OBR spec. So I hope we see improvements in the spec so we can have both a solution that is sec compliant and works well for maven builds.

Actually I think this is not only about maven builds. It is about using maven repos which is also very relevant for gradle and other builds.

Christian



2017-06-15 8:51 GMT+02:00 David Leangen <[hidden email]>:

Hi Christian,

Thanks for this information.

> There is one big downside to OBR unfortunately. Inside OBR the content of bundles needs to be refered as a url. While karaf can work with mvn urls other systems like bndtools can not. Now the problem is that you can not populate an OBR well without maven urls if your artifacts reside in maven and you also want to use maven SNAPSHOTs.

My understanding is that this is very much by design. The reason is to have a “strongly” curated repository to promote well-behaved and predictable builds and deployments.

I could be wrong. Maybe would be good to verify with some of the alliance peeps.


> Another solution is to consider the OBR just as a cache and define the list of bundles in a pom. Bndtools is going that way and I think karaf could do the same. So a feature could simply point to a pom or when deployed to maven we could assume to use the pom of the project the feature resides in as default. This would allow to simply define OBRs by using a pom.

You think bndtools is going that way? Or rather, they are just trying to bring in more Maven people? I don’t understand what the purpose would be. If the bundles are already defined in the OBR, why have a second list?


Cheers,
=David



> On Jun 15, 2017, at 3:18 PM, Christian Schneider <[hidden email]> wrote:
>
> There is one big downside to OBR unfortunately. Inside OBR the content of bundles needs to be refered as a url. While karaf can work with mvn urls other systems like bndtools can not. Now the problem is that you can not populate an OBR well without maven urls if your artifacts reside in maven and you also want to use maven SNAPSHOTs.
>
> So I think there is a gap in OBR that needs to be closed. One solution would be to add the mvn urls to the spec so they are universally accepted.
>
> Another solution is to consider the OBR just as a cache and define the list of bundles in a pom. Bndtools is going that way and I think karaf could do the same. So a feature could simply point to a pom or when deployed to maven we could assume to use the pom of the project the feature resides in as default. This would allow to simply define OBRs by using a pom.
>
> Christian
>
>
> 2017-06-14 23:58 GMT+02:00 David Leangen <[hidden email]>:
>
> Hi Guillaume,
>
> Thank you for this assessment.
>
> I agree that Features adds value. Your post explains a lot of good reasons why this is so.
>
> My question is more about “why compete with OBR?”. Instead of embracing OBR and working on top of it, it seems that Features want to replace it. This is causing me to have to make a lot of choices in my deployment mechanism.
>
> Features could be really helpful for deployment by managing OBRs, configurations, and other deployment information. They could also manage versioning better etc. Maybe something like what Apache ACE was trying to do. However, instead of “adding” value, currently Features are completely replacing OBR, which I find interesting. But I understand that there is some legacy to this. Now that it works, it would take some momentum to move to a more standards-based approach.
>
>
> My current issue is: how can I use Features for Continuous Deployment? I am having trouble with automation. That is what got me interested in the idea behind the Features…
>
>
> Cheers,
> =David
>
>
>
>> On Jun 15, 2017, at 6:38 AM, Guillaume Nodet <[hidden email]> wrote:
>>
>> So if you consider an OBR as being a collection of resources, each resource having capabilities and requirements, then a feature repository is an OBR repository, it's just the syntax is more concise.
>> If you want to look at what the repository look like, you can launch the following command in karaf:
>>   > feature:install --store resolution.json --verbose --simulate  scr
>>
>> Then, look at the resolution.json file, it will contain the OBR repository used by the resolver in a json format.  The xml syntax would be slightly different of course, and a bit more verbose too, but roughly the same data.
>> I do think the features syntax is a bit more understandable.
>>
>> But you do not want to compare OBR and features.  I haven't seen any OBR repository used which would contain other things than just OSGi bundles.
>> Features is more a deployment artifact than an OSGi bundle, so it's more to be compared with OSGi subsystems.
>>
>> With pure OBR, you can't group bundles together, you usually don't want to edit such a repository file manually, so at the end, you can never really hack the content.  It has to be generated, and is mostly generated only from a set of OSGi bundles.  You can't capture all the constraints by using bundles only.
>>
>> 2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]>:
>>
>> Hi!
>>
>> I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.
>>
>> An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.
>>
>> A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.
>>
>>
>> So many similarities!
>>
>>
>> I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?
>>
>> Is it to try to force lock-in to Karaf? Or am I completely missing something?
>>
>>
>> Thanks for explaining! :-)
>>
>>
>> Cheers,
>> =David
>>
>>
>>
>>
>>
>> --
>> ------------------------
>> Guillaume Nodet
>>
>
>
>
>
> --
> --
> Christian Schneider
> http://www.liquid-reality.de
>
> Open Source Architect
> http://www.talend.com




--
--
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com
Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

Guillaume Nodet-2
In reply to this post by dleangen


2017-06-15 9:00 GMT+02:00 David Leangen <[hidden email]>:

Thanks Guillaume. A lot of good food for thought.

Again, I'm not sure why you see features competing with OBR.

Coming from bnd/EnRoute, in my build environment I can create different OBRs, and “release" to them. I can use a different OBR per workspace, which means that I can develop each “feature" separately, and release it to its own OBR. Thus, an OBR defines a “feature”.

No, it defines a repository, and that's fine.  A feature is more than a list of bundles.
OBR is useful when you want to install individual bundles.
For example, if you want to deploy a web application, you could write a feature which will have a dependency on the karaf "war" feature.  When you install your feature, it will ensure the web app support is deployed correctly.
With OBR, you'll have a dependency on the servlet api, so the servlet api bundle will be deployed, and that's all.  
Of course, if you're only interested in the simple use cases, you can use an OBR repo and it will work. 

If you want to experiment deployment based on an OBR repo + a requirement, you could use the following file and drop it in the deploy folder:

    <resource-repository>[url to the OBR repo]</resource-repository>
    <feature name="[feature name]" install="auto">
        <requirement>[the requirement]</requirement>
    </feature>
</features> 

If that's really all you need, it should be very easy to write a small karaf command that would do the same with the 3 parameters: a name, and obr repo url and a requirement.

 

What I would like to be able to do is simply push the OBR into my container, without having any extra layer. When I tried in the past, there were some bugs and it did not work out very successfully. Maybe things have changed since then…

Using Apache ACE as an example, an OBR can be used in a way that is very similar to a Feature. It works extremely well in the EnRoute environment, and cuts down a lot of noise, IMO.

I haven't used ACE since a long time.  It has very strong limitations because it's based on DeploymentAdmin which do not support deploying a bundle with multiple versions.  This is a show-stopper for me.
 

A feature descriptor supports the <resource-repository> element. The content of this element is an url to a OBR repository (eventually prefixed with json: or xml:).  All features defined in the features repository will behave as if they have the resources defined in the OBR repository with <bundle dependency="true">xxx</bundle>.

Ok, either I did not know that, or I forgot about that. I’ll take a look. IIRC I think this is what didn’t work for me when I tried some time ago.

I'd be happy to fix any bug.
 

You can also provide a list of global repositories and configure it in etc/org.apache.karaf.features.cfg with the resourceRepositories key (a command separated list of urls).

The problem with this approach is, unless something has changed, I have to restart my container each time there is a change. I would also have to figure out a way to push the changes to Karaf. Perhaps this is easier than I thought, but I did not find a good way last time I look into this.

Yes, that's a limited support.  The reason is see problem in using this with not much value.  The first option is preferrable in Karaf imho.
 

Also, there's absolutely no value in the OBR bundle description compared to a manifest.  It contains the same information in a different form and is usually generated from the manifest.  Fwiw, when a feature has a reference to a bundle, we do generate the OSGi Resource from the manifest directly without using the OBR xml  description, but it's the same.

True, but then again my understanding is that a properly curated OBR should provide a set of bundles, and should not change (which is why the ID gets updated each time there is even a minor change). The information could very well come from the bundles, but if the bundles don’t change and the index is trusted, then the pre-parsed manifest info is already in the index, so it’s a duplicate effort to redo the parsing. No?

Actually, I think it's faster to parse a manifest than to the OBR xml, given the verbosity of the xml. Plus, it's an additional file to manage, so it has to provide some value, else it's not worth the pain.
 


Perhaps the Karaf/Maven way of thinking is very different from the bnd way? Or maybe there has been convergence over the past few years, but the tooling has not kept up? (That is what I am trying to figure out, since I don’t know Maven very deeply, and based on what I understand, I think I prefer the bnd way.)

Yeah, karaf tooling is definitely lacking I think.
 


Cheers,
=David



On Jun 15, 2017, at 3:27 PM, Guillaume Nodet <[hidden email]> wrote:

Again, I'm not sure why you see features competing with OBR.
We do actually leverage OBR internally, and we can also leverage it externally though it's not much advertised, but it was hinted by Jean-Baptiste when he talked about Cave.

OBR is the repository specification, so it defines a Repository interface.  We do have multiple implementations of it in Karaf : the standardized XML one, a JSON based repository implementation and an in-vm one.

A feature descriptor supports the <resource-repository> element. The content of this element is an url to a OBR repository (eventually prefixed with json: or xml:).  All features defined in the features repository will behave as if they have the resources defined in the OBR repository with <bundle dependency="true">xxx</bundle>.

You can also provide a list of global repositories and configure it in etc/org.apache.karaf.features.cfg with the resourceRepositories key (a command separated list of urls).

Also, there's absolutely no value in the OBR bundle description compared to a manifest.  It contains the same information in a different form and is usually generated from the manifest.  Fwiw, when a feature has a reference to a bundle, we do generate the OSGi Resource from the manifest directly without using the OBR xml  description, but it's the same.

I'm really not sure what we could do to leverage OBR more...


2017-06-14 23:58 GMT+02:00 David Leangen <[hidden email]>:

Hi Guillaume,

Thank you for this assessment.

I agree that Features adds value. Your post explains a lot of good reasons why this is so.

My question is more about “why compete with OBR?”. Instead of embracing OBR and working on top of it, it seems that Features want to replace it. This is causing me to have to make a lot of choices in my deployment mechanism.

Features could be really helpful for deployment by managing OBRs, configurations, and other deployment information. They could also manage versioning better etc. Maybe something like what Apache ACE was trying to do. However, instead of “adding” value, currently Features are completely replacing OBR, which I find interesting. But I understand that there is some legacy to this. Now that it works, it would take some momentum to move to a more standards-based approach.


My current issue is: how can I use Features for Continuous Deployment? I am having trouble with automation. That is what got me interested in the idea behind the Features…


Cheers,
=David



On Jun 15, 2017, at 6:38 AM, Guillaume Nodet <[hidden email]> wrote:

So if you consider an OBR as being a collection of resources, each resource having capabilities and requirements, then a feature repository is an OBR repository, it's just the syntax is more concise.
If you want to look at what the repository look like, you can launch the following command in karaf:
  > feature:install --store resolution.json --verbose --simulate  scr

Then, look at the resolution.json file, it will contain the OBR repository used by the resolver in a json format.  The xml syntax would be slightly different of course, and a bit more verbose too, but roughly the same data.
I do think the features syntax is a bit more understandable.

But you do not want to compare OBR and features.  I haven't seen any OBR repository used which would contain other things than just OSGi bundles.
Features is more a deployment artifact than an OSGi bundle, so it's more to be compared with OSGi subsystems.

With pure OBR, you can't group bundles together, you usually don't want to edit such a repository file manually, so at the end, you can never really hack the content.  It has to be generated, and is mostly generated only from a set of OSGi bundles.  You can't capture all the constraints by using bundles only.

2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]>:

Hi!

I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.

An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.

A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.


So many similarities!


I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?

Is it to try to force lock-in to Karaf? Or am I completely missing something?


Thanks for explaining! :-)


Cheers,
=David





--
------------------------
Guillaume Nodet





--
------------------------
Guillaume Nodet





--
------------------------
Guillaume Nodet

Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

dleangen

Hi Guillaume,

Ok, that gives me a lot to chew on for now. I’ll give it a good try before I make any more speculative comments. :-)


Cheers,
=David


On Jun 15, 2017, at 5:23 PM, Guillaume Nodet <[hidden email]> wrote:



2017-06-15 9:00 GMT+02:00 David Leangen <[hidden email]>:

Thanks Guillaume. A lot of good food for thought.

Again, I'm not sure why you see features competing with OBR.

Coming from bnd/EnRoute, in my build environment I can create different OBRs, and “release" to them. I can use a different OBR per workspace, which means that I can develop each “feature" separately, and release it to its own OBR. Thus, an OBR defines a “feature”.

No, it defines a repository, and that's fine.  A feature is more than a list of bundles.
OBR is useful when you want to install individual bundles.
For example, if you want to deploy a web application, you could write a feature which will have a dependency on the karaf "war" feature.  When you install your feature, it will ensure the web app support is deployed correctly.
With OBR, you'll have a dependency on the servlet api, so the servlet api bundle will be deployed, and that's all.  
Of course, if you're only interested in the simple use cases, you can use an OBR repo and it will work. 

If you want to experiment deployment based on an OBR repo + a requirement, you could use the following file and drop it in the deploy folder:

    <resource-repository>[url to the OBR repo]</resource-repository>
    <feature name="[feature name]" install="auto">
        <requirement>[the requirement]</requirement>
    </feature>
</features> 

If that's really all you need, it should be very easy to write a small karaf command that would do the same with the 3 parameters: a name, and obr repo url and a requirement.

 

What I would like to be able to do is simply push the OBR into my container, without having any extra layer. When I tried in the past, there were some bugs and it did not work out very successfully. Maybe things have changed since then…

Using Apache ACE as an example, an OBR can be used in a way that is very similar to a Feature. It works extremely well in the EnRoute environment, and cuts down a lot of noise, IMO.

I haven't used ACE since a long time.  It has very strong limitations because it's based on DeploymentAdmin which do not support deploying a bundle with multiple versions.  This is a show-stopper for me.
 

A feature descriptor supports the <resource-repository> element. The content of this element is an url to a OBR repository (eventually prefixed with json: or xml:).  All features defined in the features repository will behave as if they have the resources defined in the OBR repository with <bundle dependency="true">xxx</bundle>.

Ok, either I did not know that, or I forgot about that. I’ll take a look. IIRC I think this is what didn’t work for me when I tried some time ago.

I'd be happy to fix any bug.
 

You can also provide a list of global repositories and configure it in etc/org.apache.karaf.features.cfg with the resourceRepositories key (a command separated list of urls).

The problem with this approach is, unless something has changed, I have to restart my container each time there is a change. I would also have to figure out a way to push the changes to Karaf. Perhaps this is easier than I thought, but I did not find a good way last time I look into this.

Yes, that's a limited support.  The reason is see problem in using this with not much value.  The first option is preferrable in Karaf imho.
 

Also, there's absolutely no value in the OBR bundle description compared to a manifest.  It contains the same information in a different form and is usually generated from the manifest.  Fwiw, when a feature has a reference to a bundle, we do generate the OSGi Resource from the manifest directly without using the OBR xml  description, but it's the same.

True, but then again my understanding is that a properly curated OBR should provide a set of bundles, and should not change (which is why the ID gets updated each time there is even a minor change). The information could very well come from the bundles, but if the bundles don’t change and the index is trusted, then the pre-parsed manifest info is already in the index, so it’s a duplicate effort to redo the parsing. No?

Actually, I think it's faster to parse a manifest than to the OBR xml, given the verbosity of the xml. Plus, it's an additional file to manage, so it has to provide some value, else it's not worth the pain.
 


Perhaps the Karaf/Maven way of thinking is very different from the bnd way? Or maybe there has been convergence over the past few years, but the tooling has not kept up? (That is what I am trying to figure out, since I don’t know Maven very deeply, and based on what I understand, I think I prefer the bnd way.)

Yeah, karaf tooling is definitely lacking I think.
 


Cheers,
=David



On Jun 15, 2017, at 3:27 PM, Guillaume Nodet <[hidden email]> wrote:

Again, I'm not sure why you see features competing with OBR.
We do actually leverage OBR internally, and we can also leverage it externally though it's not much advertised, but it was hinted by Jean-Baptiste when he talked about Cave.

OBR is the repository specification, so it defines a Repository interface.  We do have multiple implementations of it in Karaf : the standardized XML one, a JSON based repository implementation and an in-vm one.

A feature descriptor supports the <resource-repository> element. The content of this element is an url to a OBR repository (eventually prefixed with json: or xml:).  All features defined in the features repository will behave as if they have the resources defined in the OBR repository with <bundle dependency="true">xxx</bundle>.

You can also provide a list of global repositories and configure it in etc/org.apache.karaf.features.cfg with the resourceRepositories key (a command separated list of urls).

Also, there's absolutely no value in the OBR bundle description compared to a manifest.  It contains the same information in a different form and is usually generated from the manifest.  Fwiw, when a feature has a reference to a bundle, we do generate the OSGi Resource from the manifest directly without using the OBR xml  description, but it's the same.

I'm really not sure what we could do to leverage OBR more...


2017-06-14 23:58 GMT+02:00 David Leangen <[hidden email]>:

Hi Guillaume,

Thank you for this assessment.

I agree that Features adds value. Your post explains a lot of good reasons why this is so.

My question is more about “why compete with OBR?”. Instead of embracing OBR and working on top of it, it seems that Features want to replace it. This is causing me to have to make a lot of choices in my deployment mechanism.

Features could be really helpful for deployment by managing OBRs, configurations, and other deployment information. They could also manage versioning better etc. Maybe something like what Apache ACE was trying to do. However, instead of “adding” value, currently Features are completely replacing OBR, which I find interesting. But I understand that there is some legacy to this. Now that it works, it would take some momentum to move to a more standards-based approach.


My current issue is: how can I use Features for Continuous Deployment? I am having trouble with automation. That is what got me interested in the idea behind the Features…


Cheers,
=David



On Jun 15, 2017, at 6:38 AM, Guillaume Nodet <[hidden email]> wrote:

So if you consider an OBR as being a collection of resources, each resource having capabilities and requirements, then a feature repository is an OBR repository, it's just the syntax is more concise.
If you want to look at what the repository look like, you can launch the following command in karaf:
  > feature:install --store resolution.json --verbose --simulate  scr

Then, look at the resolution.json file, it will contain the OBR repository used by the resolver in a json format.  The xml syntax would be slightly different of course, and a bit more verbose too, but roughly the same data.
I do think the features syntax is a bit more understandable.

But you do not want to compare OBR and features.  I haven't seen any OBR repository used which would contain other things than just OSGi bundles.
Features is more a deployment artifact than an OSGi bundle, so it's more to be compared with OSGi subsystems.

With pure OBR, you can't group bundles together, you usually don't want to edit such a repository file manually, so at the end, you can never really hack the content.  It has to be generated, and is mostly generated only from a set of OSGi bundles.  You can't capture all the constraints by using bundles only.

2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]>:

Hi!

I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.

An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.

A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.


So many similarities!


I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?

Is it to try to force lock-in to Karaf? Or am I completely missing something?


Thanks for explaining! :-)


Cheers,
=David





--
------------------------
Guillaume Nodet





--
------------------------
Guillaume Nodet





--
------------------------
Guillaume Nodet


Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

dleangen
In reply to this post by cschneider

Hi Christian,

I don’t know. I think I rather like the idea of the curated repositories that I know won’t shift over time. I can package up a small OBR (with URLs related to the index file) and deploy it somewhere. I can have very fine grained management of my “sets” (I’ll refrain from calling them “features”), including versioned “sets” so I can easily roll back to a previously known working state if needed.

I believe that this is how bnd/enroute is intended to work.

Otherwise, you get pure chaos, like the npm world, which works one day and is broken the next because a butterfly in China flapped its wings.

(By the way, OBR or Maven, either way I don’t mind, but it’s the predictability/stability that is important to me.)


Cheers,
=David



On Jun 15, 2017, at 4:54 PM, Christian Schneider <[hidden email]> wrote:

Without mvn urls you can either use file urls or http urls. Both suck in some important regards:

A file url requires that the refered jar resides near the OBR. Today most people work with maven repos. So a natural place for an artifact is the local maven repository. It is difficult to point a file url to it as it will always be depending on the user setup. 
As a workaround file urls worked well for me in bndtools. What I did was to always generrate my OBR content during the build so it was no problem that the urls depend on my setup.
This means though that you can never publish the contents of the OBR. The good thing is that you can work with maven SNAPSHOTs this way.

For http urls you can point to the http url of a jar in a maven repo like maven central .. there are many downsides though.
1. The url is absolute. So you always point to a certain external resource. So you need additional measures if you want to cache the artifact locally.
2. For maven snapshots the urls in a remote maven repo always change. So you can not point to the newest snapshot which you want to do during active development
3. These absolute urls make you dependent on the external repo availability and you need to open your firewall to access it.

mvn urls on the other hand work extremly well in enterprise environments as you can leverage local mvn proxies. You can also access secured reporitories that require authentication.

So if you really try to use plain OBR without mvn urls in a maven build it sucks a lot. This is why Peter did the mvn based repos in bndtools 3.3.0. I discussed a lot with him about these. The current state works quite well but unfortunately it is completely outside the OBR spec. So I hope we see improvements in the spec so we can have both a solution that is sec compliant and works well for maven builds.

Actually I think this is not only about maven builds. It is about using maven repos which is also very relevant for gradle and other builds.

Christian



2017-06-15 8:51 GMT+02:00 David Leangen <[hidden email]>:

Hi Christian,

Thanks for this information.

> There is one big downside to OBR unfortunately. Inside OBR the content of bundles needs to be refered as a url. While karaf can work with mvn urls other systems like bndtools can not. Now the problem is that you can not populate an OBR well without maven urls if your artifacts reside in maven and you also want to use maven SNAPSHOTs.

My understanding is that this is very much by design. The reason is to have a “strongly” curated repository to promote well-behaved and predictable builds and deployments.

I could be wrong. Maybe would be good to verify with some of the alliance peeps.


> Another solution is to consider the OBR just as a cache and define the list of bundles in a pom. Bndtools is going that way and I think karaf could do the same. So a feature could simply point to a pom or when deployed to maven we could assume to use the pom of the project the feature resides in as default. This would allow to simply define OBRs by using a pom.

You think bndtools is going that way? Or rather, they are just trying to bring in more Maven people? I don’t understand what the purpose would be. If the bundles are already defined in the OBR, why have a second list?


Cheers,
=David



> On Jun 15, 2017, at 3:18 PM, Christian Schneider <[hidden email]> wrote:
>
> There is one big downside to OBR unfortunately. Inside OBR the content of bundles needs to be refered as a url. While karaf can work with mvn urls other systems like bndtools can not. Now the problem is that you can not populate an OBR well without maven urls if your artifacts reside in maven and you also want to use maven SNAPSHOTs.
>
> So I think there is a gap in OBR that needs to be closed. One solution would be to add the mvn urls to the spec so they are universally accepted.
>
> Another solution is to consider the OBR just as a cache and define the list of bundles in a pom. Bndtools is going that way and I think karaf could do the same. So a feature could simply point to a pom or when deployed to maven we could assume to use the pom of the project the feature resides in as default. This would allow to simply define OBRs by using a pom.
>
> Christian
>
>
> 2017-06-14 23:58 GMT+02:00 David Leangen <[hidden email]>:
>
> Hi Guillaume,
>
> Thank you for this assessment.
>
> I agree that Features adds value. Your post explains a lot of good reasons why this is so.
>
> My question is more about “why compete with OBR?”. Instead of embracing OBR and working on top of it, it seems that Features want to replace it. This is causing me to have to make a lot of choices in my deployment mechanism.
>
> Features could be really helpful for deployment by managing OBRs, configurations, and other deployment information. They could also manage versioning better etc. Maybe something like what Apache ACE was trying to do. However, instead of “adding” value, currently Features are completely replacing OBR, which I find interesting. But I understand that there is some legacy to this. Now that it works, it would take some momentum to move to a more standards-based approach.
>
>
> My current issue is: how can I use Features for Continuous Deployment? I am having trouble with automation. That is what got me interested in the idea behind the Features…
>
>
> Cheers,
> =David
>
>
>
>> On Jun 15, 2017, at 6:38 AM, Guillaume Nodet <[hidden email]> wrote:
>>
>> So if you consider an OBR as being a collection of resources, each resource having capabilities and requirements, then a feature repository is an OBR repository, it's just the syntax is more concise.
>> If you want to look at what the repository look like, you can launch the following command in karaf:
>>   > feature:install --store resolution.json --verbose --simulate  scr
>>
>> Then, look at the resolution.json file, it will contain the OBR repository used by the resolver in a json format.  The xml syntax would be slightly different of course, and a bit more verbose too, but roughly the same data.
>> I do think the features syntax is a bit more understandable.
>>
>> But you do not want to compare OBR and features.  I haven't seen any OBR repository used which would contain other things than just OSGi bundles.
>> Features is more a deployment artifact than an OSGi bundle, so it's more to be compared with OSGi subsystems.
>>
>> With pure OBR, you can't group bundles together, you usually don't want to edit such a repository file manually, so at the end, you can never really hack the content.  It has to be generated, and is mostly generated only from a set of OSGi bundles.  You can't capture all the constraints by using bundles only.
>>
>> 2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]>:
>>
>> Hi!
>>
>> I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.
>>
>> An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.
>>
>> A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.
>>
>>
>> So many similarities!
>>
>>
>> I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?
>>
>> Is it to try to force lock-in to Karaf? Or am I completely missing something?
>>
>>
>> Thanks for explaining! :-)
>>
>>
>> Cheers,
>> =David
>>
>>
>>
>>
>>
>> --
>> ------------------------
>> Guillaume Nodet
>>
>
>
>
>
> --
> --
> Christian Schneider
> http://www.liquid-reality.de
>
> Open Source Architect
> http://www.talend.com




--
--
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com

Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

cschneider
You need both. During active development you want to use the newest dependency .. at least for your own artifacts .. sometimes also for remote ones. Then once you do a release you of course want it to be completely static and not change over time.

Christian

2017-06-15 13:12 GMT+02:00 David Leangen <[hidden email]>:

Hi Christian,

I don’t know. I think I rather like the idea of the curated repositories that I know won’t shift over time. I can package up a small OBR (with URLs related to the index file) and deploy it somewhere. I can have very fine grained management of my “sets” (I’ll refrain from calling them “features”), including versioned “sets” so I can easily roll back to a previously known working state if needed.

I believe that this is how bnd/enroute is intended to work.

Otherwise, you get pure chaos, like the npm world, which works one day and is broken the next because a butterfly in China flapped its wings.

(By the way, OBR or Maven, either way I don’t mind, but it’s the predictability/stability that is important to me.)


Cheers,
=David



On Jun 15, 2017, at 4:54 PM, Christian Schneider <[hidden email]> wrote:

Without mvn urls you can either use file urls or http urls. Both suck in some important regards:

A file url requires that the refered jar resides near the OBR. Today most people work with maven repos. So a natural place for an artifact is the local maven repository. It is difficult to point a file url to it as it will always be depending on the user setup. 
As a workaround file urls worked well for me in bndtools. What I did was to always generrate my OBR content during the build so it was no problem that the urls depend on my setup.
This means though that you can never publish the contents of the OBR. The good thing is that you can work with maven SNAPSHOTs this way.

For http urls you can point to the http url of a jar in a maven repo like maven central .. there are many downsides though.
1. The url is absolute. So you always point to a certain external resource. So you need additional measures if you want to cache the artifact locally.
2. For maven snapshots the urls in a remote maven repo always change. So you can not point to the newest snapshot which you want to do during active development
3. These absolute urls make you dependent on the external repo availability and you need to open your firewall to access it.

mvn urls on the other hand work extremly well in enterprise environments as you can leverage local mvn proxies. You can also access secured reporitories that require authentication.

So if you really try to use plain OBR without mvn urls in a maven build it sucks a lot. This is why Peter did the mvn based repos in bndtools 3.3.0. I discussed a lot with him about these. The current state works quite well but unfortunately it is completely outside the OBR spec. So I hope we see improvements in the spec so we can have both a solution that is sec compliant and works well for maven builds.

Actually I think this is not only about maven builds. It is about using maven repos which is also very relevant for gradle and other builds.

Christian



2017-06-15 8:51 GMT+02:00 David Leangen <[hidden email]>:

Hi Christian,

Thanks for this information.

> There is one big downside to OBR unfortunately. Inside OBR the content of bundles needs to be refered as a url. While karaf can work with mvn urls other systems like bndtools can not. Now the problem is that you can not populate an OBR well without maven urls if your artifacts reside in maven and you also want to use maven SNAPSHOTs.

My understanding is that this is very much by design. The reason is to have a “strongly” curated repository to promote well-behaved and predictable builds and deployments.

I could be wrong. Maybe would be good to verify with some of the alliance peeps.


> Another solution is to consider the OBR just as a cache and define the list of bundles in a pom. Bndtools is going that way and I think karaf could do the same. So a feature could simply point to a pom or when deployed to maven we could assume to use the pom of the project the feature resides in as default. This would allow to simply define OBRs by using a pom.

You think bndtools is going that way? Or rather, they are just trying to bring in more Maven people? I don’t understand what the purpose would be. If the bundles are already defined in the OBR, why have a second list?


Cheers,
=David



> On Jun 15, 2017, at 3:18 PM, Christian Schneider <[hidden email]> wrote:
>
> There is one big downside to OBR unfortunately. Inside OBR the content of bundles needs to be refered as a url. While karaf can work with mvn urls other systems like bndtools can not. Now the problem is that you can not populate an OBR well without maven urls if your artifacts reside in maven and you also want to use maven SNAPSHOTs.
>
> So I think there is a gap in OBR that needs to be closed. One solution would be to add the mvn urls to the spec so they are universally accepted.
>
> Another solution is to consider the OBR just as a cache and define the list of bundles in a pom. Bndtools is going that way and I think karaf could do the same. So a feature could simply point to a pom or when deployed to maven we could assume to use the pom of the project the feature resides in as default. This would allow to simply define OBRs by using a pom.
>
> Christian
>
>
> 2017-06-14 23:58 GMT+02:00 David Leangen <[hidden email]>:
>
> Hi Guillaume,
>
> Thank you for this assessment.
>
> I agree that Features adds value. Your post explains a lot of good reasons why this is so.
>
> My question is more about “why compete with OBR?”. Instead of embracing OBR and working on top of it, it seems that Features want to replace it. This is causing me to have to make a lot of choices in my deployment mechanism.
>
> Features could be really helpful for deployment by managing OBRs, configurations, and other deployment information. They could also manage versioning better etc. Maybe something like what Apache ACE was trying to do. However, instead of “adding” value, currently Features are completely replacing OBR, which I find interesting. But I understand that there is some legacy to this. Now that it works, it would take some momentum to move to a more standards-based approach.
>
>
> My current issue is: how can I use Features for Continuous Deployment? I am having trouble with automation. That is what got me interested in the idea behind the Features…
>
>
> Cheers,
> =David
>
>
>
>> On Jun 15, 2017, at 6:38 AM, Guillaume Nodet <[hidden email]> wrote:
>>
>> So if you consider an OBR as being a collection of resources, each resource having capabilities and requirements, then a feature repository is an OBR repository, it's just the syntax is more concise.
>> If you want to look at what the repository look like, you can launch the following command in karaf:
>>   > feature:install --store resolution.json --verbose --simulate  scr
>>
>> Then, look at the resolution.json file, it will contain the OBR repository used by the resolver in a json format.  The xml syntax would be slightly different of course, and a bit more verbose too, but roughly the same data.
>> I do think the features syntax is a bit more understandable.
>>
>> But you do not want to compare OBR and features.  I haven't seen any OBR repository used which would contain other things than just OSGi bundles.
>> Features is more a deployment artifact than an OSGi bundle, so it's more to be compared with OSGi subsystems.
>>
>> With pure OBR, you can't group bundles together, you usually don't want to edit such a repository file manually, so at the end, you can never really hack the content.  It has to be generated, and is mostly generated only from a set of OSGi bundles.  You can't capture all the constraints by using bundles only.
>>
>> 2017-06-14 7:49 GMT+02:00 David Leangen <[hidden email]>:
>>
>> Hi!
>>
>> I am trying to wrap my head around the differences between an OBR and a Karaf Feature. The concepts seem to be overlapping.
>>
>> An OBR has an index of the contained bundles, as well as meta information, which includes requirements and capabilities. An OBR is therefore very useful for resolving bundles, and partitioning bundles into some kind of category. It can also be versioned, and can contained different versions of bundles. An OBR could potentially be used to keep snapshots of system releases. I believe that this is somewhat how Apache ACE works. (A Distribution can be rolled back by simply referring to a different OBR and allowing the system to re-resolve.) The actual bundles need to be stored somewhere. The OBR index needs to provide links to that storage.
>>
>> A Karaf Feature is basically an index of bundles (and configurations), too. I think that it can also be versioned, and can contain different versions of bundles. Like an OBR, it is very useful for partitioning bundles into some kind of category, so the groups of bundles can be manipulated as a single unit. Just like an OBR, the Karaf Feature also needs to provide a link to the bundles. AFAIU, resolution is done somehow in Karaf, based on the bundles available via the Features, so in the end the entire mechanism seems almost identical to what the OBR is doing.
>>
>>
>> So many similarities!
>>
>>
>> I understand that a Feature can include configurations, which is nice, but why have a competing non-official standard against an official standard? If configurations is the only problem, then why not build it on top of OBRs, rather than creating something completely new and different and competing?
>>
>> Is it to try to force lock-in to Karaf? Or am I completely missing something?
>>
>>
>> Thanks for explaining! :-)
>>
>>
>> Cheers,
>> =David
>>
>>
>>
>>
>>
>> --
>> ------------------------
>> Guillaume Nodet
>>
>
>
>
>
> --
> --
> Christian Schneider
> http://www.liquid-reality.de
>
> Open Source Architect
> http://www.talend.com




--
--
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com




--
--
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com
Reply | Threaded
Open this post in threaded view
|

Re: Karaf Feature vs. OBR

Steinar Bang
In reply to this post by dleangen
>>>>> David Leangen <[hidden email]>:

> My current issue is: how can I use Features for Continuous Deployment?
> I am having trouble with automation. That is what got me interested in
> the idea behind the Features…

It doesn't involve features, except for the installation, but I do this:
 1. Use maven to build the bundles (and the features)
 2. Use a -SNAPSHOT version
 3. Create a new version and push to github
 4. As the user karaf is running under (actually user "karaf" on my
    debian server):
     a. Clone the github repo
     b. Install the features
     c. Do the command "bundle:watch *" (which makes karaf keep an eye
        out for updates to -SNAPSHOT version'ed bundles in user
        "karaf"'s local repository, ie ~karaf/.m2/repository/ )
  5. When I want to deploy an update, I:
     a. Push it to github
     b. On the server "ssh -p 8101 karaf@localhost" (to log in as user
        karaf)
     c. From the karaf console run shell script that cd's to the cloned
        git project, do a git pull, followed by a "mvn clean install"
     d. Once new versions of the -SNAPSHOT bundles are installed into
        ~karaf/.m2/repository, karaf will pick them up and reinstall
        them

My intention is to replace the manual step 5b. with a github webhook
(triggering the shell script doing the build from the karaf console has
been a proof of concept for this).

123