Hi Ryan,

it's what I thought: the cap/req are splitted in two repositories, where
each one doesn't know each other ;)

Here you have different options:

1. You can load all features repository in your Karaf distribution (in
etc/org.apache.karaf.features.cfg)
2. You can refer one repository in another one using <repository/> tag
3. You can use Cave feature gateway to gather all features in one.

Regards
JB

On 20/06/2019 14:57, Ryan Moquin wrote:
> Sure, I figured I would test with a simple example so I can make sure
> I'm not doing anything stupid (I NEEEEEVER do anything stupid).  If I
> created a features xml like this:
> 
> ----------------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <features name="${project.artifactId}-${project.version}"
> xmlns="http://karaf.apache.org/xmlns/features/v1.5.0";
>           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>          
> xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.5.0
> http://karaf.apache.org/xmlns/features/v1.5.0";>
>  
>   <feature name="test1" version="${project.version}">
>     <requirement>test.env;filter:="(env=np)"</requirement>
>   </feature>
> 
>   <feature name="test2" version="${project.version}">
>     <feature dependency="true">test3</feature>
>   </feature>
> 
>   <feature name="test3" version="${project.version}">
>     <capability>test.env;env=np</capability>
>   </feature>
> </features>
> ---------------------------------------------
> 
> It works as expected.  If I do this:
> 
> --------------------------------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <features name="${project.artifactId}-${project.version}"
> xmlns="http://karaf.apache.org/xmlns/features/v1.5.0";
>           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>          
> xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.5.0
> http://karaf.apache.org/xmlns/features/v1.5.0";>
> 
>  
> <repository>mvn:${project.groupId}/test23/${project.version}/xml/features</repository>
>  
>   <feature name="test1" version="${project.version}">
>     <requirement>test.env;filter:="(env=np)"</requirement>
>   </feature>
> </features>
> --------------------------------------------------------------------------
> and
> --------------------------------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <features name="${project.artifactId}-${project.version}"
> xmlns="http://karaf.apache.org/xmlns/features/v1.5.0";
>           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>          
> xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.5.0
> http://karaf.apache.org/xmlns/features/v1.5.0";>
> 
>   <feature name="test2" version="${project.version}">
>     <feature dependency="true">test3</feature>
>   </feature>
> 
>   <feature name="test3" version="${project.version}">
>     <capability>test.env;env=np</capability>
>   </feature>
> </features>
> --------------------------------------------------------------------------
> 
> Then the requirement can't be resolved.  I can however install the test2
> feature so I know the test23 repo was added.  What is curious to me
> though, is why if the above doesn't work, why I don't get a failure when
> I verify the features for the above.  I figured by referencing test2
> (which lives in the other features.xml in the second case), it was
> discover that it provides the required capability.
> 
> In reading the Karaf docs again (which I appreciate because they are
> quite good and I know docs are time consuming and a pain to write :))
> I'm wondering if I have to install all the features and bundles in the
> other features xml but not auto-start them (I think I saw an option for
> that)?
> 
> Thanks!
> Ryan
> 
> On Thu, Jun 20, 2019 at 1:17 AM Jean-Baptiste Onofré <[email protected]
> <mailto:[email protected]>> wrote:
> 
>     Hi Ryan,
> 
>     Do you mean you are using resources repository (define in
>     etc/org.apache.karaf.features.cfg) ?
> 
>     A features repository can also contains capability and requirements.
> 
>     To be able to find the req/cap, the resolver needs to know the cap/req.
>     If they are splitted in different repositories, then you have first to
>     "load" the repositories to be visible by the resolver. Else the resolver
>     won't know "where" the cap is provided.
> 
>     Cave can help in two ways:
>     1. the features gateway is able to gather several features repositories
>     in a meta-global-one.
>     2. Cave can serve as resources repositories backend
> 
>     Can you share your test case in order for me to take a look ?
> 
>     Regards
>     JB
> 
>     On 19/06/2019 23:18, Ryan Moquin wrote:
>     > Hi JB,
>     >
>     > I decided to try the req/cap again.  The reason it didn't work for me
>     > before apparently is because a capability satisfying a requirement
>     isn't
>     > detected by the resolver if they are in different feature repositories
>     > (which is the same as a feature XML I believe).  I tried to
>     reference a
>     > feature as a dependency in a different repository but it wouldn't work
>     > unless I had it in the same repository.
>     >
>     > I'm not sure if that's by design or if something like Cave would be
>     > needed for that scenario.  Otherwise I need to rethink how I
>     handle the
>     > requirement and capabilities.  I am trying to keep separate feature
>     > repositories because if I aggregate, then it takes longer to
>     create the
>     > updated aggregate feature xml.
>     >
>     > Ryan
>     >
>     > On Sat, Jun 15, 2019, 12:01 PM Jean-Baptiste Onofré
>     <[email protected] <mailto:[email protected]>
>     > <mailto:[email protected] <mailto:[email protected]>>> wrote:
>     >
>     >     Hi Ryan,
>     >
>     >     I will provide a more complete answer (I don't have time right
>     now), but
>     >     you can take a look on the way we use cap/req in Pax Web (for
>     the HTTP
>     >     provider capability).
>     >
>     >     Basically, the cap/req are global in the feature resolver,
>     considering
>     >     the req/cap at feature level, but also at bundle level.
>     >
>     >     Regards
>     >     JB
>     >
>     >     On 15/06/2019 16:28, Ryan Moquin wrote:
>     >     > I apologize if this is a stupid question. I've been trying to
>     >     understand
>     >     > how to leverage capabilities and requirements in a way to allow
>     >     defining
>     >     > the provisioning of a system by specifying requirements in a
>     feature.
>     >     >
>     >     > I've read through the posts on the mailing list about it,
>     the docs and
>     >     > the karaf features.xml but haven't found the information I
>     am looking
>     >     > for.  I also tried some experiments with a bundle providing a
>     >     capability
>     >     > and a feature requiring it but it didn't seem to work.  I am
>     wondering
>     >     > if I am just over thinking or over complicating it in my head. 
>     >     Here are
>     >     > the questions:
>     >     >
>     >     > 1.  When a feature specifies a requirement, what is the
>     "scope" of
>     >     > resolution used by the feature resolver?  Meaning, does it
>     only pick
>     >     > from features specified within that feature with dependency=true
>     >     > specified?  Or from any feature defined in the features.xml
>     and any
>     >     > feature repository defined that provides a satisfying
>     capability?
>     >     >
>     >     > 2.  Can you specify a requirement in a feature for a requirement
>     >     > provided by a bundle?
>     >     >
>     >     > 3.  If a bundle or feature provides a capability, but you don't
>     >     specify
>     >     > you require it.  Does it always get considered for
>     installation if
>     >     it's
>     >     > in a feature that doesn't have dependency=true?
>     >     >
>     >     > Part of this is because I still can't understand when to use
>     >     > dependency=true for a feature.  I am primarily talking about
>     custom
>     >     > capabilities and requirements I make up myself for a system
>     to pull
>     >     > things in.
>     >     >
>     >     > Not sure if the above questions fully make sense, having a
>     hard time
>     >     > articulating exactly what I am trying to figure out.
>     >     >
>     >     > Thanks for any help!
>     >     >
>     >     > Ryan
>     >
>     >     --
>     >     Jean-Baptiste Onofré
>     >     [email protected] <mailto:[email protected]>
>     <mailto:[email protected] <mailto:[email protected]>>
>     >     http://blog.nanthrax.net
>     >     Talend - http://www.talend.com
>     >
> 
>     -- 
>     Jean-Baptiste Onofré
>     [email protected] <mailto:[email protected]>
>     http://blog.nanthrax.net
>     Talend - http://www.talend.com
> 

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

Reply via email to