I agree: if the "application" is exhaustive in term of requirements, and you define the resourcesRepositories, it should work.

Regards
JB

On 11/30/2015 11:51 AM, Guillaume Nodet wrote:
My understanding is that, as I explained in my earlier mail,
you don't need features at all.
If you have an "application bundle" and the xml repository, that should
be enough, you don't have to wrap them.

Could you please raise a JIRA and attach the artefacts needed to
"reproduce" the use case ? I.e. maybe a zip containing the xml
repository and the bundles, including the application bundle.
I'll investigate to make sure you can deploy it easily.

2015-11-30 11:39 GMT+01:00 David Leangen <apa...@leangen.net
<mailto:apa...@leangen.net>>:


    Hi,

    Wow! This list is really active. :-D

    I think Christian explains it quite well. Allow me to add in more
    concrete, low-level details to complement this explanation.

    First of all, I have a “bootstrapping" bundle, with no dependencies
    on any of my other bundles, but some dependencies on, for example,
    Karaf. This bundle handles the deployment functions described below.
    This bundle is set up as a boot feature in Karaf. Along with the
    things being discussed below, it will allow me to accomplish my
    objective.


    In my development environment, I have several bndtools workspaces in
    Eclipse. I believe this is quite typical in a bndtools environment.
    Each workspace usually (but not always) has an “application bundle”,
    whose purpose is to pull in all the requirements for the
    “application” (what is, I believe, essentially homologous to a Karaf
    feature, minus the configuration).

    In my enRoute application bundles, I created a KarafFeature
    annotation like this:

    @ProvideCapability(
             ns = "karaf.identity",
             value = "type=karaf.feature"
    )
    @Retention(RetentionPolicy.CLASS)
    public@interfaceKarafFeature
    {
         String name();
         String description();
         String version();
    }

    Used on my “application service” class:

    @RequireTestFoo
    @RequireTestBar
    @KarafFeature(
             name = “feature-name",
             description = “Short description of feature",
             version = “1.0.0"
    )
    public class TestInstallation
    {
    }

    The capability output via bnd to the Manifest:

       Provide-Capability: karaf.identity;description=“Short description
    of
    
feature";version:Version=“1.0.0";karaf.identity=feature-name;type="karaf.feature"

    [**Note:

    The requirement for a feature is already formalized in karaf:
    
osgi.identity;osgi.identity=feature-name;type=karaf.feature;version="version-range"

    I tried this, but apparently bnd does not like it, so in my
    implementation I changed it from “osgi.identity” to
    “karaf.identity”. I don’t know if this is a bug in bnd, or if Karaf
    is using osgi.identity for something it should not. :-)  ]

    bnd provides a “release” function, which creates an OBR with all the
    bundles from the workspace. This can be done via Eclipse or as a
    headless build from gradle. Thus, for each workspace, on the CI
    server, when a build is successful, the result is an OBR repo as the
    output.

    I currently use Bamboo for our CI server. It has a “deployment”
    function, which we use to push the released OBR repos to a
    repository server. The developer’s job ends here, as this is also
    the handoff point to the deployer. I believe that the roles should
    be separated. From a business perspective, if we required that a
    deployer has the same level of expertise as a developer, things
    would be very expensive. ;-)

    In crappy ASCII art, it would be:

    +-----+ +--------+
    | Dev |——>[OBR Repos]<——| Deploy |
    +-----+ +--------+

    Once in Karaf, since I want to have a local cache of my OBR
    repositories in order to completely decouple the runtime system from
    any development or deployment system, I (programmatically) have Cave
    populate corresponding local caches. So my deployment bundle will
    first obtain and cache the OBR repositories (one for each bnd
    workspace) and cache it locally via Cave.

    The deployer, when initiating a deployment, will therefore pull the
    released OBR repos via Cave. I then parse the respository.xml file
    to find any capabilities in the karaf.identity namespace, and pull
    in any information I need to create a Karaf feature on the fly.
    (Probably you can imagine this, but I can show you the fairly
    trivial code if necessary.)

    I have an XML parser that will extract the information necessary to
    generate the Karaf feature from the capabilities in the application
    bundle in each Repo. However, if I could input either the bundle or
    the repo and let Karaf extract the feature information, that would
    be even better.

    Based on the above, I could easily create Karaf commands to allow
    the deployer to pull in the latest versions (deployed as OBR repos)
    and deploy as necessary as features, which would be generated on the
    fly from the included capabilities.

    I believe that this would be a very nice, easy, and natural way to
    “integrate” an eRoute (bnd) development environment with the Karaf
    runtime. Developers continue to work as usual, in theory without
    having to worry about which runtime is being used, while the
    deployer can do her job very easily from start to finish from the
    Karaf command line without having to stop the system, change
    configuration, or even call on developers (unless something blows up).


    Please let me know if I can provide any further info. :-)

    Cheers,
    =David




--
Jean-Baptiste Onofré
jbono...@apache.org
http://blog.nanthrax.net
Talend - http://www.talend.com

Reply via email to