Camel 2.5.0 release

New and Noteworthy

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.

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.

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.

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

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 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).

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.

The above URLs use the Apache Mirror system to redirect you to a suitable mirror for your download. Some users have experienced issues with some versions of browsers (e.g. some Safari browsers). If the download doesn't seem to work for you from the above URL then try using FireFox