New website for Apache Camel

Yesterday we published the new website for Apache Camel.

It's really fantastic to finally see a new website. And now with a modern tech for the website we can much easier update and keep it more modern for the future, and also it should help encourage users to contribute to its content to help build a better user guide.

Huge thanks to all involved.


Apache Camel 3 - camel-core vs camel-core-engine (smaller core)

The Camel team is very busy currently working on Apache Camel 3. A lot of work has already been implemented and we have released 3 milestone releases so far. The next milestone release number 4 has some great new innovative features which I will blog about in the following months.

The topic of this blog is the work we have been doing on splitting up camel-core into smaller modules which you can now easily pick exactly only what you need.

If we take a look at the dependency tree of the camel-core JAR you can see that it's been split up into many modules as shown below:

[INFO] +- org.apache.camel:camel-core:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-api:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-base:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-jaxp:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-management-api:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-support:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-util:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-util-json:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-bean:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-browse:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-caffeine-lrucache:jar:3.0.0-SNAPSHOT:compile
[INFO] |  |  \- com.github.ben-manes.caffeine:caffeine:jar:2.7.0:compile
[INFO] |  |     +- org.checkerframework:checker-qual:jar:2.6.0:compile
[INFO] |  |     \- com.google.errorprone:error_prone_annotations:jar:2.3.3:compile
[INFO] |  +- org.apache.camel:camel-controlbus:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-dataformat:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-dataset:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-direct:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-directvm:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-file:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-language:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-log:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-mock:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-properties:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-ref:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-rest:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-saga:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-scheduler:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-seda:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-stub:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-timer:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-validator:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-vm:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-xpath:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-xslt:jar:3.0.0-SNAPSHOT:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.25:compile

In Camel 2.x all those modules were included in the same camel-core JAR.

To make the migration from Camel 2.x to 3.0 and also the ease of use, we will keep camel-core as the same set of JAR dependencies as in Camel 2.x. So the output above is from just declaring a dependency on camel-core, in your Maven pom.xml file or gradle build file.

However what is coming in Camel 3 milestone 4, is to make it easy as well to just pick what you need. For example the following shows a the dependency tree where we are only using as little as possible (using the new camel-core-engine JAR as dependency):

+- org.apache.camel:camel-core-engine:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-api:jar:3.0.0-SNAPSHOT:compile
[INFO] |  |  \- org.apache.camel:camel-util:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-management-api:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-support:jar:3.0.0-SNAPSHOT:compile
[INFO] |  \- org.apache.camel:camel-core:jar:3.0.0-SNAPSHOT:compile
[INFO] |     +- org.apache.camel:camel-base:jar:3.0.0-SNAPSHOT:compile
[INFO] |     \- org.apache.camel:camel-properties:jar:3.0.0-SNAPSHOT:compile

To illustrate this we have provided 2 set of examples

The former uses the camel-core as dependency which includes all the core components etc. The latter is the tiny dependency set, which only includes what is needed. The example only uses the bean and quartz2 component and therefore you would need to add them as dependency:

The dependency tree is as follows (mind that JAXB is excluded as test scope)

[INFO] --- maven-dependency-plugin:3.1.1:tree (default-cli) @ camel-example-main-tiny ---
[INFO] org.apache.camel.example:camel-example-main-tiny:jar:3.0.0-SNAPSHOT
[INFO] +- org.apache.camel:camel-core-engine:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-api:jar:3.0.0-SNAPSHOT:compile
[INFO] |  |  \- org.apache.camel:camel-util:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-management-api:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-support:jar:3.0.0-SNAPSHOT:compile
[INFO] |  \- org.apache.camel:camel-core:jar:3.0.0-SNAPSHOT:compile
[INFO] |     +- org.apache.camel:camel-base:jar:3.0.0-SNAPSHOT:compile
[INFO] |     \- org.apache.camel:camel-properties:jar:3.0.0-SNAPSHOT:compile
[INFO] +- org.apache.camel:camel-main:jar:3.0.0-SNAPSHOT:compile
[INFO] +- org.apache.camel:camel-bean:jar:3.0.0-SNAPSHOT:compile
[INFO] +- org.apache.camel:camel-quartz2:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.quartz-scheduler:quartz:jar:2.3.1:compile
[INFO] |  |  +- com.mchange:mchange-commons-java:jar:0.2.15:compile
[INFO] |  |  \- com.zaxxer:HikariCP-java7:jar:2.4.13:compile
[INFO] |  \- com.mchange:c3p0:jar:
[INFO] +- com.sun.xml.bind:jaxb-core:jar:2.3.0:test
[INFO] +- com.sun.xml.bind:jaxb-impl:jar:2.3.0:test
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.11.2:runtime
[INFO] +- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] \- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO]    \- org.slf4j:slf4j-api:jar:1.7.25:compile

If we compare the size of the JARs between the two examples (incl logger etc), then we have:

  • camel-example-main (camel-core): 48 JAR files with total of 9.3 MB
  • camel-example-main-tiny (camel-core-engine): 21 JAR files with total of 7.4 MB

