You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/12/16 14:19:49 UTC

[camel-website] branch master updated: Blog post whats new in Camel 3.7 (#508)

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 94d3965  Blog post whats new in Camel 3.7 (#508)
94d3965 is described below

commit 94d3965716411753693b3ac7516f09103784035e
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Dec 16 15:19:43 2020 +0100

    Blog post whats new in Camel 3.7 (#508)
    
    Blog post with whats new in Camel 3.7
    
    * Apply suggestions from code review
    Co-authored-by: Aurélien Pupier <ap...@redhat.com>
---
 .../2020/12/Camel37-Whatsnew/csimple-compiled.png  | Bin 0 -> 15785 bytes
 content/blog/2020/12/Camel37-Whatsnew/featured.png | Bin 0 -> 3975989 bytes
 content/blog/2020/12/Camel37-Whatsnew/index.md     | 196 +++++++++++++++++++++
 .../simple-csimple-performance.png                 | Bin 0 -> 548212 bytes
 4 files changed, 196 insertions(+)

diff --git a/content/blog/2020/12/Camel37-Whatsnew/csimple-compiled.png b/content/blog/2020/12/Camel37-Whatsnew/csimple-compiled.png
new file mode 100644
index 0000000..d0346c2
Binary files /dev/null and b/content/blog/2020/12/Camel37-Whatsnew/csimple-compiled.png differ
diff --git a/content/blog/2020/12/Camel37-Whatsnew/featured.png b/content/blog/2020/12/Camel37-Whatsnew/featured.png
new file mode 100644
index 0000000..e5077f5
Binary files /dev/null and b/content/blog/2020/12/Camel37-Whatsnew/featured.png differ
diff --git a/content/blog/2020/12/Camel37-Whatsnew/index.md b/content/blog/2020/12/Camel37-Whatsnew/index.md
new file mode 100644
index 0000000..d917a35
--- /dev/null
+++ b/content/blog/2020/12/Camel37-Whatsnew/index.md
@@ -0,0 +1,196 @@
+---
+title: "Apache Camel 3.7 What's New"
+date: 2020-12-16
+authors: [davsclaus]
+categories: ["Releases"]
+preview: Details of what we have done in the Camel 3.7 release.
+---
+
+Apache Camel 3.7 LTS has just been released.
+
+This is a LTS release which means we will provide patch releases for one year.
+The next planned LTS release is 3.10 scheduled towards summer 2021.
+
+
+## So what's in this release?
+
+This release introduces a set of new features and noticeable improvements that we will cover in this blog post.
+
+### Pre compiled languages
+
+We continued our avenue of making Camel faster and smaller.
+This time we focused on the built-in Simple scripting language.
+
+First we added the [jOOR language](/components/latest/languages/joor-language.html). jOOR is a small Java tool
+for performing runtime compilation of Java source code in-memory. It has some limitations but generally works well for small
+scripting code (requires Java 11 onwards).
+
+Then we worked on compiled simple.
+
+### Compiled Simple
+
+The [csimple language](https://camel.apache.org/components/latest/languages/csimple-language.html)
+is parsed into regular Java source code and compiled together with all the other source code,
+or compiled once during bootstrap via jOOR.
+
+{{< image "csimple-compiled.png" "Compiled Simple Language" >}}
+
+In a nutshell, compiled simple language excels over simple language when using dynamic
+Object-Graph Navigation Language (OGNL) method calls.
+
+For example profiling the following simple expression
+
+    <simple>${exchangeProperty.user.getName} != null && ${exchangeProperty.user.getAge} > 11</simple>
+
+with the equivalent csimple expression:
+
+    <csimple>${exchangeProperty.user} != null && 
+             ${exchangeProperty.user.getName()} != null && 
+             ${exchangeProperty.user.getAge()} > 11</csimple>
+
+yields a dramatic 100 times performance improvement in reduced cpu usage as shown in the screenshot:
+
+{{< image "simple-csimple-performance.png" "Simple vs Compiled Simple" >}}
+
+For more information about the compiled simple language and further break down of performance improvements
+then read [Claus blog post](http://www.davsclaus.com/2020/12/apache-camel-37-compiled-simple.html).
+
+We have provided two small examples that demonstrate `csimple` as pre compiled and as runtime compiled during bootstrap.
+You can find these two examples from the official Apache Camel examples repository at:
+
+- [csimple pre compiled example](https://github.com/apache/camel-examples/tree/master/examples/camel-example-csimple)
+- [csimple runtime compiled example](https://github.com/apache/camel-examples/tree/master/examples/camel-example-csimple-joor)
+
+
+### Optimized core
+
+We have continued the effort to optimize camel-core. This time a number of smaller improvements in various areas
+such as replacing regular expressions with regular Java code when regular expressions were overkill
+(regexp take up sizeable heap memory).
+
+The direct component has been enhanced to avoid synchronization when the producer calls the consumer.
+
+We also enhanced the internals of the event notifier separating startup/stop events from routing events,
+gaining a small performance improvement during routing.
+
+We also reduced the number of objects used during routing which reduced the memory usage.
+
+Another significant win was to bulk together all the type converters from the core, into two classes (source generated).
+This avoids registering individually each type converter into the type converter registry which saves 20kb of heap memory.
+
+If you are more curious about how we did these optimizations and with some performance numbers,
+then [Claus wrote a blog post](http://www.davsclaus.com/2020/11/apache-camel-37-more-camel-core.html).
+
+
+### Optimized components startup
+
+The camel core has been optimized in Camel 3 to be small, slim, and fast on startup. This benefits
+[Camel Quarkus](https://camel.apache.org/camel-quarkus/latest/) which can do built time optimizations
+that take advantage of the optimized camel core.
+
+We have continued this effort in the Camel components where whenever possible initialization is moved ahead
+to an earlier phase during startup, that allows enhanced built time optimizations. As there are a lot of Camel
+components then this work will progress over the next couple of Camel releases.
+
+
+### Separating Model and EIP processors 
+
+In this release we untangled model, reifier and processors.
+
+This is a great achievement which allows us to take this even further with design time vs runtime.
+
+    Model    ->    Reifier   ->   Processor
+    (startup)      (startup)      (runtime)
+
+The model is the structure of the DSL which you can think of as _design time_ specifying your Camel routes.
+The model is executed once during startup and via the reifier (factory) the runtime EIP processors is created.
+After this work is done, the model is essentially not needed anymore.
+
+By separating this into different JARs (camel-core-model, camel-core-reifier, camel-core-processor) then we ensure
+they are separated and this allows us to better do built time optimizations and dead code elimination
+via [Quarkus](https://quarkus.io/) and/or GraalVM.
+
+This brings up to lightweight mode.
+
+
+### Lightweight mode
+
+We started an experiment earlier with a lightweight mode. With the separation of the model from the processors,
+then we have a great step forward, which allowed us to make the lightweight mode available for end users to turn on.
+
+In lightweight mode Camel removes all references to the model after startup 
+which causes the JVM to be able to garbage collect all model objects and unload classes, freeing up memory.
+
+After this it's no longer possible to dynamically add new Camel routes. The lightweight mode is intended for
+microservice/serverless architectures, with a _closed world_ assumption.
+
+
+### Autowiring components
+
+The Camel components is now capable of autowiring by type. For example the [AWS SQS](https://camel.apache.org/components/latest/aws-sqs-component.html) components can automatically
+lookup in the registry if there is a single instance of `SqsClient`, and then pre configure itself.
+
+We have marked up in the Camel documentation which component options supports this by showing *Autowired* in bold
+in the description.
+
+
+### Salesforce fixes
+
+Our recent Camel committer [Jeremy Ross](https://github.com/jeremyross) did great work to improve and fix bugs in the [camel-salesforce component](https://camel.apache.org/components/latest/salesforce-component.html).
+We expect more to come from him.
+
+
+### VertX Kafka Component
+
+A new Kafka component has been developed that uses the Vert.X Kafka Java Client which allows us to use all of its
+features, and also its robustness and stability. 
+
+The [camel-vertx-kafka](https://camel.apache.org/components/latest/vertx-kafka-component.html) component is intended
+to be (more) feature complete with the existing camel-kafka component. We will continue this work for the next couple of Camel releases.
+
+
+### DataSonnet
+
+The new [camel-datasonnet](https://camel.apache.org/components/latest/languages/datasonnet-language.html) component,
+is to be used for data transformation using the [DataSonnet](https://datasonnet.com/) standard.
+
+DataSonnet is an open source JSON-centric, template-based data transformation standard built to rival
+proprietary options available in the market.
+
+
+### Spring Boot
+
+We have upgraded to Spring Boot 2.4.
+
+
+### New components
+
+This release has a number of new components, data formats and languages:
+
+- [AtlasMap](https://camel.apache.org/components/latest/atlasmap-component.html): Transforms the message using an [AtlasMap](https://www.atlasmap.io/) transformation
+- Kubernetes Custom Resources: Perform operations on Kubernetes Custom Resources and get notified on Deployment changes
+- Vert.X Kafka: Sent and receive messages to/from an Apache Kafka broker using vert.x Kafka client
+- JSON JSON-B: Marshal POJOs to JSON and back using JSON-B
+- CSimple: Evaluate a compile simple expression language
+- DataSonnet: To use DataSonnet scripts in Camel expressions or predicates
+- jOOR: Evaluate a jOOR (Java compiled once at runtime) expression language
+
+
+## Upgrading
+
+Make sure to read the [upgrade guide](/manual/latest/camel-3x-upgrade-guide-3_7.html) if you
+are upgrading to this release from a previous Camel version.
+
+
+## More details
+
+The previous LTS release was Camel 3.4. We have blog posts for what's new in
+[Camel 3.5](https://camel.apache.org/blog/2020/10/Camel36-Whatsnew/) and
+[Camel 3.6](https://camel.apache.org/blog/2020/09/Camel35-Whatsnew/) you may want to read
+to cover all news between the two LTS releases.
+
+
+## Release Notes
+
+You can find more information about this release in the [release notes](/releases/release-3.7.0/),
+with a list of JIRA tickets resolved in the release.
diff --git a/content/blog/2020/12/Camel37-Whatsnew/simple-csimple-performance.png b/content/blog/2020/12/Camel37-Whatsnew/simple-csimple-performance.png
new file mode 100644
index 0000000..ae1b901
Binary files /dev/null and b/content/blog/2020/12/Camel37-Whatsnew/simple-csimple-performance.png differ