Back from ApacheCon Sevilla 2016

This week I attended my first (but not my last) ApacheCon in Sevilla Spain. The event is co-hosted with Apache Big Data that runs monday and Tuesday and then ApacheCon from Wednesday till friday. I had the opportunity to travel to Sevilla on monday, and therefore had Tuesday as full day for sight seeing and attending a few talks at Apache Big Data.

Fellow Camel rider Jean Baptiste co-presented Apache Beam which seems like a really interesting project. It provides an unified API and DSL on top of various big data implementations such as Apache Flink, Hadoop, Storm, and what else is out there. I talked to Jean about a potential integration between Beam and Camel. It would open up the number of systems that Beam could ingest data from using the many Camel components.

In the hallway I meet Krzysztof Sobkowiak from the Apache ServiceMix project, so we took the opportunity to take a selfie. Kudos to Krzysztof for getting involved with ServiceMix so this project can get some releases out the door from time to time.

In the afternoon I went for sightseeing and I must say Seville is a beautiful city with parks, historical buildings, big cathedral and a bull fighter arena. All within walking distance in the city center.

The Plaza de Espana is particular impressive (see link on wikipedia for more impressive photos). Supposedly some footage of Star Wars and Game of Thromes was filmed there.

A friend of mine had be in Sevilla before and he told me about the many citrus trees in the streets, which was not so hard to find.

Citrus trees in the streets of Sevilla

On thursday I kicked off a series of Apache Camel talk. My talk was an introiuctinary talk as there is still many people who are not aware of Apache Camel - even at ApacheCon. However my first thought was that everybody knew Camel and people wanted to sleep in, as 10 minutes before my talk the room was empty.

Spanish way of life with siesta - 10 minutes before my talk

However people turned up and the room was half full and about 1/3 already knew Camel, so I was a on a mission to spread the word about Apache Camel.

Thanks Bilgin for the photo of me during my presentation
You can find slides to my talk at my slideshare account.

The following speaker Dzmitry Pletnikau talked about how his company are using Camel since 2013 in the real world as a non Java shop. It was interesting to hear how much they can do with Camel XML and a ServiceMix container running in docker so developers dont need any Java installed locally and just drop/edit an XML file.

Dzmitry Pletnikau speaking about Camel

Then Colm from Talend talked about the Apache Syncope (identity management) project and how they have integrated with Apache Camel that adds a lot of power to what you can do.

Colm about to start his presentation (sorry the photo is a little blurred)
The last Camel talk of the day was Bilgin Ibryam whom talked about cloud native Camel design patterns.

Bilgin about to start his presentation

Bilgin whom authored the awesome book Camel Design Patterns gave an excellent presentation where he talked about the implications and also new possibilities that the container world brings to the table. One of his slides had a great summary of integration patterns evolving.

How are integration patterns evolving?

You can find the slides for Bilgins talk at his slideshare account.

In the evenings Bilgin, myself and Krzysztof had the pleasure of accompanying some of our Apache friends from Talend and go out for tapas and a few beers. The highlight was the first evening on Wednesday where we found an excellent tapas bar with great food. I took a photo but unfortunately it was blurry.

Blurry photo but the food was excellent

I had to return back on friday morning as I have been attending two birthday parties with my friends in Sweden. So I could not attend the last day where Yahoo Japan gave a talk about Apache Camel and how they are using Camel in their production systems in Japan. I had the pleasure of meeting the speakers the day before and talk about Camel and what they are doing.

I also had many other hallway talks with attendees and fellow speakers about Open Source, Apache, and Apache Camel. It was great meeting so many and hearing about what is happening.

ApacheCon EU 2016 was great, and the location in Sevilla is awesome. I hope to be back in 2017 if Camel still sparks interrest and my talk is accepted.


Apache Camel now with 1000+ stars

Apache Camel was created before github existed. The project is hosted at ASF on their infrastructure.

