During the past 18 months, I have been working with a customer who did not have a budget for purchasing Commercial Middleware licenses. At first, I was very skeptical about the capability that my team was going to be able to build with the open source stack. My previous integration experience was with all the major software vendors such as Oracle, IBM, Tibco and Vitria.
I like challenges, so we chose Apache Camel to build mediation services for several systems with different messaging formats. It turns out that Apache Camel is the Swiss Army knife of Open Source Middleware (OSM).
I don’t want to start a purist war on Commercial versus Open Source software; However, I am going to point a few of the benefits to using Apache Camel given the business decisions that our team faced.
- Team Skill Set – Apache Camel is written in Java and it’s easy for Java Developers to climb the learning curve due to Camel’s Domain Specific Language (DSL).
- Portability – One of the requirements that our team had, was the ability to ship the services to partners. Camel is highly portable, since you can run it as a web application in tomcat or jetty. Or you can embed the mediation module inside your web application. At first, we ran our camel services in Glassfish. Then, we migrated to tomcat.
- Prototyping – We found that the level of effort to design and prototype services was minimal. Granted, our team was composed of proficient Java developers.
- Enterprise Integration Patterns (EIP) – Apache Camel was built to provide the EIP as components. http://camel.apache.org/eip.html
Also, there are some obvious drawbacks such as no WYSIWYG editor, limited support and too much flexibility. What I mean by too much flexibility is that Camel provides you with low level API’s to process and route messages. In the wrong hands, your code can become very complex. For example, I had one of my Senior developers implement the low level API in order to execute XSLT with SAXON. He wrote approximately 100 lines of code to do this. When all he needed to do was use camel DSL’s like this.
from("activemq:My.Queue").
to("xslt:com/santisij/mytransform.xsl").
to("activemq:Another.Queue");
from("file://inbox?preMoveNamePrefix=inprogress/")