For those never-read-anything-besides-physical-paper people, the Apache Camel user guide in PDF form may interest you. Be warned for printing it though as its quite large :)
Apache Camel User Guide version 1.6.0
This is really the closest thing we have to a book on Camel. Hoping that will change in the near future!
Another great source for nicely printable Camel documentation is FUSE Source. Check it out here.
Monday, February 23, 2009
Tuesday, February 17, 2009
Apache Camel 1.6.0 Released!

The Camel team is pleased to announce the release of Apache Camel 1.6.0. Get it while its hot!
Unix/Linux/Cygwin Distribution
Windows Distribution
We've fixed 169 issues in this release so its a worthwhile upgrade for all Camel users. You can find the full list of changes here.
Enjoy!
Monday, February 16, 2009
Apache Camel... more EIPs than you can shake a stick at!
For those of you who don't know already, one of Apache Camel's main themes is to make complex Enterprise Integration Patterns (EIPs) accessible to the everyday Java developer. We have an extensive catalog of EIPs that we support and recently I added a few more.
You can try any of these patterns out using Apache Camel / FUSE Mediation Router 1.5 and onward.
![]() | Composed Message Processor | How can you maintain the overall message flow when processing a message consisting of multiple elements, each of which may require different processing? |
![]() | Claim Check | How can we reduce the data volume of message sent across the system without sacrificing information content? |
![]() | Detour | How can you route a message through intermediate steps to perform validation, testing or debugging functions? |
Scatter-Gather | How do you maintain the overall message flow when a message needs to be sent to multiple recipients, each of which may send a reply? |
You can try any of these patterns out using Apache Camel / FUSE Mediation Router 1.5 and onward.
Thursday, January 29, 2009
POJOs can route too!
In Camel we have several really cool Domain Specific Languages (DSLs) for easily expressing routing rules. But you don't need to learn these to use Camel. Starting with a POJO, you can use annotations to produce, consume or route messages to any Camel endpoint.
Take the following bean for example
We use the @Consume annotation to mark onFileSendToQueue as a consumer of any messages coming from the file:a/path endpoint. To enable the bean to send messages to the activemq:myQueue endpoint, we use the @Produce annotation. All conversions between Files, Strings and JMS Messages are automatic. Pretty easy huh?
We also have the @RecipientList annotation that turns any bean into a dynamic Recipient List.
Here we consume JMS messages from myQueue and based on the body, send it out to a list of recipients. Again, very easy. If you're a ServiceMix user, Gert mentions how to use this trick from a ServiceMix perspective too, go check it out!
If you need more info, I've put all of these concepts into a little demo here. As always, if you need help using Camel, please get in touch.
Take the following bean for example
public class BeanThatTalksCamel {
@Produce(uri="activemq:myQueue")
ProducerTemplate producer;
@Consume(uri = "file:a/path")
public void onFileSendToQueue(String body) {
producer.sendBody(body);
}
}
We use the @Consume annotation to mark onFileSendToQueue as a consumer of any messages coming from the file:a/path endpoint. To enable the bean to send messages to the activemq:myQueue endpoint, we use the @Produce annotation. All conversions between Files, Strings and JMS Messages are automatic. Pretty easy huh?
We also have the @RecipientList annotation that turns any bean into a dynamic Recipient List.
public class RecipientListBean {
@Consume(uri = "activemq:myQueue")
@RecipientList
public List route(String body) {
// return list of recipients based on message body
}
}
Here we consume JMS messages from myQueue and based on the body, send it out to a list of recipients. Again, very easy. If you're a ServiceMix user, Gert mentions how to use this trick from a ServiceMix perspective too, go check it out!
If you need more info, I've put all of these concepts into a little demo here. As always, if you need help using Camel, please get in touch.
Monday, January 26, 2009
Helpful Maven Build Tips
Brian Fox recently posted some great tips to improve your Maven builds. You should check them out if you haven't already. I've been doing most of what he said already but one really caught my attention, and I will repost here:
I can't believe I didn't know about this option before. Having to grep through surefire log files has really annoyed me in the past... many kudos to Brian for sharing this!
#6 Print Test Failures to Standard Output
Tip: Enable -Dsurefire.useFile=false. This is a favorite of mine since this causes surefire to print test failures to standard out, where it will get included in the build failure log and email. This saves you from having to dig back onto the machine to find the surefire report just to see a simple stack trace. (to enable globally in settings.xml:in an active profile) true
I can't believe I didn't know about this option before. Having to grep through surefire log files has really annoyed me in the past... many kudos to Brian for sharing this!
Tuesday, January 20, 2009
Camel is now an Apache top level project!
As James and Claus have said today, Camel has been promoted to a top level project at Apache! This is a great vote of confidence for Camel, my fellow riders, and the rocking community. Thanks to all who've helped so far!
So, you should update your links to http://camel.apache.org now :)
So, you should update your links to http://camel.apache.org now :)
Wednesday, December 10, 2008
RSS support in Camel
We've had Atom connectivity in Camel for a while now and so to not leave any RSS users out in the cold, I put in RSS support as well. We try to integrate with pretty much every messaging system in Camel after-all :)
Under the hood I'm using the ROME project. Its pretty much the standard Java framework for dealing with RSS feeds.
To consume from an RSS feed, just start your route like
Then you can do all sorts of neat stuff like,
Filtering entries
Only entries with Camel in the title will get through this filter.
Merging multiple incoming feeds
Sometimes you may need to merge feeds from several different sources.
Marshal between XML and ROME objects
Here we perform the same filtering as above but instead marshal to XML and use XPath.
For more info, check out the wiki documentation.
Under the hood I'm using the ROME project. Its pretty much the standard Java framework for dealing with RSS feeds.
To consume from an RSS feed, just start your route like
from("rss:http://feeds.feedburner.com/JonAnsteysBlog")...
Then you can do all sorts of neat stuff like,
Filtering entries
Only entries with Camel in the title will get through this filter.
from("rss:feedUri?splitEntries=true").
filter().method("myFilterBean", "titleContainsCamel").
to("mock:result");
Merging multiple incoming feeds
Sometimes you may need to merge feeds from several different sources.
from("rss:feedUri").to("seda:temp");
from("rss:someOtherFeedUri").to("seda:temp");
from("seda:temp").aggregate(new AggregateRssFeedCollection()).
to("mock:result");
Marshal between XML and ROME objects
Here we perform the same filtering as above but instead marshal to XML and use XPath.
from("rss:feedUri?splitEntries=true").
marshal().rss().
filter().xpath("//item/title[contains(.,'Camel')]").
to("mock:result");
For more info, check out the wiki documentation.
Subscribe to:
Posts (Atom)