9 Reasons to Consider Mule as your ESB
Mule ESB is a widely used open source enterprise service bus. In this post I'll give you 9 reasons why you should consider Mule ESB for your integration challenges.
1. Mule is Open Source
Wait, wait. Before you wave away this post as total bullshit, I really believe a Service-Oriented Architecture (SOA) and in particular a product like an ESB can benefit from open source. When you (or your company) decide to go for a SOA, a considerable amount of money is already invested in the current application landscape. To migrate this landscape to a SOA in one big bang is not do-able both in terms of investment and time. So the advice is to start small.
Start by implementing a couple of generic utility services, then connect one application, from one application to one department, etc. The same holds for investments. Why spend a huge amount on license costs when you only have a couple of services or applications connected to it? Especially in a time like this, where cost reduction seems to be priority number 1. Mule is highly scalable allowing you to start small and connect more applications over time.
Another advantage of open source, is of course no vendor lock-in. The ability to adjust or extend the code to your needs. I will come to that later.
2. Mule is Mature
Ross Mason started the project in 2003. Mule 1.0 was ready by 2005. The current stable release is Mule 2.2.1 and it's only a matter of time before Mule 3.0 will be released. Mule is running in production environments at thousands of customers. Of all the open source ESB initiatives, I dare to say that Mule is by far the most mature one.
3. Mule's Architecture
Mule ESB is based on a proven set of best practices. Mule implements many of the patterns described in Enterprise Integration Patterns, by Gregor Hohpe and Bobby Woolf.
Mule's core is designed as an event-driven framework combined with a unified representation of messages, so called Universal Message Object (UMO). The key idea behind the UMO API is to unify the logic and model representations while keeping them isolated from the underlying transports. This made it easy to build all the required features of the ESB: message routing, data transformation and protocol adaptation.
Mule adopted Spring 2 as its configuration and wiring framework. This makes integration with Spring and all of Spring features really easy.
4. Mule is based on Standards
Mule is based on standards and common frameworks. I will only mention a couple over here as the list is too long to mention totally.
Security - Mule allows you to authenticate requests via endpoints using transport-specific or generic authentication methods. It also allows you to control method-level authorization on your service components. The Security Manager is responsible for authenticating requests based on one or more security providers. All security is pluggable via the Mule security API , so you can easily plug in custom implementations. Examples of security implementations are Acegi, Spring Security, JAAS and WS-Security.
Transactions - Mule's transaction framework is agnostic to the underlying transaction manager. The transaction could be a JDBC transaction, XA transaction, or a JMS transaction or message acknowledgment. All transaction types can be handled the same way.
Monitoring - Mule comes with agents to check the health of your components through Java Management Extensions (JMX) technology.
5. Mule's different Messaging Styles
Mule provides a platform to develop and host your integration solutions. Whether this is in an EAI environment, a SOA or an EDA. With the different messaging styles Mule supports, you can choose yourself how to best use Mule in your own environment. The following messaging styles are supported:
The messages that are passed from endpoint to endpoint are not bound to XML. It can be anything from a POJO to a binary image files.
6. Mule is Expandable
Mule's core is designed with expandability in mind. These so called pluggable modules provide support for a wide range of transports or add extra features, such as distributed transactions, security, or management. Mule comes with a whole bunch of transports (CXF, Axis, HTTP, JMS, JDBC, Email, FTP, to name a few), transformers, routers (chaining, multicasting, filtering, exception-based, etc.) and filters. New modules become available regularly. As an example, this week a SAP transport has been implemented.
If the transport, filter, transformer or router you need is not available it's easy to implement your own by implementing the required interfaces or extending one of the available ones.
7. Mule's Tool Support
Mule IDE 2.0 is a development and testing environment based on Eclipse. With Mule IDE it is easy to:
You can use Maven to quickly set up and configure your Mule project. Mule provides four archetypes that create template files, including all the necessary Java boilerplate and detailed implementation instructions in comments, helping you get started quickly:
Mule provides a Test Compatibility Kit to test various aspects of your Mule project, including integration tests of your Mule configurations. Components can be easily mocked.
8. Mule is well Documented
Normally the lack of documentation is an often heard complain about open source initiatives. Mule ESB provides an excellent User Guide describing all kinds of topics, from simple ones as how to configure a transport or router to the more advanced topics like performance tuning.
If this is not enough, multiple books are available (among them Open Source ESBs in Action and the recently published Mule in Action) which provides you with hands-on examples and in-depth knowledge of the product.
9. Mule has an Active Community
All those transports, filters, routers and transformers can be a bit overwhelming when starting with Mule. Don't worry; mule can lean on a highly active community. When you have a question, drop it in the forum and you will get an instant solution to your problem or tips on how to solve it or where to look.
So, do you agree with these reasons? Did I forget something? If so, please leave me a note.