Sounds pretty spectacular.  Can't wait to see it.

Brad

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

>
>
> 2016-04-18 18:02 GMT+02:00 Brad Johnson <[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]>
>> 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]>> 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 would
>>>>         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]
>>> http://blog.nanthrax.net
>>> Talend - http://www.talend.com
>>>
>>
>>
>
>
> --
> ------------------------
> Guillaume Nodet
> ------------------------
> Red Hat, Open Source Integration
>
> Email: [email protected]
> Web: http://fusesource.com
> Blog: http://gnodet.blogspot.com/
>
>

Reply via email to