ASF integrated with github 4-5 years ago and all their projects are mirrored to github. For example the first PR at github to Apache Camel is from November 2012.

In those 4 years at github we have seen more involvement from the community. Its much easier for users to provide code changes as github PRs and as such we have merged/closed 1246 as of today. A rough estimate is 95% of those PRs are from outside contributors, and 5% from Camel team itself.

At github projects can be starred by users whom seems to like the project. I personally do star other projects there whom I am using or have been used in the past which has benefited me.

Yesterday at the 9th November 2016 which is going to be a date that the world remembers as the day that Apache Camel reached 1000 stars at github. (* there was also another event on 8th/9th November that many people will remember)

As of now Apache Camel has 1030 stars. Thank you for showing the support for the project. 


I am going to ApacheCon EU 2016 - All day track on Apache Camel

I just booked my hotel and flight tickets for ApacheCon EU 2016 which is hosted in Sevilla Spain. Its a city I have never visited so I am looking forward to the trip. I will fly in on Monday so I have a full day before ApacheCon starts, where I plan to walk the streets and soak in some of the local atmosphere, food, coffee and maybe a beer ;).

ApacheCon EU starts on Wednesday 16h November and ends on Friday 18th. On the day between Thursday there is an entire full day track about Apache Camel.

I have the honor of kick off the track with my talk about Apache Camel - The integration library.

Of the other talks on the day I want to point out Bilgin's talk Cloud Native Camel Design Patterns. Biligin whom is a senior Camel architect/consultant has many years of experience in the field, and based on his knowledge he catalog a book Camel Design Patterns that has the modern patterns about microservices and cloud technologies. I really enjoy his book, which is highly recommended.

As a long term Camel user I am looking forward to attend and see all the other Camel talks to see how other users fare with Camel.

If you have interest in Apache Camel, then I hope you can attend ApacheCon EU. I love the hallway conversations at the conferences and events I attend. 


Apache Camel - Time for a new logo

At the Apache Camel project we have a current logo as shown

It was a great initial effort of a logo for the project when it was created 9 years ago. However we have discussed in the community to come up with a new logo.

We got in touch with some designers from opensourcedesign whom does volunteer work, and they have come up with a first design of a logo.

They work is posted at github where we encourage Camel users to participate and share your thoughts. We are an open community and very much want to hear and see your ideas for a new logo.

The logo is also discussed at the Apache Camel @dev mailing list where you also can participate.

Github ticket: https://github.com/opensourcedesign/jobs/issues/108


Apache Camel 2.18 Released - Whats included

This week Apache Camel 2.18.0 was released. This release is a significant release which I will highlight in this blog post.

Java 8
Camel 2.18 is the first release that requires Java 1.8 (eg easy to remember Camel 2.18 = Java 1.8. Camel 2.17 = Java 1.7). We have taken a cautious approach and kept the Camel API backwards compatible in the sense as an end user you can take your existing Camel application source code and re-compile them with Java 1.8 and Camel 2.18 and you should be all good.

Internally in the Camel source code we have started using Java 8 APIs for new functionality. Existing functionality is still using Java 7 APIs so we can easily backport bug fixes to the older versions.

We have also gently introduced a few Java 8 lambda/functional APIs into the Java RouteBuilder you can use in predicates and message transformations. You can view a little example at github.

Spring Boot Starters
We had support for Spring Boot since Camel 2.15, but in this release we have curated all the Camel components to align and make them work as first class Spring Boot starter components. This means you should use -starter as your dependencies, such as camel-kafka-starter.

Spring Boot Auto Configuration
All the Camel components now generate Spring Boot auto configuration source code which means you can configure components, data formats, languages etc using Spring Boot configuration. For example in the application.properties file. And on top of that tooling such as IDEA, Eclipse etc which has support for Spring Boot will have code completions when editing the application.properties file.

Nicola Ferraro whom help implement posted a blog entry with more details.

