Hi Milen,
and thanks for this comparison and the "jar" point.
And actually, you got the main reason: "marketing purposes". We work
hard to improve Karaf adoption, and we have good results IMHO. If we
think that we will convince new users with this new "flavour" (and I'm
pretty sure of that), it's worth to do it.
Regards
JB
On 04/28/2015 10:37 AM, Milen Dyankov wrote:
Comparing to SpringBoot is exactly what I wanted to write about.
But from psychological point of view, it has to be able to put everything
in a single executable jar to be able to convince people.
I recently used both SpringBoot and Felix in a demo and some feedback I had
was "see but SpringBoot is just one jar while in Felix you need to deploy
like in EE container"
The facts that (a) extracted SpringBoot generated jar file contains much
more than felix + relevant bundle (b) it uses roughly twice the memory and
(c) it loads roughly twice as many classes - was largely ignored.
So for me personally it's not a big deal - I like Karaf the way it is and I
know how to work with it. However for marketing purposes it would be nice
to have a feature that will generate a compile app by running a single
maven command.
Just my 2 cents
Best,
Milen
On Tue, Apr 28, 2015 at 10:22 AM, Jean-Baptiste Onofré <[email protected]>
wrote:
Hi Fabian,
I fully agree.
My point is more to follow the docker discussion that we have. Lot of
people see Karaf as a complex and "large" container, and they prefer usage
of spring-boot for instance. I want to show that Karaf is now a very
modern, flexible, lightweight and polymorphic container. So, as I don't
think it's a lot of effort, I would like to provide the tooling (code,
bootstrapper, etc) to provide an alternative to spring-boot based on Karaf.
My €0.02 ;)
Regards
JB
On 04/28/2015 09:06 AM, Fabian Lange wrote:
Hi JB,
correct. But I don't consider that to be a real problem. I have to deal
with about 50 osgi bundles at the moment. And because the standard
assembly
is not in the layout I want I would anyway need to have one to change the
layout and customize the contents (properties etc).
So my opinion is that while your proposal is nice to have, its not really
worth much effort, because anybody who wants to build a dist needs
actually
much more control, rather than more helper magic.
Fabian
On Tue, Apr 28, 2015 at 7:28 AM, Jean-Baptiste Onofré <[email protected]>
wrote:
Hi Fabian,
I fully agree with you that creating a custom distro is easy but, correct
me if I'm wrong, right now, you have:
- modules with your application code
- a module dedicated for your feature
- a module dedicated for your custom distribution assembly
You provision the distribution created by the assembly.
What I'm proposing is just a simple way to have a ready to go code and
building, in order to avoid the overhead of the "custom distribution"
plumbing module.
Regards
JB
On 04/27/2015 09:57 PM, Fabian Lange wrote:
Hi,
quick feedback from here. I used the current 4.0 way of building my
custom
dist and it was actually easy enough.
What you propose seems to hide a few karaf details, which I personally
think should be handled explicitly.
In my case for example, I am actually happy with managing the required
bootFeatures myself.
Fabian
On Mon, Apr 27, 2015 at 9:53 PM, Jean-Baptiste Onofré <[email protected]>
wrote:
Actually, I wasn't clear.
At I'm proposing is not only a new plugin, it's also a dependency.
Imagine, that in your project pom.xml, you have:
<parent>
<groupId>org.apache.karaf.boot</groupId>
<artifactId>karaf-boot-starter-parent</artifactId>
<version>4.0.0-SNAPSHOT</version>
</parent>
The parent contains all plugins and dependencies set, especially the
Karaf
standard distribution.
Later in your pom.xml, you have:
<build>
<plugins>
<plugin>
<groupId>org.apache.karaf.boot</groupId>
<artifactId>karaf-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
In your project, you just need a class describing your Karaf
bootstrapping:
@KarafBootApplication
@WithShell
@profiles({"a","b","c"})
@featuresBoot({"f1","f2"})
public class MyContainer implements KarafBootstrapper {
@Override
public void run() {
// setup your Karaf bootstrapping
}
}
The user can add "boot features" to customize the container:
<dependency>
<groupId>org.apache.karaf.boot</groupId>
<artifactId>org.apache.karaf.boot.webcontainer</artifactId>
</dependency>
for instance it will automatically add Pax Web war feature in
featuresBoot
(no need to use @featuresBoot).
The purpose is to (depending of the goal used by the user):
1/ be able to run container+application easily
2/ package a custom distribution, ready to go ("key turn") including
applications
Again, the approach is, from the native user codebase, be able to
bootstrap a container embedding the user applications. This container
can
be started directly from the project, and provide an artifact ready to
deploy (on docker, or whatever). The artifact is actually a custom
karaf
distribution.
I hope it's clearer. Again, it's just an idea, but IMHO, it will give a
new dimension to Karaf: it will turn Karaf as a modern polymorphic
container.
The users can still use Karaf "standalone" where they do the
provisioning,
or they can use Karaf "boot" as basis for key turn application
container.
Regards
JB
On 04/27/2015 07:57 PM, Guillaume Nodet wrote:
2015-04-27 16:03 GMT+02:00 Jean-Baptiste Onofré <[email protected]>:
Hi all,
On a local branch, I worked on some new goals for the
karaf-maven-plugin,
especially:
karaf:run to easily bootstrap and start a Karaf instance
+1
karaf:deploy to upload (scp) the project artifact (or a given
artifact)
in
the deploy folder or the system folder (respecting the maven
structure)
+1 we could also add sftp and http/https upload, with the help of
the
maven
http servlet i've added in 4.x
karaf:client to connect to a running Karaf instance and execute
commands
+1, i suppose we'd need interactive and scripted, like the
bin/client
script, right ?
I would like to add a new plugin (more than a new goal):
karaf-boot-maven-plugin
with the boot goal.
The purpose is easily:
1/ in the end user code module, build a karaf custom distribution
including karaf standard distribution and the end user built
application
2/ be able to easily include test with pax-exam
3/ provide a ready to run artifact
4/ provide a way to specify profiles or features to include in the
distribution
It's just an idea for now. The purpose is to provide a ready to run
Karaf
container like users does with spring-boot.
So it would create the distribution, same as the install-kars /
assembly
goal, then use the karaf:run goal ?
The only step than the assembly / run / archive goals can't do is the
tests, but I'm not completely sure to understand this part...
It looks more like an archetype than a plugin to me ? Or do I miss
something ?
Thoughts ?
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
--
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
--
Jean-Baptiste Onofré
[email protected]
http://blog.nanthrax.net
Talend - http://www.talend.com