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 2021/02/10 13:23:08 UTC

[camel-website] branch new38 created (now 9b2cca0)

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

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


      at 9b2cca0  Blog entry about whats new in Camel 3.8

This branch includes the following new commits:

     new 9b2cca0  Blog entry about whats new in Camel 3.8

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[camel-website] 01/01: Blog entry about whats new in Camel 3.8

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9b2cca0985a170bd8b5af871234c3fb16f76fc32
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Feb 10 14:22:48 2021 +0100

    Blog entry about whats new in Camel 3.8
---
 content/blog/2021/02/Camel38-Whatsnew/featured.png | Bin 0 -> 3975989 bytes
 content/blog/2021/02/Camel38-Whatsnew/index.md     | 153 +++++++++++++++++++++
 .../02/Camel38-Whatsnew/jdk-mission-control.png    | Bin 0 -> 34600 bytes
 3 files changed, 153 insertions(+)

diff --git a/content/blog/2021/02/Camel38-Whatsnew/featured.png b/content/blog/2021/02/Camel38-Whatsnew/featured.png
new file mode 100644
index 0000000..e5077f5
Binary files /dev/null and b/content/blog/2021/02/Camel38-Whatsnew/featured.png differ
diff --git a/content/blog/2021/02/Camel38-Whatsnew/index.md b/content/blog/2021/02/Camel38-Whatsnew/index.md
new file mode 100644
index 0000000..9017d86
--- /dev/null
+++ b/content/blog/2021/02/Camel38-Whatsnew/index.md
@@ -0,0 +1,153 @@
+---
+title: "Apache Camel 3.8 What's New"
+date: 2021-02-12
+authors: [davsclaus]
+categories: ["Releases"]
+preview: Details of what we have done in the Camel 3.8 release.
+---
+
+Apache Camel 3.8 has just been released.
+
+This is a non-LTS release which means we will not provide patch releases.
+The next planned LTS release is 3.10 scheduled for June 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.
+
+### Startup and Shutdown Logging
+
+A noticeable difference is we changed the logging noise during startup and shutdown of Camel.
+The logging better reflect that Camel is a tiny framework that has a low footprint.
+
+The level of details can be customized with the __StartupSummaryLevel__ option.
+You can go as low as a __oneline__'r or even turn it __off__.
+
+If the change is too radical, then you can set the option to __classic__ so the loiggin
+is as it was previously, and has been for over a decade.
+
+### Java Flight Recorder
+
+Camel is now capable of capturing "work steps" during startup that can be recorded with Java Flight Recorder.
+This can be used to better diagnose and find where your Camel applications may be slow to startup, for example due to a misbehaving component or custom user code.
+
+The screenshot below shows a recording that has captured a Camel application that takes about 3 seconds to startup.
+Its a very tiny application so we expected it to be faster.
+
+{{< image "jdk-mission-control.png" "JDK Mission Control" >}}
+
+If we sort the events by duration in the JDK mission control, we can see that there are 4 events that take over 2 seconds,
+and this helps us pin-point to where the bottleneck is located.
+
+There are more details on this [blog post](http://www.davsclaus.com/2021/01/apache-camel-38-and-java-flight-recorder.html).
+
+### Optimized core
+
+We have continued the optimizations and have separated route startup into an initialization and startup phase.
+This allows Camel to do initialization the routes as part of its own initialization. Meaning the start phase has been reduced
+in needed work, and allows Camel to startup routes faster.
+
+We will continue this effort for Camel 3.9 and 3.10 to allow routes to be enabled for built-time optimization,
+making Camel faster to startup on frameworks such as Camel Quarkus and Graal VM.
+
+### Optimized toD
+
+The dynamic to EIP has been optimized to not rely on an embedded `camel-catalog` at runtime.
+Instead we have source code generated Java code that toD is using when optimizing the routing for you.
+This reduces the footprint as previously toD would have to parse a JSON model to built up an internal model of the endpoint that
+are used dynamically. Instead the component now carries Java source code that is optimized for toD to use.
+
+All the messaging components have been improved to take advantage of toD.
+
+### Reflection free components
+
+We identified about 10 components that are using the `@InvokeOnHeader` function in their producers.
+We made those reflection free by source code generated Java code that setup and invokes the appropiate Java methods
+as direct Java method calls, eliminating reflection all together.
+
+### Loading routes from source files
+
+A new `RoutesLoader` system was implemented which allows to plugin custom route loaders for source files.
+This is ported from Camel K which is capable of loading routes from Java, XML, Groovy, JavaScript, Kotlin, YAML and other languages.
+
+As a start we ported over the Java loader from Camel K, and improved our own XML loader.
+
+An [example is provided](https://github.com/apache/camel-examples/tree/master/examples/camel-example-routeloader)
+that shows loading both Java and XML routes from the file system.
+The Java routes are compiled at runtime with the same system we used for compiling the CSimple language
+that was introduced in Camel 3.8.
+
+We plan to port over support for more sources in Camel 3.9 such as JavaScript, Groovy, Kotlin etc.
+The YAML source is currently being worked on and to make it reflection free, so it can be
+optimized for modern runtimes such as Quarkus and GraalVM.
+
+Speaking of YAML that brings us to the next feature - Kamelets.
+
+### Kamelets
+
+The `camel-kamelet` component has been stabilized as part of Camel K and is now ready
+and have been ported over to the main Camel project.
+
+There is a [little example here](https://github.com/apache/camel-examples/tree/master/examples/camel-example-kamelet)
+of using Kamelet in vanilla Camel.
+
+We have previously introduced Kamelet, which was created in Camel K.
+We forsee Kamelets play a bigger role and wanted to bring them out to the main Camel project.
+
+More information about Kamelets to come - stay tuned.
+
+### Sensitive values
+
+Camel will mask sensitive information when logging, such as password or access tokens.
+As there are 300+ components then there are many different options that carry sensitive informaiton.
+
+We now scan all these components for options marked with `secret=true`
+and generate an up-to-date Java source code directly in the `SensitiveUtils.java`
+which Camel uses for masking. This means that the options being masked is now always current.
+Before the listed options was hardcoded by hand. At this time of writing there are 61
+unique keys for sensitive data.
+
+### Spring Boot
+
+We have upgraded to latest Spring Boot 2.4.2.
+
+### Infinispan
+
+The `camel-infinispan` component has been splitup into a client and embedded component.
+A reason is that most users would use the client mode, which allows us to offer a dedicated component with a smaller set of dependencies. The embedded component is heavier and has a lot more dependencies to include an Infinispan Server.
+
+### Salesforce
+
+The `camel-salesforce` component has yet again had some bug fixes, improvements and new features implemented, with thanks to our
+new committer Jeremy.
+
+### SJMS
+
+The SJMS component has been overhauled to be more aligned with the Spring based JMS component.
+It no longer has its own connection pool, but allows you to use any of the 3rd party connection pooling
+that are standard practice.
+
+### RabbitMQ using Spring Client
+
+A noteworthy mention is that we have added a new `camel-spring-rabbitmq` component that is using Spring RabbitMQ
+to integrate with RabbitMQ. RabbitMQ is from the same company as Spring so its likely better to use their RabbitMQ client.
+
+### New components
+
+This release has a number of new components, data formats and languages:
+
+- camel-kamelet - The Kamelet Component provides support for interacting with the Camel Route Template engine
+- camel-azure-storage-datalake - Camel Azure Datalake Gen2 Component
+- camel-paho-mqtt5 - Communicate with MQTT message brokers using Eclipse Paho MQTT v5 Client
+- camel-huaweicloud-smn - Huawei Cloud component to integrate with SimpleNotification services
+- camel-spring-rabbitmq - Send and receive messages from RabbitMQ using Spring RabbitMQ client
+- camel-stich - Stitch is a cloud ETL service that integrates various data sources into a central data warehouse through various integrations
+
+## Upgrading
+
+Make sure to read the [upgrade guide](/manual/latest/camel-3x-upgrade-guide-3_8.html) if you are upgrading to this
+release from a previous Camel version.
+
+## Release Notes
+
+You can find more information about this release in the [release notes](/releases/release-3.8.0/), with a list of JIRA tickets resolved in the release.
diff --git a/content/blog/2021/02/Camel38-Whatsnew/jdk-mission-control.png b/content/blog/2021/02/Camel38-Whatsnew/jdk-mission-control.png
new file mode 100644
index 0000000..89241e3
Binary files /dev/null and b/content/blog/2021/02/Camel38-Whatsnew/jdk-mission-control.png differ