" ... that you deploy in Karaf ..."

OK may be I misunderstood the concept. I thought the result is standalone
executable JAR, thus my comments above. If on the other hand I need to
install Karaf and then deploy my services into it I really don't see how it
differs form what people are doing now?

I'm sorry if I'm not making much sense. I didn't have the time to
experiment with your code and samples so may be I'm missing an important
peace here.

Best,
Milen


On Thu, Sep 10, 2015 at 6:27 PM, Jean-Baptiste Onofré <[email protected]>
wrote:

> Allow me to disagree: Karaf is a perfect container for microservices.
>
> Image to create a microservice (using karaf-boot) that you deploy in Karaf
> and use such service in another microservice, all wired with OSGi service
> and Karaf: we leverage OSGi/Karaf as a microservices container.
>
> But even without talking of microservices, new developers to Karaf (and
> OSGi generally speaking) are frustrated by the effort on non business code
> to do (I have to write an Activator, or a descriptor, etc, etc).
> So, a tooling to simplify this is still a valid addition IMHO.
>
> Regards
> JB
>
>
> On 09/10/2015 06:23 PM, Milen Dyankov wrote:
>
>> I might be wrong but I think the whole success of SpringBoot (apart from
>> having the "Spring" in it) is the microservices hype!
>> it's quick and easy but most usecases follow the "create one (or very few)
>> service(s), pack them as single executable and access them via REST"
>> pattern. We can obviously do the same with OSGi and Karaf in particular
>> but
>> personally I think this makes absolutely no sense. In such approach one in
>> not benefiting form OSGi almost at all. Honestly speaking I would argue
>> that if one does not understand how OSGi service layer works (regardless
>> of
>> the framework used to register/access services) it makes no sense to use
>> OSGi at all.
>>
>> Just my 2 cents!
>>
>> Regards,
>> Milen
>>
>> On Thu, Sep 10, 2015 at 6:08 PM, Christian Schneider <
>> [email protected]> wrote:
>>
>> I already created such a maven plugin in aries. The user can use standard
>>> CDI and JEE annotations and the result is blueprint xml.
>>> How is the new approach different / better?
>>>
>>> Why should it be good for the developer to move away from well defined
>>> standard annotations and use custom annotations that bind him to karaf?
>>> I mean if this is created by the spring guys I know they want to catch
>>> people by perceived simplicity and then make sure to make it difficult to
>>> switch. As an open source comminity I do not know why we should do
>>> something like this.
>>> Abstracting away from frameworks just means you create another layer that
>>> people then also have to learn. There were some cases in the past where
>>> this make sense because the underlying frameworks sucked (like JEE 2).
>>> This
>>> is not the case today though I think.
>>>
>>> What kind of use case do you have in mind? Every project starts small but
>>> it needs to be able to grow then. You can not start with custom
>>> annoations
>>> and then tell people to later switch to something else when the
>>> project grows. I think it makes more sense to make it easier for people
>>> to
>>> use the standard annoations and use the right dependencies.
>>>
>>> If we simply provide a tooling that makes it easy to start with SCR or
>>> blueprint we provide much more value for people as thery can then grow
>>> without any breaking changes.
>>>
>>> Christian
>>>
>>>
>>> Am 10.09.2015 um 17:46 schrieb Jean-Baptiste Onofré:
>>>
>>> Because all these annotations are runtime: here we talk about tooling at
>>>> build time.
>>>>
>>>> More over, the purpose is to provide more high level annotations, which
>>>> abstract actual annotations/frameworks that we can use under hood.
>>>>
>>>> The purpose of centralizing all in karaf-boot is to have a central
>>>> project: the developer just use karaf-boot, it doesn't really know what
>>>> technologies are involved behind the scene.
>>>>
>>>> For instance, in spring-boot, they use activemq, jersey, etc, but all
>>>> from spring-boot. The developers don't know a rest service use jersey
>>>> for
>>>> instance, it's completely abstracted.
>>>>
>>>> Again the purpose is to simplify life for developers: splitting the
>>>> annotations in different projects introduces complexity (at least to
>>>> find
>>>> the dependencies and core import packages).
>>>>
>>>> If an advanced developer wants to use CDI, SCR, etc, he can of course.
>>>>
>>>> Regards
>>>> JB
>>>>
>>>> On 09/10/2015 05:40 PM, Christian Schneider wrote:
>>>>
>>>> I am not really enthusiastic about duplicating functionality of cxf or
>>>>> aries. Aries supports a very nice approach for injections, jpa and jta.
>>>>> Why should it make sense to recreate that?
>>>>> Aries blueprint also has annoation support even in two flavors (CDI,
>>>>> custom). How does the new approach interact with this?
>>>>>
>>>>> Instead I propose we create support for such annotations in the
>>>>> respective projects (where they are missing) and concentrate on karaf
>>>>> as
>>>>> a container not an application development framework.
>>>>> By leveraging the existing frameworks we profit from their own
>>>>> development teams. Whatever we recreate will have to be developed by
>>>>> the
>>>>> very few resources of the karaf team.
>>>>>
>>>>> Christian
>>>>>
>>>>> Am 10.09.2015 um 16:53 schrieb Jean-Baptiste Onofré:
>>>>>
>>>>> Hi Guillaume,
>>>>>>
>>>>>> thanks for your feedback.
>>>>>>
>>>>>> I fully agree about providing more high level annotations (it's what I
>>>>>> do with @jpa, @rest, @soap, @jta annotations).
>>>>>>
>>>>>> I agree that the current annotations are too low level, and blueprint
>>>>>> "oriented". I just move forward a bit with the current codebase, just
>>>>>> to illustrate karaf-boot usage in the samples.
>>>>>>
>>>>>> But again, you are right, and I will create a new annotations set.
>>>>>>
>>>>>> One of the purpose of karaf-boot annotations is to "abstract" the
>>>>>> actual code/artifact that we generate. So, if now we generate
>>>>>> blueprint, without changing the karaf-boot annotations, we will be
>>>>>> able to generate something else (why not SCR, etc).
>>>>>>
>>>>>> I agree with a BOM, but I think it's interesting to provide both:
>>>>>> - providing a ready to use parent pom allows developers to create a
>>>>>> very simple pom.xml where all plugins and dependencies are already
>>>>>> defined
>>>>>> - for more advanced devs, they can create their own pom.xml starting
>>>>>> from the BOM or archetype.
>>>>>>
>>>>>> Thanks again for your feedback !
>>>>>>
>>>>>> Regards
>>>>>> JB
>>>>>>
>>>>>> On 09/10/2015 04:44 PM, Guillaume Nodet wrote:
>>>>>>
>>>>>> I like the idea.
>>>>>>>
>>>>>>> For the annotations, we need to keep really high level.  The
>>>>>>> annotations in
>>>>>>> the code base right now are much too close to blueprint.
>>>>>>> I think we need to grab a small enough subset so that the annotations
>>>>>>> are
>>>>>>> easy to understand for beginners and without any ambiguities, even at
>>>>>>> the
>>>>>>> cost of features.
>>>>>>> For example, I think we should restrict to constructor injection, so
>>>>>>> that
>>>>>>> we don't have any bind / rebind / init methods.  We simply need an
>>>>>>> optional
>>>>>>> @Destroy.  In case the dependencies change at runtime, simply destroy
>>>>>>> the
>>>>>>> bean / service and recreate it the dependencies are still met after
>>>>>>> the
>>>>>>> change.
>>>>>>>
>>>>>>> If blueprint is to be hidden completely, we may find a better
>>>>>>> alternative
>>>>>>> in SCR or even Felix Dependency Manager, but it does not matter too
>>>>>>> much
>>>>>>> for now.
>>>>>>>
>>>>>>> I agree with the idea of using a BOM instead of a parent if
>>>>>>> possible.  I'm
>>>>>>> not very familiar, but this is less invasive.
>>>>>>>
>>>>>>> The real problems will come with the support of higher level
>>>>>>> annotations
>>>>>>> for JAXRS, JPA, etc...
>>>>>>> Not really sure how to handle those yet...
>>>>>>>
>>>>>>>
>>>>>>> 2015-09-09 16:32 GMT+02:00 Jean-Baptiste Onofré <[email protected]>:
>>>>>>>
>>>>>>> Hi all,
>>>>>>>
>>>>>>>>
>>>>>>>> I worked on a prototype about Karaf Boot.
>>>>>>>>
>>>>>>>> Let me give you some backgrounds and discuss about that all
>>>>>>>> together.
>>>>>>>>
>>>>>>>>    Why Karaf Boot ?
>>>>>>>>    ----------------
>>>>>>>> When you develop artifacts (bundles) to be deployed in Karaf, you
>>>>>>>> can see
>>>>>>>> that the actual time that you spend on your business code is finally
>>>>>>>> largely less important that all the plumbing effort that you have to
>>>>>>>> do
>>>>>>>> (writing OSGi Activator, or blueprint/scr descriptor, etc).
>>>>>>>>
>>>>>>>> It means that your "go to market" is longer, and we should provide
>>>>>>>> something that allows you to focus on your code.
>>>>>>>>
>>>>>>>> Even if SCR annotations is a very good step forward, some use cases
>>>>>>>> are
>>>>>>>> not so easy to do (JPA, JTA for instance).
>>>>>>>>
>>>>>>>> And anyway, you have to prepare your pom.xml with different plugin
>>>>>>>> and
>>>>>>>> dependency.
>>>>>>>>
>>>>>>>> Moreover, when you have your artifacts, you have to prepare Karaf
>>>>>>>> container, and deploy those artifacts there. Even if it's
>>>>>>>> "container"
>>>>>>>> approach is the most important for me, we can give even more
>>>>>>>> flexibility by
>>>>>>>> providing a way to embed and prepare Karaf in a ready to execute
>>>>>>>> jar/artifact.
>>>>>>>>
>>>>>>>>    What is Karaf Boot ?
>>>>>>>>    --------------------
>>>>>>>> Karaf Boot provides four components:
>>>>>>>> * karaf-boot-parent is the Maven parent pom that your project just
>>>>>>>> inherit: that's all ! All plugins, dependencies, etc are described
>>>>>>>> in this
>>>>>>>> parent, you even don't have to define packaging as bundle, standard
>>>>>>>> jar is
>>>>>>>> fine.
>>>>>>>> * karaf-boot (coming with karaf-boot-parent) provides annotations
>>>>>>>> that you
>>>>>>>> use directly in your business code (like @Bean, @Service,
>>>>>>>> @Reference,
>>>>>>>> @Inject, etc): again, your focus on your code, karaf-boot deals with
>>>>>>>> the
>>>>>>>> plumbing.
>>>>>>>> * karaf-boot-maven-plugin (coming with karaf-boot-parent) scan the
>>>>>>>> classes
>>>>>>>> and generate a blueprint XML. For now, I'm using blueprint
>>>>>>>> generation
>>>>>>>> (because we can cover lot of use cases, for instance, I plan to
>>>>>>>> provide
>>>>>>>> @rest annotation that will generate blueprint XML with cxf jaxrs
>>>>>>>> server,
>>>>>>>> etc).
>>>>>>>> * karaf-boot-starter is the module providing a convenient way to
>>>>>>>> embed,
>>>>>>>> configure and bootstrap Karaf.
>>>>>>>>
>>>>>>>> Just to illustrate this, let's take a look on the
>>>>>>>> karaf-boot-sample-simple.
>>>>>>>>
>>>>>>>> The pom.xml is really simple:
>>>>>>>>
>>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>>> <project xmlns="http://maven.apache.org/POM/4.0.0"; xmlns:xsi="
>>>>>>>> http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation="
>>>>>>>> http://maven.apache.org/POM/4.0.0
>>>>>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd";>
>>>>>>>>
>>>>>>>>       <modelVersion>4.0.0</modelVersion>
>>>>>>>>
>>>>>>>>       <parent>
>>>>>>>> <groupId>org.apache.karaf.boot</groupId>
>>>>>>>> <artifactId>karaf-boot-parent</artifactId>
>>>>>>>>           <version>1.0.0-SNAPSHOT</version>
>>>>>>>>       </parent>
>>>>>>>>
>>>>>>>> <artifactId>karaf-boot-sample-simple</artifactId>
>>>>>>>>       <version>1.0.0-SNAPSHOT</version>
>>>>>>>>
>>>>>>>> </project>
>>>>>>>>
>>>>>>>> You can see, the only thing that the developer has to do: define
>>>>>>>> karaf-boot-parent as parent pom. That's all.
>>>>>>>>
>>>>>>>> Now, in the code, you have just one bean that we want to run:
>>>>>>>>
>>>>>>>> package org.apache.karaf.boot.sample.simple;
>>>>>>>>
>>>>>>>> import org.apache.karaf.boot.Bean;
>>>>>>>> import org.apache.karaf.boot.Init;
>>>>>>>>
>>>>>>>> @Bean(id = "simple-bean")
>>>>>>>> public class SimpleBean {
>>>>>>>>
>>>>>>>>       @Init
>>>>>>>>       public void simple() {
>>>>>>>>           System.out.println("Hello world");
>>>>>>>>       }
>>>>>>>>
>>>>>>>> }
>>>>>>>>
>>>>>>>> You can see the @Bean and @Init karaf-boot annotations. The
>>>>>>>> karaf-boot-maven-plugin will generate the blueprint descriptor using
>>>>>>>> this.
>>>>>>>>
>>>>>>>>
>>>>>>>>    Current Status
>>>>>>>>    --------------
>>>>>>>> I pushed Karaf Boot structure there:
>>>>>>>>
>>>>>>>> https://github.com/jbonofre/karaf-boot
>>>>>>>>
>>>>>>>> It's a mix of rewrapping of existing code (from aries, pax-exam,
>>>>>>>> etc) and
>>>>>>>> additions.
>>>>>>>>
>>>>>>>> I created the annotations, I'm now working on the
>>>>>>>> karaf-boot-maven-plugin
>>>>>>>> based on Christian's work in aries (I'm actually scanning the boot
>>>>>>>> annotations now, and generating the XML).
>>>>>>>>
>>>>>>>> I will push new changes later today and tomorrow.
>>>>>>>>
>>>>>>>>    Open Questions
>>>>>>>>    ---------------
>>>>>>>> * For now, I would prefer to be 'artifacts' and 'resources'
>>>>>>>> generator: I
>>>>>>>> think it's better than to depend to a feature running in Karaf, but
>>>>>>>> it's
>>>>>>>> open to discussion.
>>>>>>>> * I'm now generating blueprint. Probably native OSGi or scr
>>>>>>>> generation can
>>>>>>>> make sense.
>>>>>>>> * I'm generating bundles: thanks to the Karaf4 features resolver, as
>>>>>>>> the
>>>>>>>> bundles provide requirements/capabilities metadata, I think it's a
>>>>>>>> good
>>>>>>>> start. However, maybe it's worth to be able to create features, kar,
>>>>>>>> profile.
>>>>>>>>
>>>>>>>> Thoughts ?
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Regards
>>>>>>>> JB
>>>>>>>> --
>>>>>>>> Jean-Baptiste Onofré
>>>>>>>> [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
>



-- 
http://about.me/milen

Reply via email to