It is already there. Give this example a spin:
https://github.com/cschneider/Karaf-Tutorial/tree/master/tasklist-ds/app

Should be quite easy to adapt this to your own project.

Christian

On 18.04.2016 18:19, Brad Johnson wrote:
Sounds pretty spectacular.  Can't wait to see it.

Brad

On Mon, Apr 18, 2016 at 11:13 AM, Guillaume Nodet <[email protected] <mailto:[email protected]>> wrote:



    2016-04-18 18:02 GMT+02:00 Brad Johnson
    <[email protected] <mailto:[email protected]>>:

        Jean-Baptiste,

        So would something like a camel-core feature then be converted
into a static bundle with all its dependencies for bootstrap? It seems that what one could do is define the features and the
        read the features into a set at bundle time to eliminate any
        overlap and then create the list of required
        mvn:group/artifact statements in the new bundle.


    Well, that's actually what the karaf plugin does when generating
    the assembly.
    Though it does the same thing than the OSGi resolver would do at
    runtime, and handles additional things such as configuration,
    start levels, libraries, etc...


        But that also seems a prime candidate for leveraging Maven to
        create that same thing. It has all the information required to
        create that set of required bundles for bootstrap sans
        features.  But karaf would have to be made aware of them
        somehow. Would these be specified in the startup.properties
        and stored in the lib?

        Sorry, I should probably just wait and see as I imagine it
        gets a bit irritating to go over stuff you've already thought
        out. I'm pretty stoked about the possibility though so my mind
        naturally races on to how I'd like to see it work and how it
        could make my life easier.

        Brad



        On Mon, Apr 18, 2016 at 10:52 AM, Jean-Baptiste Onofré
        <[email protected] <mailto:[email protected]>> wrote:

            Starting from features, you can create a full static
            custom distribution, not actually really using features
            but startup bundles.

            Regards
            JB


            On 04/18/2016 05:47 PM, Brad Johnson wrote:

                I don't know if it is a big deal but here's an example
                of a current
                project I work on. In a static environment much of
                that could be
                generated I'd think.  At least the parts that are
                straight bundles.  And
                really, in a static include the feature tags
                themselves could be pulled
                in and expanded to bundle statements as well since in
                the end we aren't
leveraging features from an installed karaf anymore. Those
                features/profiles would act more like recipes for the
                creation of the
                karaf-boot itself.

                If one went with a convention over configuration
                approach as well then
                one could always specify a configuration.cfg in the
                root of the
                resources directory and have that automatically
                converted into a cfg
                file in the bundle that matched the PID.  The whole
                configfile section
                could be eliminated then.  If a configuration.cfg file
                is found in the
                resource directory then the static compilation could
                turn that into the
                correct PID.cfg and install it during bundle creation
                into the etc
                directory for boot up.

                None of that is huge deal but it would make life a bit
                more convenient
                and since one is now working from a static point of
                view it seems it
                would be much easier to accomplish.

                <?xml version="1.0" encoding="UTF-8"?>
                <features name="${project.artifactId}-${project.version}"
                xmlns="http://karaf.apache.org/xmlns/features/v1.0.0";
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
                
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.0.0
                http://karaf.apache.org/xmlns/features/v1.0.0";>

                   <!-- The repositories of the Middleware -->

                
<repository>mvn:org.apache.camel.karaf/apache-camel/${camel-version}/xml/features</repository>

                
<repository>mvn:org.apache.cxf.karaf/apache-cxf/${cxf-version}/xml/features</repository>

                   <feature name="payment-hub-gateway-prerequisites"
                version="${project.version}">

                     <configfile
                finalname="/etc/com.foo.orchestration.cfg"
                
override="false">mvn:com.foo/orchestration/${project.version}/cfg/configuration</configfile>
                     <configfile
                finalname="/etc/com.foo.connector.litle.cfg"
                
override="false">mvn:com.foo/connector.litle/${project.version}/cfg/configuration</configfile>
                     <configfile finalname="/etc/com.foo.gateway.cfg"
                
override="false">mvn:com.foo/gateway/${project.version}/cfg/configuration</configfile>
                     <configfile finalname="/etc/com.foo.batch.cfg"
                
override="false">mvn:com.foo/batch/${project.version}/cfg/configuration</configfile>
                     <configfile finalname="/etc/com.foo.bar.cfg"
                
override="false">mvn:com.foo/bar/${project.version}/cfg/configuration</configfile>
                     <configfile finalname="/etc/com.foo.services.cfg"
                
override="false">mvn:com.foo/services/${project.version}/cfg/configuration</configfile>

                 <feature>camel-core</feature>
                 <feature>camel-blueprint</feature>
                 <feature>camel-cxf</feature>
                 <feature>camel-jackson</feature>
                 <feature>camel-xmljson</feature>
                 <feature>camel-beanio</feature>
                 <feature>camel-xstream</feature>
                 <feature>camel-dozer</feature>
                 <feature>camel-velocity</feature>
                 <feature>cxf-ws-security</feature>
                
<bundle>mvn:org.apache.aries.blueprint/org.apache.aries.blueprint.core.compatibility/1.0.0</bundle>
                 