If we run the two examples then you can also see the number of classes loaded into the JVM is a bit smaller when using camel-core-engine:
  • camel-example-main (camel-core): 3666 classes loaded
  • camel-example-main-tiny (camel-core-engine): 3430 classes loaded
Okay the reduction here is not as significant, but it is expected as Camel will lazy load components in use, and the example only uses the bean and quartz component. However the classpath scanning would be a bit faster as there are roughly 25% less disk-size and 50% less JAR files.

There are many other great things coming in Apache Camel 3 which I will start writing blogs about during this summer leading up to the release (expected in September/October 2019).


What is Apache Camel K - Awesome 30 minute video

Last year we created the Apache Camel K sub-project of Apache Camel. Since we have been busy working on Camel K and also the upcoming Apache Camel v3.

What is Apache Camel K ?

A lightweight integration platform born on #Kubernetes, with serverless superpowers 🐫🚀💪

Last week Nicola and Luca gave a fantastic overview and demo of Apache Camel K. They talk was recorded and its posted online on youtube. If you have the time I highly recommend to watch the video and see where we are going with serverless integration with Camel K.


Long 2h Apache Camel video (sorry it's in danish)

A couple of days ago I was back in Copenhagen, at the capital region IT division for health care, where my Apache Camel journey started in 2008. So it was great being back at that magical place ;)

The event was hosted by Javagruppen and they had video equipment so they streamed the event live on youtube.

The agenda of my 2 hour session was:

  • What is Apache Camel?
  • Apache Camel v3
  • Apache Camel K
  • Knative & Camel
  • Quarkus & Camel

The main topic of the session was the new Apache Camel K project, but I gave a good extended coverage of what's coming in the upcoming Apache Camel v3.

For anyone curious a bit what is coming in Apache Camel v3, then you can take a look at the slides as they are in english.

The slides of the talk is here:

... and the video is online at youtube (danish):


Short Apache Camel K video

You may have seen the work we are doing in the Apache Camel community around Camel K.
Nicola introduced Camel K on his blog a half year ago, with the words
Just few months ago, we were discussing about a new project that we could start as part of Apache Camel. A project with the potential to change the way people deal with integration. That project is now here and it’s called “Apache Camel K”.
The Apache Camel K is in active development and its progressing nicely. Yesterday I gave a talk at the KMD Steam conference in Copenhagen, Denmark about Serverless Integration with Knative and Camel K on Kubernetes. As the talk was only 30 minutes I decided not to do any live demos and quickly recorded a 45 second short video of a quick Camel K demo.

In the top left corner you have a Camel route in a single Sample.java source file. On the top right corner we have an openshift web console, as I am running a local minishift cluster (Camel K also runs nicely on vanilla Kubernetes, but their web console is not as great as the one from openshift).
In the bottom we have the terminal where I run the Camel K integration with the Camel K CLI tool and the output of the integration is logged in the console. Notice how quickly the rolling upgrade is when I edit and save the Java source code.


I am now a Java Champion

At the end of November last year I was officially welcomed as a new JavaChampion on twitter.

I was among 30 new champions in 2018 and I am very humble to be among all these great champions. As you most likely know my work with Java is heavily focused on the Apache Camel project, and its good to know that other influencers in the Java eco-system that are not invested in general Java, can be recognized for their hard work and be nominated as a champion.

You can find a list of the champions on the official list (updated yearly) and on github (updated frequently).

This weekend I received a welcome gift, which is the official JavaChampion t-shirt and jacket.


Camel in Action / Apache Camel is not for everyone

Writing books is really hard, and you may think that when the book is finally published, you are all done. Well that is not the case for technical books, where our industry and the software stack the book covers is evolving.

For the Camel in Action books where we cover Apache Camel (no shit sherlock) is the same. We are from time to time, updating the source code examples to use newer version of Camel. This is curtesy to our readers so they have examples that runs on the latest Camel version at the time, and also used as a test-bed for the Apache Camel project, when we are testing/voting on new release candidates.

As an author you are also contacted from time to time by readers, whom have question to the book, its examples, and about Apache Camel in general. Thank you for the feedback and we love to get in touch with our readers, but sometimes we have to point people to use the general upstream community for the general Camel questions, when the subject is not specific about our book. And I would also like to thank the readers whom take the time to say thank you to us, that the book helped them get onboard Apache Camel, and other stories they can tell that made a difference.

We also get reports from the observable readers whom have found small mistakes in the book. We are very grateful for getting these to our attention so we can update the errata.

Then finally we have people doing book reviews (awesome, thank you for doing this, we appreciate all honest reviews). Most often we get positive feedback, and that the book has a lot to offer the readers. However we occasionally get the reviews from readers whom very likely have the book for the wrong reason.

For our second edition, we have two such examples from Amazon US and Germany. I have to the best of my ability responded to those reviews, with our point of view, and trying to explain/address their critique. All we want is for potential new readers to have the fact at their hands, and can make a better decision whether to purchase the book or not.

And I want to end this blog with me officially saying

Apache Camel is not for everyone

( but its still the most used open source integration framework in the universe )

Amazon.com review - Not very useful

Amazon.de review - Nahezu nutzlos..