This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-website.git
The following commit(s) were added to refs/heads/main by this push: new 7e2ad9fb Camel 4 whats new. WIP (#1053) 7e2ad9fb is described below commit 7e2ad9fbde2587de32bc40b5ecb4a23a585937a0 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Aug 15 13:12:42 2023 +0200 Camel 4 whats new. WIP (#1053) Camel 4 whats new Co-authored-by: Gregor Zurowski <gre...@zurowski.org> Co-authored-by: Otavio Rodolfo Piske <orpi...@users.noreply.github.com> --- content/blog/2023/08/camel4-whatsnew/featured.png | Bin 0 -> 243818 bytes content/blog/2023/08/camel4-whatsnew/index.md | 216 ++++++++++++++++++++++ 2 files changed, 216 insertions(+) diff --git a/content/blog/2023/08/camel4-whatsnew/featured.png b/content/blog/2023/08/camel4-whatsnew/featured.png new file mode 100644 index 00000000..a9a95d3b Binary files /dev/null and b/content/blog/2023/08/camel4-whatsnew/featured.png differ diff --git a/content/blog/2023/08/camel4-whatsnew/index.md b/content/blog/2023/08/camel4-whatsnew/index.md new file mode 100644 index 00000000..3d24e761 --- /dev/null +++ b/content/blog/2023/08/camel4-whatsnew/index.md @@ -0,0 +1,216 @@ +--- +title: "Apache Camel 4 What's New (top 10)" +date: 2023-08-15 +authors: [davsclaus,gzurowski,orpiske] +categories: ["Releases"] +preview: Top 10 of what's new in Apache Camel version 4 +--- +After 10 months of development, with 3 milestones, and 2 RC releases, we are releasing Apache Camel v4 +today as LTS release. The Camel `4.0.x` is a LTS release, and we will support it for 1 year. + +This blog post highlights some noteworthy new features and improvements in Camel v4. + +The features are based on work since January 2023, which was the time when we switched `main` branch to +be Camel v4 based. Since then, we focused our effort primarily on Camel v4. + +### 1) Major Goals + +The need for Camel 4 is mainly driven by Java open source projects migrating from `javax` to `jakarta` APIs, +and to keep up with popular runtimes such as Spring Boot and Quarkus. + +1. Migrate from `javax` -> `jakarta` (JEE 10) +2. Java 17 as minimum +3. Spring Boot 3 +4. Quarkus 3 + +Camel 4 requires Java 17. We plan to support Java 21 on next LTS released by the end of this year. + +### 2) Dependency updates + +We have upgraded all 3rd party dependencies to their latest releases where possible. + +### 3) Performance optimizations + +We have improved the performance of the internal Camel routing engine and framework. + +You can find more details in this blog post [camel 4 performance improvements](/blog/2023/05/camel-4-performance-improvements). + +### 4) Camel Spring Boot + +We tested Camel 4 with Spring Boot 3.1.2, the latest release available. + +The `camel-platform-http-starter` is now using the embedded HTTP server directly from Spring Boot, instead of +using Servlet APIs as previously. + +This release also comes with our first basic (and very limited) support for Spring Boot native (AOT compilation). +See more in the [aot-basic](https://github.com/apache/camel-spring-boot-examples/tree/main/aot-basic) example. + +### 5) Camel Quarkus + +The Camel Quarkus project is working on a new release with Camel 4 support, expected later this month. +Stay tuned for their release announcements. + +### 6) Camel Main + +For users who just want to run Camel as a standalone application, we have `camel-main` which is constantly being improved. +The core in `camel-main` is reused by Camel Spring Boot, Camel Quarkus, and Camel JBang as well. + +The inclusion of an embedded HTTP server is now made easy with the new `camel-platform-http-main` module. +See more in the [camel-main](https://github.com/apache/camel-examples/tree/main/examples/main) example. + +### 7) Camel JBang + +We made a lot of improvements to Camel JBang. The `camel` CLI can now easily run with different Camel versions, for example: + + camel run foo.yaml --camel-version=3.21.0 + camel run foo.yaml --camel-version=3.20.6 + +This is very handy when, for example, you need to trouble-shoot when _something_ started failing. For instance, in occasions when +it works on version X but not on version Y, now you can quickly try to find out which version in between that started failing. + +You can also specify that `camel` CLI should use a specific Camel version by default. For example, if you have a newer version of +Camel JBang installed, but must develop and use an older release: + + camel version set 3.20.6 + +We added the following new commands: + +- `camel config`: you can use to set custom user configuration +- `camel log`: you can use to show logs of your running Camel integrations (can show logs for 1 or more Camel apps) +- `camel trace`: you can use to show message tracing of your running Camel integrations (can show logs for 1 or more Camel apps) +- `camel cmd send`: you can use to send messages to an existing running Camel integration +- `camel get route-dump`: you can use to dump routes in XML or YAML format + +We migrated the maven resolver that Camel JBang uses to the latest version, and Camel JBang will now report more accurately whether +a dependency was downloaded or resolved from a local maven repository. The `camel run` command also has a `--verbose` flag to output +more details in dependency resolution that can help during troubleshooting. + +The `camel-main` runtime now supports exporting with Kubernetes manifest and build support, to make it easier to build +container images that are ready to run on Kubernetes. + +We made many improvements to Camel JBang, making it a great way to experiment with Camel and a useful companion tool for traditional +Camel development. + +### 8) XML DSL with beans + +We have been working on unifying the YAML, XML and Java DSL, so that they have feature parity related to configuring beans. For example, +in XML DSL (`camel-xml-io`) you can now declare beans and Camel routes in the same XML file with `<camel>` as the root tag: + +```xml +<camel> + + <bean name="greeter" type="com.foo.Greeter"> + <properties> + <property key="message" value="Hello World" /> + </properties> + </bean> + + <route id="my-route"> + <from uri="direct:start"/> + <bean ref="greeter"/> + <to uri="mock:finish"/> + </route> + +</camel> +``` + +Then Camel handles the dependency injection, among the `<beans>`. + +You can also use Spring dependency injection (which is more advanced), by inlining Spring `<beans>` tag with the spring namespace. +See more in the documentation for `camel-xml-io-dsl` module. + +There is more work to be done, and we are planning to see if we can also use this to simplify migrating from legacy OSGi Blueprint +(and Spring XML files, eg `<beans>`) to the modern Camel DSL. + +### 9) New components + +- `camel-aws2-step-functions`: Manage and invoke AWS Step functions +- `camel-azure-files`: Send and receive files on Azure File Storage +- `camel-dhis2`: Integrate with DHIS2 (health-level) +- `camel-observation`: Observability using Micrometer Observation +- `camel-opensearch`: Send requests to OpenSearch +- `camel-parquet-avro`: Parquet Avro serialization and de-serialization +- `camel-platform-http-main`: Platform HTTP for Camel Main runtime +- `camel-yaml-io`: YAML DSL route dumper +- `camel-zeebe`: Integration with Camunda Zeebe + +### 10) Miscellaneous improvements + +The Camel maven plugins has been made compatible with Apache Maven 4. + +Camel 4 now requires JUnit 5 for unit tests, with the test components that have -junit5 as suffix. + +If you work with XML or JSON payloads, then you can log the body in pretty format with: + + .log("${prettyBody}") + +And in XML: + + <log message="${prettyBody}"/> + +And in YAML: + + - log: "${prettyBody}" + +We have added more _dev_console_s that provide insights into your running Camel application, which +can be used together with Camel JBang and also visible in the developer web console. + +### Migrating to Camel 4 + +Camel 4 is primary supporting Spring Boot, Quarkus, and standalone Camel with `camel-main`. +Other runtimes are not officially supported. For users that must use Camel 4 as a framework on top of other runtimes, +then you can ask for guidance and help in the Camel community. + +We have, of course, cleaned up the code base. For instance, we removed all the deprecated APIs and components. + +Some components that are not `jakarta` API compatible has been removed, until they have new releases, +that works with `jakarta` APIs. The removed components are listed in the migration guide. + +We have also adjusted some APIs used to configure the `CamelContext` with custom settings. + +In terms of backward compatibility, then Camel 4 is mostly compatible with regular Camel applications. + +However, if you are using some of the more advanced features and other plugins in Camel, then migrating the code +to the new version might be needed. + +Additionally, custom components must be migrated and recompiled. + +You can learn about all details can in the [migration guide](/manual/camel-4-migration-guide.html). + +Good luck with your migration if you decide to continue your Camel journey. And for new users to Camel then good luck getting onboard. + +### Roadmap for Camel 4 for the remainder of 2023 + +We will continue working on Camel 4.x and do non-LTS releases, leading up to the next LTS release by end of this year. + +The major goals for this year are to support Java 21, Spring Boot 3.2, and to catch up with newer Quarkus releases. + +The following releases are currently scheduled (subject for change) for this year: + +| Release | Date | Description | +|---------|------|-------------| +| 4.1 | Oct | Non-LTS | +| 4.2 | Dec | LTS | + +An ongoing effort is also to keep stabilizing our CI builds, to ensure commits do not introduce regressions. +At this moment, the CI builds are occasionally have a few test errors that are related to flaky tests, that we keep fixing to +ensure the CI reports are trustworthy. + +Many people helped improve the Camel build and tests for high-end servers like Power and s390x during Camel 4's development. Users +and organizations building and leveraging Apache Camel on those platforms should have a smoother experience with Camel 4. This +continues as an ongoing effort and we expect and even better experience for those platforms in subsequent releases. + +We will continue to look for areas where we can improve the performance of Camel. At this point, we have identified that we can +improve performance in the Camel type converter systems, and we plan to refactor for Camel 4.1 onwards. + +And of course all the usual new features and improvements coming in from community users and contributors. + +### Roadmap for Camel 3 releases + +Our focus has shifted to primary work on Camel 4 onwards. We will continue to fix important bugs, CVEs and whatnot for the +supported LTS releases of Camel 3. The last Camel 3.x release is Camel 3.22 LTS that is planned for end of this year. +This means we will only do patch releases for Camel 3.22 LTS in 2024, and by end of 2024, then all of Camel 3 is EOL. + +The Camel 3.22 release will be a _small release_ with only limited new functionality. + +Users are encouraged to start new development on Camel 4.