Spring Boot Health Check
Apache Camel comes with health check integrated with Spring Boot if you are using actuators. The health check does a coarse grain check that Camel did start up properly. We plan to implement a deeper Health Check API in Camel to allow individual components to participate in the check. For example to check if the component can connect to a remote system and so on.

WildFly-Swarm Camel
The WildFly Swarm project also has great support for Apache Camel. However this development happens at the wildfly-camel project. WildFly-Camel released version 4.3.0 that supports Camel 2.18.0.

Automatic Documentation
I have previously blogged about that we are working on keeping and generating the Camel documentation from the source code. This means that every Camel component, eip, language, data format etc. all have their options documented in the source code, which we then extract during build and keep the accompanying documentation up to date. We have migrated almost all the documentation from the old wiki system to .adoc files in the source code. We will continue this work to complete this for the next release, and will work on build a new website.

As a Camel developer you may think its not a big deal but really it is. This ensures that all options are always 100% up to date in the documentation. It also allows tooling to access this information at both design and runtime. hawtio can at runtime display deep level information about all your endpoints and include the documentation for each option as shown:

We also have a Maven plugin that can scan all your source code and report invalid configuring Camel endpoints. This plugin is currently hosted at fabric8 where we can foster innovation faster. However when the plugin matures then we plan to donate the source code to Apache Camel project to be included out of the box.

XML XSD fully documented
The XML XSD for Spring and Blueprint now also includes documentation for the configuration you can do outside routes, such as on and other global configurations.

One of the smaller but really lovely new additions is the FluentProducerTemplate which is using a fluent style API as a client API for sending a message to a Camel endpoint. Now you can do this nicely with

template().withBody("Hello World).withHeader("foo", 123").withHeader("bar", 456).to("jms:queue:beer").send();

Rest Producer
The Rest component allows to call REST services now (as a client), where you can pick one of the following Camel components for the HTTP transport: http, http4, netty4-http, jetty, restlet, undertow. You can also refer to a existing swagger api doc and include camel-swagger-java on the classpath, for automatic validation of rest endpoint is configured to use a valid rest operation/parameters.

Circuit Break using Hystrix
We added native support for using Netflixx Hystrix as circuit break in your Camel routes. There is an example included.