<bundle>mvn:org.codehaus.jettison/jettison/${jettison-version}</bundle>

                
<bundle>mvn:org.apache.commons/commons-lang3/${commons-lang3-version}</bundle>

                
<bundle>wrap:mvn:org.apache.httpcomponents/httpcore/${httpcore-version}</bundle>

                
<bundle>wrap:mvn:org.apache.httpcomponents/httpclient/${httpclient-version}</bundle>
                 
<bundle>wrap:mvn:commons-io/commons-io/${commons-io-version}</bundle>
                   </feature>

                   <feature name="foo-hub-gateway"
                version="${project.version}">

                 <bundle>mvn:com.foo/models/${project.version}</bundle>
                etc. etc.



                On Mon, Apr 18, 2016 at 2:29 AM, Christian Schneider
                <[email protected]
                <mailto:[email protected]>
                <mailto:[email protected]
                <mailto:[email protected]>>> wrote:

                    I am not very familiar with the concept of
                profiles till now.
                    Guillaume explained it a bit to me but honestly I
                hope we do not
                    need it too often. An OSGi application should be
                mainly built out of
                    bundles and profiles concentrate more on the non
                OSGi static files
                    in karaf.

                    The main part of the packaging in karaf boot is to
                resolve features
                    at build time. It uses the static profile but
                nothing else from the
                    profiles concept. This part already works. I have
                created such a
                    packaging for the tasklist-ds example:
                
https://github.com/cschneider/Karaf-Tutorial/tree/master/tasklist-ds/app

                    The second part. The karaf boot development model
                is still in the
                    making but you can already use the packaging if
                you want.

                    About features and poms you are right. You have to
                maintain two sets
                    of dependencies but this is just a result of the
                fact that OSGi
                    resolves differently from maven. So this never
                will completely go
                    away. What we could do with a pom is create an obr
                repository. This
                    could then be used to back a feature repo. So
                currently in a feature
                    we have to list all the bundles, with a backing
                obr repo we could
                    instead only list some requirements (like top
                level bundles) and
                    resolve the rest.

                    I have prototyped such a packaging using bndtools
                as it already has
                    the OBR resolving:
                
https://github.com/cschneider/bndtools-tutorials/tree/master/tasklist-ds
                    The creation of the repository went quite smoothly
                as eclipse m2e
                    provides nice tooling to define the pom and the
                necessary excludes.
                    Defining the requirements in bndtools also works
                really nicely as
                    they got a good UI for it.

                    Unfortunately bndtools does not know about
                features. So while this
                    approach is better than defining each single
                bundle of an
                    application it is not really better than the karaf
                approach were you
                    define most of your deps as features. So this
                would only be really
                    useable once we have both features and a backing
                obr repo.

                    Another thing that I found bndtools is lacking is
                all the
                    preparation karaf already has for some of the more
                complicated
                    features like tansactions and cxf. There it is not
                enough to just
                    install bundles.
                    You also have to fiddle with the boot path for
                transactions and some
                    java se spec nightmares in the case of cxf. So
                these are the regions
                    where karaf really helps.

                    Christian

                    On 18.04.2016 07:24, Brad Johnson wrote:

                        Christian,

                        I just re-read your section on the static
                profiles. That makes
                        sense.  I could see this becoming like
                puppet/chef sort of
                        recipes or even like the way Docker allows
                building up of
                        images.  Not that I know those that well.  I
                use features all
                        the time of course but see huge advantage to
                making that a
                        bundle time set of static steps instead of the
                current runtime
                        usage.  Not that the current use is bad, mind
                you, its context
                        is different and slimming down the karaf core
                by eliminating
                        that management overhead would be good for
                something like
                        karaf-boot.  In the current monolithic
                enterprise environment it
                        makes sense to have stacks of features
                available to load when
                        necessary.  The static mechanism would get rid
                of that. But it
                        would also permit building up a centralized
                registry or library
                        of features that one could leverage by adding
                into a boot recipe
                        of some sort.   Maybe we'd get the quick
                flexibility for
                        creating projects that archetypes always
                seemed to promise but
                        never quit seemed to manage.

                        One item that has always bothered me about
                features is they are
                        orthogonal to but replicate much of what goes
                into a POM.   One
                        ends up with two sets of dependency management
                mechanisms that
                        have never really dovetailed.  It would be
                nice if we had a
                        Maven plugin that could look at the
                dependencies in a POM and
                        create a static feature profile or at least
                give a good guess at
                        what they should be while allowing for some
                tweaking.  Perhaps
                        since the karaf-boot environment is static and
                doesn't rely on
                        or expect another environment to provide
                dependencies that wouldkie-aries-blueprint
                        be easier to accomplish.

                        Funny how Moore's law took a sideways turn on
                us.  Now we don't
                        have the ever increasing clock speed but we
                have cores coming
                        out our ears and RAM and disk space in
                abundance.  A little
                        fatness in our deployments is an acceptable
                trade off now.

                        Brad


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

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



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





-- ------------------------
    Guillaume Nodet
    ------------------------
    Red Hat, Open Source Integration

    Email: [email protected] <mailto:[email protected]>
    Web: http://fusesource.com <http://fusesource.com/>
    Blog: http://gnodet.blogspot.com/




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

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

Reply via email to