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
commit 67e6e01280d2ca4fae77a7e89087c24787cea79f Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Dec 16 16:58:29 2020 +0100 Fixed links --- content/blog/2020/12/Camel37-Whatsnew/index.md | 123 +++++++++++-------------- 1 file changed, 55 insertions(+), 68 deletions(-) diff --git a/content/blog/2020/12/Camel37-Whatsnew/index.md b/content/blog/2020/12/Camel37-Whatsnew/index.md index 36ecee1..f1a8da6 100644 --- a/content/blog/2020/12/Camel37-Whatsnew/index.md +++ b/content/blog/2020/12/Camel37-Whatsnew/index.md @@ -1,16 +1,14 @@ --- title: "Apache Camel 3.7 What's New" -date: 2020-12-16 -authors: [davsclaus] +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. - +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? @@ -18,11 +16,11 @@ This release introduces a set of new features and noticeable improvements that w ### Pre compiled languages -We continued our avenue of making Camel faster and smaller. -This time we focused on the built-in Simple scripting language. +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 +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. @@ -30,13 +28,13 @@ Then we worked on compiled simple. ### Compiled Simple The [csimple language](/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. +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. +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 @@ -52,8 +50,8 @@ yields a dramatic 100 times performance improvement in reduced cpu usage as show {{< 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). +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: @@ -61,39 +59,37 @@ You can find these two examples from the official Apache Camel examples reposito - [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 +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 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. +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](/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. +[Camel Quarkus](/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 +### Separating Model and EIP processors In this release we untangled model, reifier and processors. @@ -102,72 +98,67 @@ This is a great achievement which allows us to take this even further with desig 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. +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 +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. +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. +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](/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. +The Camel components is now capable of autowiring by type. For example +the [AWS SQS](/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. - +Our recent Camel committer [Jeremy Ross](https://github.com/jeremyross) did great work to improve and fix bugs in +the [camel-salesforce component](/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](/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. +features, and also its robustness and stability. +The [camel-vertx-kafka](/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](/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. +The new [camel-datasonnet](/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](/components/latest/atlasmap-component.html): Transforms the message using an [AtlasMap](https://www.atlasmap.io/) transformation +- [AtlasMap](/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 @@ -175,22 +166,18 @@ This release has a number of new components, data formats and languages: - 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. - +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](/blog/2020/10/Camel36-Whatsnew/) and -[Camel 3.6](/blog/2020/09/Camel35-Whatsnew/) you may want to read -to cover all news between the two LTS releases. - +[Camel 3.6](/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. +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.