Below is another example from an example with Spring Boot calling a service running on WildFly Swarm that runs on Kubernetes cluster (or local) which I have been giving talks about recently.

    public void configure() throws Exception {
                .setBody().constant("Nobody want to talk to me")

Zipkin message tracing
The release also includes camel-zipkin which allows to use zipkin for distributed message tracing. You can find more details with the provided example.

The Service Call EIP allows to call remote services with service discovery from a pluggable service registry. For example you can use etdc, consul, ribbon, kubernetes and others are coming.

New Components
As usual each release comes with a number of new components:

  • camel-asterisk - For interacting with Asterisk PBX Servers
  • camel-cm-sms - For sending SMS messages using SM SMS Gateway.
  • camel-consul - For integrating your application with Consul.
  • camel-ehcache - For interacting with Ehcache 3 cache.
  • camel-flink - Bridges Camel connectors with Apache Flink tasks.
  • camel-lumberjack - For receiving logs over the lumberjack protocol (used by Filebeat for instance)
  • camel-ribbon - To use Netflixx Ribbon with the Service Call EIP.
  • camel-servicenow - For cloud management with ServiceNow.
  • camel-telegram - For messaging with Telegram.
  • camel-zipkin - For tracking Camel message flows/timings using zipkin.
  • camel-chronicle - For interacting with OpenHFT's Chronicle-Engine.
New Data Formats
And we also have a single new data format:
  • camel-johnzon - Apache Johnzon is an implementation of JSR-353 (JavaTM API for JSON Processing).
Important information when upgrading
Older versions of Spring such as 3.x and 4.0.x has been dropped.

OSGi users on ServiceMix/Karaf should also be using Karaf 4.x. However it may work on some older Karaf versions, but its not officially supported. The next release will drop support for older releases for sure.

OSGi users with Spring-DM should install camel-spring-dm module as Spring DM has been removed from camel-spring.

Spring Boot 1.4.x is now required.

You can find more details in the Camel release notes.

What's Next
We will work on a Camel 2.19 release where we can further improve on the trajectory the Camel 2.18 release brings us with the new path on Java 8. We also want to finish migrating the documentation and work on a new website. Hopefully we can also get a nice logo. 

Followed by Camel 2.19, we will get started on Camel 3.x. But this will be discussed in the Camel community first. However for the remainder of this year, we will focus on Camel 2.19 which is planned for start of / Q1 2017.


Installing Kubernetes from Copenhagen Airport in one command (while having a drink)

Yesterday I was on my way to USA to attend and speak at two events in Atlanta and Minneapolis that Red Hat is hosting.

My flight was delayed 3.5 hours and I was given a voucher with the value of 79 DKK which I could only spend in certain shops and restaurants. So I asked myself - Is it to early for a beer because the time was 10:30 am? 

... No never when you are in an Airport.

I worked a bit on my slides and when I was done with that, I though - Could I install Kubernetes using a single command, while I was drinking my 2nd order which was a Whiskey Sour?

So I deleted Kubernetes, fabric8 and what else I had on my laptop and got myself prepared and pressed the video record button. 

After 18 minutes of recording .. I can answer that Yes you can. 

Now I have arrived in Atlanta and have uploaded the full video recording, which you can take a look at. You may want to fast forward after 4-5 minutes where binaries and docker are downloading the internet from dockerhub. Yeah I guess I was pushing the boundaries what a public free to use wifi can be used for in an airport. I would assume they had some rate limiting or something. But nevertheless it works, and you are free to enjoy a beverage. That is a pretty good deal ;)

In case you wonder. The maven command:

   mvn io.fabric8:fabric8-maven-plugin:3.1.62:cluster-start

... can be run in any directory. There is no pom.xml file in the directory where I run the command.

You can find more information in the fabric8 maven documentation. And also if you haven't read James Strachan recent excellent blog about the busy Java developer, then I highly recommend to take a look at that too.

PS: I did make another spelling mistake. Did you spot it? .. It was in the text box in the beginning where I typed Kuberentes instead of Kubernetes.


James Strachan - A busy Java developers guide to developing microservices on Kubernetes and docker

James Strachan blogged a few days ago about all the great work that has happened recently at the fabric8 project in terms of improving the developer experience with "kicking the tires" as I say it.

As a Java developer he shows how you can get started with a Kubernetes cluster with a single Maven command, that downloads and install the binaries. While its doing that you can go fetch a cup of coffee and relax.

And don't worry the installation is local and installing in your home directory under .fabric8. So at the end of the day, you can just delete it all, and its gone - no uninstall procedure or something like that.

It has never been that easy to just from Maven run

    mvn fabric8:run

And it will build, deploy your application in the cluster, and then tailing the log. And when you are done, just press ctrl + c to break and the app is un deployed.

Oh bugger there is a bug in the code somewhere. How do I debug this, when the application runs in the cluster and my Java IDE is running on my computer/laptop? Well behold just run:

    mvn fabric8:debug

And you can attach a remote debugger from your Java IDE.

Okay I don't want to steal more of James thunder. Now head over and read his blog piece and make sure also to watch the video at the end. Christian Posta demonstrates all this.

PS: Next week we are traveling and presenting in USA. So if you have the opportunity to attend then James Strachan, Christian Posta, Rob Davies, James Rawling and myself will be there to give talks and demos about this stuff and other cool things as well.

PPS: The next thing we are working on is a fabric8:watch so you can do live code changes in your running containers without a full redeploy. There is still a few things to iron out to make it work well, but we are getting very close.