2010-02-17

Apache Camel 2.2 Released

After a bit over two months of hard work we are pleased to introduce the Apache Camel 2.2.0 Release.

This is another major effort featuring 181 issues resolved. The Camel community is growing at a faster pace and we see a lot of involvement and contributions.

The feature and improvements list is too large to fit here, so please check out the release notes.

Most notable changes are:

  • Graceful Shutdown which ensures a more reliable shutdown of Camel
  • File component now delete orphaned lock files on startup to remedy situions where Camel was abruptly killed
  • Improved error message on startup in case where Camel routes are misconfigured
  • Improved logging of exceptions being thrown, which now is logged by default at ERROR level
  • Fixed issue with using Camel annotations on beans proxied with CGLIB such as when using Hibernate or Spring AOP
  • Improvements to Aggregator, Routing Slip, Recipient List and Multicast
  • Reduced the optional dependencies on Spring jars
  • Added new log in the DSL for logging dynamic human readable messages (think like doing System.out.println)
  • Introduced NotifyBuilder which helps during testing. For example when testing routes without mocks etc. It will help to notify when a certain condition has occurred such as X messages is done etc.

And a bunch of new components contributed by the community such as

  • camel-jboss for running Camel inside JBoss Application Server which uses it specialized classloading which prevents typically frameworks to not work out of the box inside JBoss.
  • FTP Now supports FTPS (FTP over SSL/TLS)
  • SMPP To send and receive SMS using Short Messaging Service Center using the JSMPP library
  • Lucene Uses Apache Lucene to perform Java-based indexing and full text based searches using advanced analysis/tokenization capabilities
  • HDFS For reading/writing from/to an HDFS filesystem

As usual, a lot of fixes and enhancement of the 90+ Components

Many thanks and our gratitude to all the contributors who made this release possible. Download Camel now and enjoy the ride!

Work on the next Apache Camel 2.3 is already underway. This time I finally got time to overhaul the aggregator EIP in Camel which has been on the roadmap since the 2.1 release. I can already reveal the overhaul requires changes which are not backwards compatible. However its mostly options which have been renamed or removed. So the migration effort should be minimal.

2010-02-08

Property placeholder galore in Apache Camel 2.3

We are close to two year anniversary of SPR-4466 with no sign of willingness from Springsource to open up Spring Framework allowing 3rd party frameworks, such as Apache Camel, to leverage their property placeholder feature to the fullest.

The RFE was filled 2 years ago by James Strachan, who is well known in the OS community, but still Spring has just kept postponing the ticket. At first it was scheduled for Spring 3.0, then in december 2009 it was moved to Spring 3.1. I bet its just a sign that the RFE did not fill out a gap that the other spring products needed.

Well we can't wait for Spring forever so this last weekend the Camel team developed a new property placeholder feature which will be part of Camel 2.3. Looking back we should have done that for the Camel 2.0 release but we was waiting for it to provided in Spring 3.0.

Well its not bad either because the property placeholders provided with Camel is implemented in camel-core which means you can use it without using Spring at all :) Its also build in the Camel simple language and the endpoints is resolved at runtime which means you can also use it for ProducerTemplate etc. Basically they work everywhere where you can enter a endpoint URI. So we got them all over, its mayhem, its galore :).

I have already written documented at the Apache site how to use it so I will just be lazy on this blog and refer to its documentation.

Okay if you use Spring XML we have created a nice XML tag for it as shown below:

  <propertyPlaceholder id="properties"

        location="com/mycompany/myprop.properties"/>
And the below is part from a little route in Java DSL using placeholders. Notice the #{ } syntax. Yes it works from Spring XML as well.
// properties

cool.showid=true
cool.result=result
cool.start=direct:start

// route
from("#{cool.start}")
    .to("log:#{cool.start}?showBodyType=false&showExchangeId=#{cool.showid}")
    .to("mock:#{cool.result}");