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 <claus.ib...@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