Apache Camel 2.20 has been released today, and as usual, I am tasked to write a blog about this great new release and the highlights.
The release has the following highlights.
1) Java 9 Technical Preview Support
We have started our work to support Java 9, and this release is what we call technical preview. The source code builds and runs on Java 9 and we will continue to improve work for official support in the following release.
2) Improved Startup Time
We have found a few spots to optimize the startup time of Apache Camel, so it starts 100 - 200 milliseconds faster.
3) Optimized Core to Reduce Footprint
Many internal optimisations in the Camel routing engine, such as reducing thread contention when updating JMX statistics, reducing internal state objects to claim less memory, and reducing the number of allocated objects to reduce overhead on GC etc, and much more.
4) Improved Spring Boot Support and Preparing for Spring Boot 2
We have improved Camel running on Spring Boot in various ways.
We also worked to make Apache Camel more ready and compatible with the upcoming Spring Boot 2 and Spring Framework 5. Officially support for these is expected in Camel 2.21 release.
5) Improved Spring Lifecycle
Starting and stopping the CamelContext when used with Spring framework (SpringCamelContext) was revised to ensure that the Camel context is started last - when all resources should be available, and stopped first - while all resources are still available.
6) JMS 2.0 Support
The camel-jms component now supports JMS 2.0 APIs.
7) Faster Map Implementation for Message Headers
If you include camel-headersmap component on the classpath, then Camel will auto-detect it on startup and use a faster implementation of case-insenstive map (used by camel message headers).
8) Health-Check API
We have added experimental support for a new health-check API (which we will continue to work on over the next couple of releases). The health checks can be leveraged in cloud environments to detect non-healthy contexts.
9) Cluster API
Introduced an experimental Cluster SPI (which we will continue to work on over the next couple of releases) for high availability contexts, out of the box Camel supports: atomix, consul, file, kubernetes, and zookeeper as underlying clustering technologies through the respective components.
10) RouteController API
Introduced an experimental Route Controller SPI (which we will continue to work on over the next couple of releases) aimed to provide more fine-grained control of routes, out of the box Camel provides the following implementations:
SupervisingRouteController which delays startup of the routes after the camel context is properly started and attempt to restart routes that have not been started successfully.
ClusteredRouteController which leverages Cluster SPI to start routes only when the context is elected as leader.
11) More Components
As usual, there are a bunch of new components; for example, we have support for calling AWS lambda functions in the camel-aws component. There is also a new JSON validator component, and camel-master is used with the new Cluster API to do route leader election in a cluster. There is 13 new components and 3 new data formats. You can find more details in the Camel 2.20 release notes.
We will now start working on the next release, 2.21, which is scheduled for the start of 2018. We are trying to push for a bit quicker release cycle of these bigger Camel releases, so we can go from doing 2 to 3 releases per year. This allows people to quickly pick up new functionality and components etc.
Also, we want to get a release out that officially support Java 9, Spring Boot 2 and all the usual great stuff we add to each release, and what the community contributes.