Mule 3 Milestone 3 (3.0.0-M3) is ready to hit the streets, and today we’d like to talk about a fundamental transformation that it has undergone. Mind you, it’s not the only one š
Ever since Mule pre-1.0 was out in the wild, there was one thing which many felt missing: “What constitutes a Mule application?”. Most of the time, it was an integral part of any Mule rollout, which wasn’t necessarily a bad thing. Then, we felt (and you raised your voice) that there was so much more that could’ve been done, especially with tools like the new Mule ESB Management Console.
Milestone 3 features an early preview of the new model for deploying Mule applications. Find more detailed docs here, but for most of us, lazy folks, here’s a quick summary for deploying an app ‘foo’:
- Create a directory under
$MULE_HOME/apps/foo
- Jar custom classes (if any), and put them under
$MULE_HOME/apps/foo/lib
- Put the master Mule config file at
$MULE_HOME/apps/foo/mule-config.xml
(note that it has to be namedmule-config.xml
- Start your app with
mule -app foo
As a bonus, application’s master config file is monitored, so if there are any class changes you want to pick up or simply modify the config, save or touch mule-config.xml
and Mule will hot-reload the application.
So, why is this such an important step for Mule? Doesn’t sound like much unless you realize that there can be more than one app, nicely isolated and structured under the apps
directory. Some of the goodies one gets are:
- Applications can depend on different library versions, even if they would conflict before
- Operations folks would be happy to have clear boundaries for a Mule application to work with
- Running multiple applications side-by-side (this one is not in Milestone 3, but is coming up)
Before anyone cries ‘application server!’, we’d like to stress that our goal is not to reinvent the wheel, and we’d never chase a mythical compliance with every specification out there. The focus is very pragmatic, and we’d only do something that makes sense for our users and no more.
On this note, I’d like to say that this new model is not officially enabled by default yet, there’s a 1-line config change to make (check the docs). However, we encourage you, the user, to give it a try, provide feedback (praise or complaint, we don’t mind either š ), and share any thoughts and suggestions that you think would benefit you and the community.
On your mark, get set…