Camel 2.5.0 release
New and Noteworthy
Welcome to the 2.5.0 release which approx 300 issues resolved (new features, improvements and bug fixes such as...)
- Added
suspend/resume
operations to CamelContext for warm restarts, or as the preferred way to temporary stop a running Camel application, and then later resume it. Those operations is also available in JMX. - Improved management of routes in JMX. You can now suspend/resume routes which support suspension. There is a new
removeRoute
to remove a route from JMX. Routes with autoStartup=false
is now also listed in JMX, to allow you to start the routes manually. - The Asynchronous Routing Engine allows to be forced into synchronous mode for certain components, by specifying
synchronous=true
in the endpoint uri. - FTP now supports MSV file systems. The ftp consumer will now traverse the directory structure using a
cd <dir>, list files in cur dir
pattern, as opposed to a list files <dir>
style. - FTP improved support for consuming using absolute paths.
- Fixed issue with using multiple HTTP endpoints with the only difference being
httpClient
parameters. - Fixed issue with Stream caching and deleting temporary files on Windows.
- Server thread pool settings can be configured on Jetty component.
- Easier to configure general HTTP/SSL socket connector properties on Jetty component.
- Fixed issue with sending an
InOut
message to Dead Letter Channel would cause Camel to expect a reply. Now the message will always be send to the DLQ as InOnly
. - Fixed issue when sending to a JMS destination, the option
disableReplyTo
was not used. - Added two new functions to XPath to leverage Properties component and Simple language.
- Fixed issue when running Jetty server under heavy load throwing
IllegalStateException
- JMS uses Asynchronous Routing Engine for Request Reply messaging over JMS.
- Fixed issue with a route could mistakenly pick up a route scoped OnException from another route.
- Fixed an issue with starting
CamelContext
after it had been shutdown, leading to routes not properly being re-initialized and started. - The File and FTP consumers now support using
preMove
together with either noop
or delete
options. - Added support for
timeout
in Recipient List, Splitter and Multicast EIPs when running in parallel mode. - Added support for 3rd part UuidGenerator.
- Reverted back to use ActiveMQ UuidGenerator as default generator. Its faster than the previous
JavaUuidGenerator
, especially in high concurrent systems. - Velocity can now find template files from filesystem/classpath when referring to them from other templates.
- Fixed issue with multiple CamelContext using same id being mixed as single CamelContext in JMX. Camel now fails to start if existing CamelContext already have been registered in the MBeanServer.
- The Message Filter EIP now stores a property on the Exchange to indicate if it was filtered or not.
- FTP supports sending site commands after successful login.
- Simple language can now compare numeric values which was entered as String types.
- Fixed limitation where PollEnrich could not poll from a file endpoint if the route started from a file endpoint as well.
- Fixed limitation with Simple language, before you could only use one
and
or or
operator. Now you can use multiple operators in the same expression. - Restlet component now supports using { } placeholders in uri, which gets replaced with headers from Exchange.
- Added
dynamicRouter
to the DSL to make it easier to do dynamic routing using a Bean to evaluate on-the-fly the next destination(s). - When sending a JMS message using InOnly but having a
JMSReplyTo
header configured, then the JmsProducer
will lookup/create the JMS Destination to ensure its a valid JMSReplyTo
from the header. - Endpoint uris containing password is not logged in plaintext, but is now masked.
- Properties can now leverage Jasypt allowing you to use encrypted values in your properties files.
- Trimmed down the size of the Web Console reducing the number of jars and removing the groovy experimental editor. It now requires JDK 1.6 to run as well. We will in the future improve the Web Console to contain more features and information.
- Added new Language component to execute Languages scripts when sending a message to a
language
endpoint. This makes it easier to support Dynamic Router where small pieces of logic must be executed as well. - Added
charset
option on the File, FTP endpoint which dictates the encoding to use. - CXF consumer and CXFRS consumer will try to leverage CXF continuation API to call the camel process asynchronous API if it is possible, and you can turn it off by setting the
synchronous
option to true
. - CXF Bean Component now supports using customer providers configured by the
providers
option on the CXFRS endpoint. - Fixed
ConsumerTemplate
using receiveBody
methods to complete OnCompletion beforehand. For example when using a File endpoint and having set delete=true
, which now causes the file to be deleted. - Fixed HawtDB not working in OSGi
- Fixed dependency injection between
<bean>
and <camelContext>
, making it work as it did with Spring 2.5 when using Spring 3.0 instead. The <bean>
will be dependency injected before the <camelContext>
. - Optimized Type Converter when using Jetty routing and/or conversions to
String
types which will fallback and lookup PropertyEditor
editors. - Added
LimitedPollingConsumerPollStrategy
for Polling Consumers as a limited strategy which suspends consumers which causes consecutive failures. For example to avoid a faulty consumer to spam logs etc. Uses a limit of 3. - Fixed Jetty sending back HTTP headers using keys is lower-case. Not it preserves the case of the keys, so it can be mixed case.
- Added $simple{ } as alternative syntax for tokens in the Simple language to avoid clashing when using Springs
PropertyPlaceholderConfigurer
. See example at the File language page. - Added
discardOnCompletionTimeout
option to Aggregator - Fixed concurrency issue when using predicates using binary operators such as
isEqualTo
. - Total overhaul of the Quickfix component. Thanks to the QuickFIX/J community for help.
- CXFRS producer now leverages fallback type converter which means its much easier for end users to grab the response body in a type they want.
- Mail component now supports specifying emails using
"Ibsen, Claus" <davsclaus@apache.org>
style. - Fixed issue with FTP which could cause the polling to stop without any hint in the logs why.
- Added
publishedEndpointUrl
option into the CXF component. DefaultPackageScanClassResolver
supports to configure the url schemes by using Spring configuration. To cater for Server's using custom classloader schemes in URLs.- Added option
lazyLoadTypeConverters
to CamelContext to configure if type converters should be loaded lazy or on startup (default).
New DSL
New Annotations
API breaking
- Some methods on the File and FTP endpoint/producer has been promoted from
protected
to public
to make it easy from Java code to re-use the functionally of those methods, without using it as a Camel component. Such as when you want to communicate with a FTP server using the API from the RemoteFileOperations
. - Added
changeToParentDirectory
method to GenericFileOperations
.
Known Issues
- The Tracer may not output all details for some situations such as when using
onCompletion
or intercept
etc. - Not all Examples have ANT build.xml files to run the example using ANT.
- Project cannot be fully build using Maven 3.0
- One may encounter build errors in camel-ftp with java versions older than "1.5.0_24"
- Dozer does not work in OSGi
camel-blueprint
is not fully feature complete (such as @Producer, @Consume is not supported)camel-blueprint
using <package> scan does not work- Setting a custom TaskExecutor on JMS component using Spring 2.5 does not work as
camel-jms
is compiled against Spring 3.0. See more at CAMEL-3286 markRollbackOnlyLast
doesn't remove caused exception, which may affect outer transaction to rollback as well. Likewise the logging of TransactionErrorHandler
may log the inner transaction as being committed, when it was in fact rolled back.- Splitter using
parallelProcessing
may use a lot of memory during processing, see CAMEL-3497
Important changes to consider when upgrading
- Support for JMS API 1.0.2 has been removed.
- The
stopRoute
method on CamelContext
now leverages Graceful Shutdown when stopping. This is more intuitive to stop routes in a graceful and safe manner. You can the stop method with a timeout if you want to force stopping, which was the old behavior. - The Web Console now requires JDK 1.6 as minimum to run.
- The artifacts
camel-core-tests.jar
and camel-spring-tests.jar
has been deprecated and will be removed in a future release. You should always only use the camel-test.jar
if you want to use the Camel Test Kit. - Camel will now fail to startup if an existing CamelContext has been registered in JMX with the same id.
- If you did not set a id on
<camelContext>
it would have defaulted to camelContext
. This has been changed to be the auto assigned name it's given by Camel, such as camel-1
, camel-2
etc. - Maven version 2.2.1 or better is now required to build Camel from source.
- If using Quartz with jobs persisted in a database, then mind that Camel now resolves job names based on endpoint uri, without parameters. This allows you to change cron parameters on the same job (reschedule jobs).
- The
timeout
option on Netty has been removed as it was flawed. - Durable topic subscribers with JMS must now provide
clientId
, otherwise Camel will fail fast on startup. - The default UuidGenerator has been changed back to be ActiveMQ based. If you run in the cloud you may have to configure to use the old default
JavaUuidGenerator
as the ActiveMQ may use JDK API which is not accessible in the cloud. - If you use the FTP component (consumers) make sure to test it throughly as it has changed how it traverse the file structure.
- Upgraded to Spring 3.0.4
- Upgraded to CXF 2.2.11
Getting the Distributions
Binary Distributions
Source Distributions
Getting the Binaries using Maven 2
To use this release in your maven project, the proper dependency configuration that you should use in your Maven POM is:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>2.5.0</version>
</dependency>
SVN Tag Checkout
svn co http://svn.apache.org/repos/asf/camel/tags/camel-2.5.0
Changelog
For a more detailed view of new features and bug fixes, see: