blob: 6ed66710f72bb30f3025ee9174ad162461860db5 [file] [log] [blame]
= Apache Camel 4.x Upgrade Guide
This document is for helping you upgrade your Apache Camel application
from Camel 4.x to 4.y. For example, if you are upgrading Camel 4.0 to 4.2, then you should follow the guides
from both 4.0 to 4.1 and 4.1 to 4.2.
[NOTE]
====
https://github.com/apache/camel-upgrade-recipes/[The Camel Upgrade Recipes project] provides automated assistance for some common migration tasks.
Note that manual migration is still required.
See the xref:camel-upgrade-recipes-tool.adoc[documentation] page for details.
====
== Upgrading Camel 4.1 to 4.2
=== camel-api
Added `boolean` parameter to `matchProcess` method on `org.apache.camel.spi.Condition`.
=== camel-base-engine
The class `org.apache.camel.impl.DebuggerBacklogDebugger` has been refactored to an interface `org.apache.camel.spi.BacklogDebugger` and a default implementation `org.apache.camel.impl.debugger.DefaultBacklogDebugger`.
=== camel-main
The option `camel.main.debugger` has been renamed to `camel.debug.enabled`.
=== camel-management-api
The `org.apache.camel.api.management.mbean.ManagedBacklogDebuggerMBean.dumpTracedMessagesAsXml(String, boolean)` has been deprecated.
The second parameter is ignored with default implementation.
To continue to have access to exchange properties, call `setIncludeExchangeProperties(true)` before messages
are sent to have access to exchange properties.
=== camel-file
The `readLock=changed` with using `readLockMinAge` has been restored to same behaviour as 3.x.
For example, using `readLockMinAge=5s` would pick up files that are older than 5 seconds from startup time.
If you have many existing files on startup that are old, then Camel will now again be fast,
and pick up these files immediately.
=== camel-kafka
The consumer will now pre-validate `hostname:port` and DNS resolution on startup, and fail-fast
in case of mis-configuration or invalid hostname.
This can be disabled by setting `preValidateHostAndPort=false`, which will postpone validation
to consumer is started, and will instead re-connect endlessly (5 sec delay by default) until success.
=== camel-observation / camel-opentelemetry
The `excludePatterns` option has changed from `Set<String>` to be `String` where multiple patterns are separated by comma.
This is more configuration and tooling friendly and used by other components.
=== camel-saga, camel-lra
The `org.apache.camel.service.lra.LRAClient` can now access `Exchange` to retrieve further context information. Therefore, there are following changes in interface methods
- `org.apache.camel.saga.CamelSagaService.compensate()` changed to `org.apache.camel.saga.CamelSagaService.compensate(Exchange exchange)`
- `org.apache.camel.saga.CamelSagaService.complete()` changed to `org.apache.camel.saga.CamelSagaService.complete(Exchange exchange)`
- `org.apache.camel.saga.CamelSagaCoordinator.newSaga` is now `org.apache.camel.saga.CamelSagaCoordinator.newSaga(Exchange exchange)`
to support the transport of `Exchange`.
As a result of interface changes, also the known implementation classes and usages have been adopted.
=== camel-ignite
The Apache Ignite project (v2.15) is not yet Java 21 compatible and therefore `camel-ignite` is not
expected to function correctly if using Java 21.
A new release of Apache Ignite is expected that will start to support Java 21.
=== camel-dynamic-router EIP component (non-core)
The Dynamic Router EIP component has been refactored to use the Multicast Processor for sending messages to recipients,
and this brought some additional configuration options:
- `parallelProcessing`, `parallelAggregate`, `stopOnException`, `ignoreInvalidEndpoints`, `streaming`, `timeout`,
`onPrepare`, `shareUnitOfWork`, `executorService`, and `aggregationStrategy`. These configuration items are for
configuring the Multicast Processor within the Dynamic Router EIP component, so their description, meaning, and effect
are identical to that of the Multicast Processor.
When upgrading to this version, you should still be able to use this component with the configuration from previous
versions. The new options allow more specific configuration if you need it.
=== camel-spring & camel-spring-boot
==== Autowiring Primary beans
Camel will now take into account `@Primary` beans from Spring when autowiring by type.
For example, a JDBC `DataSource` in the SQL component will now use the `@Primary` data source
when multiple data sources are defined.
Previously, Camel would not autowire if there are two or more beans for a given type.
NOTE: This is a change in behaviour, that can affect your applications when upgrading.
==== Properties
The `initialProperties` and `overrideProperties` on Camel `PropertiesComponent` will now
take precedence over Spring Boot properties. This can be used for testing purpose,
to allow overriding properties when using `CamelTestSupport` for unit testing.
=== camel-opentelemetry-starter
The `excludePatterns` option has changed from `Set<String>` to be `String` where multiple patterns are separated by comma.
This is more configuration and tooling friendly and used by other components.