= Apache Camel 3.x Upgrade Guide

This document is for helping you upgrade your Apache Camel application
from Camel 3.x to 3.y. For example if you are upgrading Camel 3.0 to 3.2, then you should follow the guides
from both 3.0 to 3.1 and 3.1 to 3.2.

== Upgrading Camel 3.4 to 3.5

=== FluentProducerTemplate

The template will now automatic clear its state send sending the message, this avoids end users having to call `clearAll` after usage,
in case the template should be reused to send other messages.

After the template has been started / used the first time, then its general configuration cannot be altered later,
instead create a new template.

=== PackageScanClassResolver

The `PackageScanClassResolver` will now skip abstract classes in its `findImplementations` method.

=== camel-bean

The `bean(class)` EIP will now lookup in the registry first whether there is a single bean instance of the given class type
and use the existing bean (for singleton scope) instead of creating a new instance.

=== camel-cassandraql

Load-balancing policy has changed. There are no existing load balancing policies (see https://docs.datastax.com/en/developer/java-driver/4.3/upgrade_guide/#load-balancing-policy[upgrade guide]).
To customize load balancing policy, please use the parameter `loadBalancingPolicyClass` and provide own implementation
of load balancing policy.

Session impelentation class has changed from `com.datastax.driver.core.Session` to
`com.datastax.oss.driver.api.core.CqlSession` (see https://docs.datastax.com/en/developer/java-driver/4.3/upgrade_guide/#session[upgrade guide]).
This could have direct impact on the type of parameter `beanRef` if you are using `Provided Session reference`.

There is a new parameter `datacenter` (with default value `datacenter1`). Data center has to be defined for the proper
behavior of the default load balancing policy.

=== camel-sjms

The default value for `keepAliveDelay` is changed from `-1` to `5000` in the batch jms consumer.

=== camel-weather

The option `httpClient` is now a query parameter.

A new parameter `geoLocationProvider` was introduced to allow the use of a custom `GeolocationProvider` implementation.

=== Camel Karaf

The following features has been removed due they become not compatible with OSGi: `camel-couchbase`.

=== LifecycleStrategy

The `LifecycleStrategy` has been enhanced and provides some additional methods and changes in the behavior:

* **onContextInitializing**: is invoked when the context is about to be initialized, this was previopusly achieved by `onContextInitialized` but as the name was a misleading
* **onContextInitialized**: is now invoked when the context is initialized
* **onContextStarting**: is invoked when the context is about to start, this was previously achieved by the `onContextStart` which is now deprecated.
* **onContextStarted**: is now invoked when the context is started
* **onContextStopping**: is invoked when the context is about to be stopped, this was previously achieved by the `onContextStop` which is now deprecated.
* **onContextStop**: is now invoked when the context is stopped
