Monday, 17 December 2007

Apache ActiveMQ 5.0.0 Released!

As Rob mentioned, its taken quite a while but I'm very pleased to say that the Apache ActiveMQ 5.0.0 Release has been made! Its packed with a ton of new features; I'm most happy about the awesome integrated support for Enterprise Integration Patterns via the Camel Integration. There's a bunch of other new features...

Monday, 10 December 2007

Apache Camel Integration Framework webcast tomorrow!

If you fancy popping by, do checkout tomorrow's WebCast I'll be giving with Rob on Apache Camel, the Spring based Integration Framework and implementation of the Enterprise Integration Patterns.

I'll post a link to the archive once its available...

Thursday, 29 November 2007

.Net, web browsers and Android should be certified Java Kernel platforms

So I saw Why Microsoft Loves Google's Android (via Stefan) and I couldn't help thinking of the complete opposite position.

Imagine something totally different for a second. You're working at a software house making business applications for your users. You want your stuff to run everywhere, so you use Java on the server. Though you need to do some Office hackery, or maybe you wanna do some Windows specific Silverlight stuff or you've bought in to the MS hype about any day now the words really gonna go Rich Client so you better ditch Java and do .Net or else. So the .Net platform gets more tempting as a development platform to get all the MS crack.

So what do you do? Use Java and .Net and hire both .Net guys and Java guys then deal with rewriting code on both languages/platforms and training your folks on both stuff? Or have two different teams? Or just pick one standard language/platform/IDE etc. The temptation might be to go with more and more .Net - maybe even just .Net. And you know what - thats what MS want! To tempt you with all this Office / Windows / Silverlight crack so you stray from your nice open Java platform to be locked into this Windows / Office monopoly. They want you to leave the Java ecosystem and move over to the dark side.

However there's this thing called IKVM which is awesome - it effectively turns .Net into a Java Platform. Yes you read that right. You can take any Java bytecode and turn it into a normal .Net assembly of IL stuff and it runs like any other .Net thing. With .Net glasses on it looks just like .Net. However with your Java glasses on, its still standard Java code and it looks just like a Java platform. What IKVM does is take Java bytecode and translate it into .Net IL. For years its been able to run ActiveMQ (via Christopher Steen back in 2004!), Tomcat and yes, even Eclipse (think of all that native stuff in there for JFace, SWT).

Indeed with a bit of work (and particularly if Harmony and IKVM got together), .Net could actually get certified as a Java platform! Imagine that for a second. One of the main monopolies trying to tempt developers away from Java to lock them in to their proprietary windows/office platform could actually be a certified Java platform!

What would be really cool is if someone started to build open source APIs to abstract all the Windows / Office stuff using interfaces; so you could deploy on native .Net and use the real MS goodies - but folks could implement those APIs using open source or open alternatives like OpenOffice or Google Docs / Sheet or whatnot. i.e. remove the lock-in and reasons for switching to .Net.

I remember having a bit of a heated discussion with Graham Hamilton on this point at the first Sun Dynamic Language conference; his oppinion was that Java should remain 100% pure and be a single certified platform. I certainly see the value in this.

However another perspective to think of is the developer; and extending the Java platform to as many environments as is possible so that developers never have to leave the Java ecosystem even if they wish to develop on some platform which is not 100% pure and certified to run the "entire Java platform" - e.g. say you don't need AWT, Swing, RMI and CORBA. (Though now I work for IONA I now realise - CORBA rocks! :-)

As a developer in the Java platform ecosystem, its awesome to be able to use a Java IDE and tooling (with other languages for the JVM too like Groovy & Ruby etc) then deploy that same Java code on any certified Java platform plus these other huge platforms:-
  • .Net via IKVM which also means inside Office / WCF etc
  • inside any modern web browser without a JVM via JavaScript using GWT
  • as a C library using gcj so folks in unix/c land can use your stuff
  • on a mobile phone via Android on a platform optimised for phones
In each case today, these different platforms are huge and extremely useful. They extend the reach of the Java ecosystem (basically the bytecode) to run all over the place and avoid lock in by folks like MS to their proprietary platforms. They extend the reach of what it means to "write once and run everywhere" to more and more places including .Net, JavaScript browsers, mobile phones and shared libraries for C hackers. In each case, they take Java code written to a subset of the Java Platform and translate the code to run on another platform.

However today none of these are certified Java platforms.

Now lets talk a little bit about the "Java Platform"; its got a ton of stuff in there that noone really cares about any more. e.g. AWT / Swing is of no value to any of these 4 platforms I just mentioned. (I personally see GWT as a long term replacement for AWT / Swing / SWT)

The Java ecosystem is huge and diverse. IMHO core of Java (java.lang and java.util) should be separated out and made easily certifiable - say called the Java Kernel to indicate its the core language / VM only and not stuff on top like AWT/Swing/RMI/CORBA (that few folks care about any more).

Then we could say that any web browser with JavaScript, the .Net platform, C libraries and Android & mobile phones are all certified Java Kernel platforms; so there's not really any fragmentation like Richard thinks - and its a win-win for the Java ecosystem, extending the reach of the ecosystem to more and more places and further reducing the chances of fragmenting the Java ecosystems (since its not really a fork as Richard thinks - its just a smaller subset).

So I'm all for different platforms which might not support all of J2SE - but do support java.lang and java.util and the Java bytecodes - and I fail to see how tempting more and more folks to stick inside the Java ecosystem, whether its JRuby on Rails, Grails, Android, GWT or whatnot - is nothing but a good thing for the Java ecosystem and a very bad thing for the MS lock-in strategy.

While I'm on a long ramble - I thought I'd mention another of my long term irritations with this 100% pure approach. The Java platform (or Java Kernel platform :) should have amazing C integration for those rare cases when you really need it. There's a ton of great stuff available in native libraries only thats a total PITA to work with in the Java ecosystem. Platforms like Python, Ruby and .NET are still leagues ahead of the Java ecosystem at working with native libraries and sometimes you really need to. Of course we try to stick to 100% pure when we can but you know, sometimes the real world jumps in and we need to step outside the 100% pure mantra.

So in summary - I salute IKVM, gcj, GWT and Android - I hope more and more people figure out neat ways of expanding the reach so the same Java bytecode can run in more and more places than we previously thought possible.

Monday, 26 November 2007

Prism rocks! (Create desktop apps for web apps)

Many thanks to Dejan who blogged about this - but Prism rocks. I can now use Expose / Tab to switch between Gmail windows and other FireFox/Safari windows. I've been using it for a day so far and am really liking it. I've often got a ton of windows open in safari/firefox and frequently just wanna switch back to GMail.

Changes I'd like to see
  • support multiple Prism executables to run concurrently. e.g. GMail, GoogleReader, GCal, JIRA could all be apps
  • allow the icons to be easily customized for when switching with TAB or adding things to the dock.
But so far, its looking good!

Update - many thanks to Dave Brondsema who mentioned in the comments that you can have multiple webapps running with custom icons using the provided bundes from
Though I tried them and they didn't wor for me too well on the Mac (I've not upgraded to Leopard yet :)

ActiveMQ webinar archive available

Our previously announced webinar on ActiveMQ is now available on IONA's webinar and screencast archive. You can view it here.

Nicer iPhone URLs for google stuff...

I still prefer reading email via the web client for gmail on my iphone; for fellow iphoners, you might wanna try the optimised gmail client for mobiles. There's also a nice Google Reader specialised for mobile browsers.

Wednesday, 14 November 2007

More thoughts on RESTful Message Queues

Just a small follow up on my previous Pure RESTful API to ActiveMQ via AtomPub. AtomPub rocks and all - I was thinking whats the easiest possible RESTful client to subscribe to a message queue.
GET queues/
This would activate my subscription to the queue (or help to keep it alive) and return my own list of messages as an Atom feed that I am allowed to view and DELETE when I have consumed them.

This operation is idempotent and would work great with proxies and caches (assuming the right HTTP headers / ETags stuff) letting clients to keep GETing as often as they like. Though if you don't use the subscription for period of time, your subscription can go stale and timeout; any messages in your message collection could be removed.

The slightly smelly thing here is we need to either use cookies (such as for HTTP session handling with servlets) or use a custom session ID header in the URL to uniquely differentiate the subscriptions. Anyone got a better idea?

I guess we could demand that clients PUT/POST to get a new Location URL on which to GET their subscriptions; but this would require a custom REST client.

Tuesday, 13 November 2007

Feedback on my Camel talk at the IJTC conference

Thanks to John for the great feedback on my Camel talk (and other talks too). I started to write a huge reply and figured I'd post it here instead then link to it as its easier to reply to different parts.
Camel itself is not an ESB per-se, it is a component of an ESB
Agreed. The idea is Camel does the routing and Enterprise Integration Patterns - you can then use it inside a web service stack like Apache CXF, a message broker like Apache ActiveMQ or an ESB like Apache ServiceMix
1. One of the key messages that came out of the session was how Java-centric the Camel solution is - Strachan went so far as to articulate the view that coding in XML was a fundamentally bad idea.
Maybe being the author of Jelly and hating writing XSLT has made me a bit too sensitive to the idea of programming by XML. Quite a few customers I talk with report frustration of too much XML hacking with Spring (which is being addressed in Guice and Spring 2.5). But heck if you like programming in XML be my guest :)
He went on to cast aspersions on graphical tools also. His clear preference was that integration logic should be written in Java. Given that I have worked with highly skilled Java developers for many years now I was not too surprised to hear this - many good developers shy away from tooling, seeing it as compromising their style or the power of the underlying framework - hence the longevity of vi and emacs I suppose.
I didn't mean to cast aspersions on graphical tools; more that pretty much all developers understand Java these days, its pretty universal - whereas most complex graphical tools require a fair amount of learning to get used to them.

Personally I totally prefer writing in Java rather than XML or using visual tooling but one of the main requirements of Camel is that you can configure and specify routes in any way you like - via a graphical IDE (e.g. Cimero) or via XML or Java or Groovy or Ruby or one day hopefully a real DSL. Using XML is quite useful as you can just drop your routing rules inside a spring XML file such as inside the Apache ActiveMQ.

So we're working hard to allow folks to specify routing rules however they like - despite what I prefer :). Irrespective of how you write your routing rules, we can visualise them so anyone can easily understand them.
However it is important to note that all developers are not middleware experts and have no wish to be. Indeed the enterprises they work for want their developers to spend as little time and effort as possible on middleware plumbing. They need and demand tools which will enable them to get at least 80% of patterns done without having to understand the middleware architecture, it's threading model,
Thats one of the main things we're trying to attempt with Camel - letting folks who are not middleware experts easily use the Enterprise Integration Patterns using a single line of Java code - using any transport or component with minimal configuration required.
it's support for configurable expression languages etc.
I find it hard to understand how any tool can be usable by folks without some kind of expression language that they understand - whether its Java or SQL or XPath/XQuery or whatnot. Even a visual query definer is a language that users need to know.
Most people express their requirements in a declarative way- I have data at A that needs to get to B, on it's way I need to perform transformation, validation, logging etc. (indeed the EIP book itself does this) . However Camel has taken a very Java centric approach and I think this increases it's complexity unnecessarily.
We are actually trying to be as declarative as possible - don't let the fact that you can use Java as the DSL confuse you. e.g. here's what you just described in Camel using a single line of Java code...
Its hard to be more concise than that in Java code. But sure - you could use some other language or XML or UI tool etc
2. Camel presents transports as nice-simple looking endpoint URIs in Java. However configuration of these transports may not be as simple as it seems. There appears to me to be a potential disconnection between the Camel processors and the Camel Components in terms of configuration.
You can always configure anything in Camel via Java or Spring; a component, endpoint, processor etc. The URI is just a shorthand notation for configurating things; which tends to work well with endpoints as usually all the smart configuration is in the component.
In the presentation processors use endpoints which can be configured using Spring within Camel. However it would appear that many of the component implementations are inherited from ServiceMix and these properties will need to be set presumably within the ServiceMix container configuration?
Not so - all the components are configured in Spring via Camel. If you want to talk to ServiceMix components and endpoints you can use the NMR and the JBI endpoint.
When you have multiple XML configurations to use a transport then the pretty looking URI is hiding a lot of complexity under the hood.
I hear you. We've tried very hard to make things as easy as is possible with minimal configuration; for example most configuration tends to be on the Component rather than the Endpoint. But you can configure things however you like in Java code or Guice or Spring.
3. Some of the pattern implementations look a little short on credibility - take the aggregator pattern for example the "aggregator" pattern does not seem to have the concept of a store - so in essence one must have access to all of the messages which require aggregation or must hold aggregations in memory for the configurable timeout period. This will clearly not work in a scalable way. Likewise as regards clustering - if you are looking to aggregate 2 messages and they turn up on different servers you gotta problem.
You're right I purposely missed out some of the detail on a few slides (such as specifying some kind of persistence store or strategy for aggregator or for idempotent consumer) but that is easily done via a pluggable strategies Spring beans. However just because I missed out some detail on some slides (its kinda hard in an hour to present all the detail in all the patterns as well as the rest of Camel) please don't think that somehow Camel isn't short on capabilities.
To summarise Camel is clearly a worthy set of widgets and they will work for very simple applications without Enterprise requirements.
Ouch :). We've actually lots of customers using Camel today in production with very Enterprise requirements. Apache ActiveMQ 5.0 actually ships fully integrated with Camel so we've tons of users in production using Camel today.

I hope I've managed to straighten out some misunderstandings on Camel; its definitely a great fit for enterprise requirements. Thanks for your great feedback - I'll definitely take it on board on future presentations and try and avoid confusing other folks :).

webcast today on Apache ActiveMQ

Sorry for the really late notice - bad James! - but I'm doing a webinar today on Apache ActiveMQ with my fellow committer Hiram Chirino. Feel free to pop by and join us - or if you're snowed you can catch the recording later on.

my slides on ActiveMQ and Camel from last weeks Dublin Conference

They are not that useful if you missed me talk, as they are low on bullet points and high on pictures :) But if you were there, here are the slides in PDF format...

a great presentation on REST, JAX-WS and JSR 311

A great presentation from Stefan Tilkov on REST, JAX-WS and JSR 311; highly recommended.

Monday, 5 November 2007

Speaking at the Irish Java Technology Conference on Thursday and Friday

I'll be speaking this week at the Irish Java Technology Conference this week on Thursday and Friday. My talks are
Do pop along and say hi if you're gonna be in the Dublin area this week.

s3sync rocks!

I finally got off my fat ass and setup an offsite backup of all my photos and other documents on Amazon S3. S3 is very impressive; very quick to setup and get going. I guess I'll find out in a month or so how cheap it really is :) but on paper it does look pretty cheap.

This article was a great overview of how to create backups using s3sync which is a ruby version of rsync which uses Amazon S3 under the covers. Neat! Add a little Anacron and hey presto, incremental online backups on all the macs in my house; and my wife won't kill me for loosing all the pictures of our daughter :).

(Yes I know flickr might be a better online backup for pictures; I just figured I wanted a general purpose backup mechanism that backed up anything I fancy, not just pictures).

Johnny CORBA

In case you'd missed it here's Johnny!

Friday, 2 November 2007

AtomPub services and auto-detecting the schema type of XML based collections & feeds

AtomPub rocks, its an excellent way of building RESTful services that are easy to discover, consume & they avoid the developer having to figure out for themselves a nice RESTful protocol for reliably exposing resources with all operations being idempotent etc. (Most developers miss that bit out :). I like the extra constraints AtomPub adds above REST; less mistakes for us developers to make :)

The content of Atom feeds can be text, XHTML or XML (entries can also link to arbitrary media types too). When using XML for the atom:content, it might be nice to be able to discover the schema up front - which could help tooling / UIs / frameworks.

e.g. from the AtomPub service document when looking at each collection provide an easy way to get the schema document. I've been googling to see if anyone has done such a thing; I've not yet found an obvious answer.

One idea is to use content types; something like
<accept>application+xml; type=someSchemaURI</accept>
another could be to add a new kind of link to the feed
<link rel="content-schema" type="application/relax-ng-compact-syntax" href="/schemas/something.rnc">
I guess a tool could always just look at the content of the feed and look at the namespaces then do some out of band google search for schemas for those namespaces :) but it might be nice to be able to make it a little easier to auto-detect the schema - particularly as AtomPub has gone to great lengths to make everything else (system, workspace, collections, entries) easily discoverable and navigable.

Anyone else figure out a neat way to expose the schema of the XML inside the content for collections or feeds?

Thursday, 1 November 2007

Apache Camel 1.2 Released!

We've recently released Apache Camel 1.2, take it for a ride! The release includes 61 new features, improvements and bug fixes such as...
  • Data Format to support pluggable marshalling and unmarshalling of data in various formats like JAXB, XML Beans, Serialization or Artix Data Services (ADS). Having great ADS support allows us to work natively with things like SWIFT, SEPA, FpML, TWIST, ISO 20022, CREST and FIX messages - or any binary, fixed width or delimeted file format.
  • hugely improved CXF integration for working with JAX-WS and Apache CXF while reusing powerful Camel routing.
  • improved support for Asynchronous Processing within components such as for HTTP and SEDA
  • improved OSGi support with both component discovery using the OSGi registry and turning Camel into OSGi bundles.
  • improved Visualisation
  • support for the full WSDL Message Exchange Patterns
  • more powerful Bean Integration

New Components

GridGain now usable by Apache projects!

Thanks to Nikita and his team the core APIs of GridGain are now Apache Licensed, so we can build software at Apache for GridGain such as plugins in ActiveMQ, Camel or ServiceMix. Cool! BTW ServiceMix now really is top level at

Wednesday, 31 October 2007

free ringtones are really easy on hacked iphones...

So this friend who hacked his iphone was telling me, you just use Fugu as an FTP client and copy any MP3 / AAC files you want into
And hey presto, they just work as ringtones on your phone. Neat!

[LazyWeb] maven pom trimmer plugin idea...

So its so easy for maven pom.xml files to get a little large; full of stuff they don't really need - or more importantly, full of stuff the end user doesn't really need to use your library. Its even easier for the stuff you depend on to pull in heaps of stuff you don't need.

e.g. ever picked the wrong clogging pom.xml section and shoved in a dependency on log4j, logkit and avalon on your project? (Its such a shame sun messed up the clogging space btw).

Its way too easy in maven to not really see or care what dependencies you really have, including those transitive ones - and we end up with lots of unnecessary crap. It can be a bit scary to run 'mvn site' then look at dependencies.html to see all the stuff maven's pulling in.

So here's the idea. Its a bit like Jester. When all your tests pass; you run the pom-trimmer; what it does is try removing bits of your pom to see if your tests pass. It tries all the permutations to figure out how much crap it can miss out. (So commenting out sections/>).

Next though is it should walk the transisitve dependency graphs and find all the transitive dependencies and try avoid those (using tags on the dependency) so it can clean your pom down to just what you really need.

We should try get into the habit of running this before a release so we can all try keep released pom's as free from junk as possible.

So any volunteers to hacking up this little Mojo?

Friday, 19 October 2007

iPhones rock, even in the UK!

This blog post is obviously about a friend of mine; as I'd never be naughty and hack an iphone. So i've got this friend right, he's a bit of a geek and lives in London m'kay. A friend of his showed him his iphone working beautifully in the UK with a normal UK SIM card. My friend was super jealous and got another friend to buy him an iphone while in the states.

The iphone then turned up in the usual gorgeous Apple packaging. After following these instructions (as it was a 1.0.2 firmware) it was activated and jailbreaked like a charm with some neato apps on it (and openssh etc). I love 'Sketch' BTW! :). Colloquy is pretty good for IRC too

Then these instructions were followed to unlock the SIM...
From your phone, open Safari and visit the following website: - a dialog will appear and ask if you want to add a new package source. Tap on Yes. The Installer application will now automaticly launch, and it will refresh the list (if it doesn't refresh, tap the refresh button).

In the list of applications, scroll down almost to the bottom. Under the category "Utilities" you should now have "anySIM" there. Tap on it and install it (hit yes on the warning dialog). When done, press the home key, and wait for the phone to refresh. Now you should see an anySIM icon on your phone.

Before you start anySIM, go to Settings ? General ? Autolock and set it to Never. Now you can press home button, and tap on the anySIM icon.

Slide to unlock, and read to the bottom and tap the red button. This process will take some time, so just sit back and relax. When it's done, you get a message telling the result. If it's an error make note of that error, but don't worry yet.

Insert a SIM from a carrier of your choice.
If you get signal, your phone is unlocked and you are done!
See for additional reference notes.
Finally these instructions were used to change the SIM card and hey presto - a totally working iphone in the UK with a normal SIM card.

My friend is really really happy with his iphone - and is especially glad he accidentally broke his previous phone by dropping it which meant he just had to get an iphone to replace it :). Other tips from this friend of mine is to surf your gmail use
Though you didn't hear any of this from me m'kay. I've gotta say am really impressed with the iphone - its an awesome device.

Wednesday, 3 October 2007

Update: Screencast of Apache Camel and EIP - now for windows! :)

Some folks on windows reported issues watching the screencasts (thanks James and Chuck for your feedback!). Well you could always treat yourself and just buy a Mac! :)

For those still waiting for their Mac who are still stuck on a windows box there's now some WMV formats of the quicktime movies. For example
Also thanks to Dan for converting them :)

Monday, 1 October 2007

Screencast: An introduction to Apache Camel and the Enterprise Integration Patterns

I've created a short screencast introducing Apache Camel.

A high quality version of the screencast also available.

Hopefully I'll get a chance to create another screencast soon walking through a demo and showing the various visualisation tooling etc.

Thursday, 20 September 2007

ServiceMix is now a top level Apache project!

From Guillaume's post...
I'm really pleased to announce that the ASF Board has approved Apache ServiceMix graduation :-) This means that ServiceMix now becomes a full Apache Top Level Project. So we will soon make our first official release of ServiceMix 3.1.2 and 3.2 coming later. This also means that the resource will be moved to their final location: the website will be moved to and the svn repo to

In addition, I'm honored to have been voted as the Apache ServiceMix PMC Chair. The PMC (Project Management Commitee) is the group of people responsible for the project oversight, and its Chair is the interface between the Board and the project.

I just want to remind people the purpose of the Apache Incubator: its main responsibility is to watch new projects at the ASF to make sure that no IP problems remains and that there is a vibrant, diverse and sustainable community around the project that goes the "Apache Way". This is in no case about the quality or maturity of the software itself, as incubating projects greatly vary in these areas (from brand new projects to very mature projects joining the ASF).

Yay! Congrats to the entire ServiceMix team!

Tuesday, 4 September 2007

Pure RESTful API to ActiveMQ via AtomPub

Here's an early draft of an attempt at describing a purely RESTful API to ActiveMQ using AtomPub. Mapping a message broker to REST and AtomPub turns out to be much harder than it looks.

The trick I've used in this draft is that consumers subscribe by creating a new subscription Entry (as a new Entry in the subscriptions Collection) which times out eventually if the consumer goes away. Then each consumer consumes from its own Feed, so that things are nicely load balanced etc.

As usual - any feedback most welcome

10 reasons to model XML with RELAX NG , not W3C XML Schema

A great post by Griffin Brown is 10 reasons to model XML with RELAX NG , not W3C XML Schema

I'm really pleased to see the move away from J2EE to simpler POJO models; away from complex WS-deathstar to simpler REST, to JSON away from complex XML + namespaces + XSDs etc. Am hoping the trend continues with more and more people moving to RelaxNG Compact Syntax away from XSDs...

Monday, 3 September 2007

Got a Mac? Use TextMate? Try GetBundle

If you've a Mac then do try TextMate; its an awesome editor and part of my favourite OS X software. Its not a replacement for your Java IDE; but is very handy for editing everything else :). I often type this into the command line...
mate someFolderName
To browse a Java project quickly, without doing the whole Java IDE create project thing; which can sometimes take a while...

Today I stumbled on the GetBundle bundle which is a really nice way of adding new bundles. Also the Groovy/Grails bundle looks good!

Friday, 31 August 2007

Whats happening with FUSE ESB

Guillaume has a great post on FUSE ESB...
My company IONA provides support on Apache ServiceMix via a distribution called FUSE ESB available from the Open Source IONA site.

What's in FUSE ESB right now? Well, it's roughly a distribution of ServiceMix trunk. This implies that FUSE ESB is released ahead of the Apache ServiceMix distribution (the latest release is 3.1.1, whereas FUSE ESB is based on 3.2).

Why are you using the latest trunk instead of the most stable branch? Well, mostly because our customers needs some of the latest features available. We take great care of what is in our Fuse branch: we do not necessarily backport all new stuff from trunk. We may also add some specific customer needs inside our own distribution, features that are not present in the trunk version.

So is that a fork? Certainly not :-) We have always supported Apache ServiceMix and we will continue to do so. But our customers have specific needs, so we may need to do custom development or have custom branches for them to fullfill these needs. Over time, we put the features that we consider generic enough back to the community. But this level of support can not be provided in a community driven environment such as the Apache Software Foundation. Let alone the fact that our customers often require privacy regarding their issues or their specific needs, environments and projects, so that it becomes difficult to use the open mailing lists of the community.

So is that a closed source version? No. The Apache License would allow that (quite the opposite of the GPL), but this is not what we aim for. Our process is quite open: as an example, I've recently developed an AsyncBridge EIP pattern for FUSE ESB (see the issue) that will certainly be contributed back to the community...

Hopefully, this blog entry will clarify a bit the IONA policy with respect to the Apache projects it supports and the relationship between FUSE ESB and ServiceMix. Feel free to download it and give it a try...

Friday, 17 August 2007

Podcast on Apache Camel, Enterprise Integration Patterns and 1.1.0 release

I had the pleasure to be interviewed by Dana Gardner, principal analyst at Interarbor Solutions about Apache Camel recently. You can listen to the podcast or read the online transcript. Apologies in advance for any rambling :) - I did enjoy it though.

In related Camel news, the Camel 1.1.0 Release has been cut and voted; its just about to move to the maven repo & Apache mirror system any moment now. Cool beans! It contains numerous new features... Incidentally I really love the new Visualisation plugin that can be easily integrated into your maven site generation as this example shows.

Monday, 30 July 2007

Tuesday, 10 July 2007

a pure RESTful way of working with ActiveMQ queues

I've been snowed with the day job but really wanted to reply to niklas's post on A RESTful queue. It looks a great suggestion; I need to catch up on the discussion.

The REST support in ActiveMQ isn't really pure REST; as it uses non-idempotent GETs as a bit of a hack - though it does make it very easy to work with :). I’d LOVE a nice, proper, RESTful API to ActiveMQ. Though properly exposing message queues efficiently over REST while handling concurrency is a tricky problem, but its looking like some consensus is emerging. Niclas's suggestion sounds about right to me too.

Though I guess a proper REST API would involve more complexity on the client side (e.g. having to do a POST then follow a Location header to then do a DELETE or whatever). So even if we had the worlds most RESTful API, some folks might still want to use the non-idempotent GET hack (particularly if they no there's no caches in between :).

Ideally I was also thinking we should expose the entire broker on the Atom Publishing Protocol; so an APP client could discover all the queues & topics etc.

Am a bit snowed right now but ASAP I'd love to get a proper REST and APP protocol for ActiveMQ...

My favourite OS X software

It seems more and more fellow geeks are switching to Macs all the time so I thought I'd revamp my old post on recommended OS X software.

Incidentally while writing this post I ended up stumbling on my switching thoughts from 2003, so I guess I've been a very happy Mac user for over 4 years now (which also explains why that first generation 1Ghz G4 that I'm still using while on the road is so sloooowww - I can't wait for my new MacBook Pro to arrive...).

The one big change from my previous recommendations is that I don't use so many rich applications; as I can use the online versions on the move, on my desktop, laptop or phone. So I use Gmail for almost all mail - unfortunately I'm stuck with Mac.Mail for corporate email :(. I use Google Reader instead of NetNewsWire for reading blogs etc.

Since switching to gmail for email; I no longer feel the huge need for a virtual desktop anymore; I've gotten out of the habit. Expose is enough for me, especially on a 30" screen.

So here's my current list of recommended OS X software, excluding Java IDE (which I'm using IDEA but eclipse is good too on the Mac).
  • QuickSilver. I love it; though only really use it for starting up applications & tend to use it instead of the Dock
  • text editor: TextMate
  • for terminal stuff iTerm rocks. I love tabbed shells (though maybe Leopard might have this too in Terminal)
  • for creating diagrams OmniGraffle is awesome. It can even open DOT files. Also if you have some open source which creates visualisations in DOT files, then the OS X version of GraphViz rocks - as it monitors the DOT file in real time and re-renders the graph in a surprisingly flicker-free way. I've used this with some customers to watch ActiveMQ clients startup visually as they deploy their applications.
  • irc: X-ChatAqua
  • xmpp: iChat
  • MenuMeters for neat monitors of CPU, disk, network etc on the menu bar (I'm quite fond of the graph view for CPU usage)
  • VoodooPad is a WYSIWYG editor for wiki-ish things which I'm hooked on. I just wish it auto-sync'd with GDrive :)
  • ByteController for a nice little iTunes controller on the menu bar; so you don't have to switch windows when the phone goes or you wanna forward to the next track etc
  • RadioLover for recording internet radio & installing it into your iTunes library; though if you're not careful you'll end up with a monster library :)
  • Clutter is cool to play with your new monster iTunes library :)
  • Growl for notifications of things (like IRC posts etc)
  • Google Notifier for easy access to your calendar etc
  • I tend to use gCal for calendering but sync it with iCal
Thats all I can think of right now. Other advice for new switchers; give it a couple of weeks to get used to being on the light side; things are a bit different but after 2 weeks you'll hopefully feel at home.

To other OS X users out there, whats your favourite software?

Update: here's Charles Millers list - thanks! I particularly like the look of Chax (certainly until Leopard with tabbed iChat).

Tuesday, 3 July 2007

using TextMate to edit text in any Cocoa application

Many thanks to noodl for commenting on my previous post; turns out you can use TextMate to edit any Cocoa application. As noodl said...
for editting text in TextMate from any cocoa application, see:

"As noted on the blog, you need to install the Edit in TextMate input manager, which is done by clicking the gear menu in the status bar (inside TextMate), navigating to the TextMate submenu and selecting Install “Edit in TextMate”…"

And for firefox:

Great stuff!

Sunday, 1 July 2007

useful firefox plugin: Its all text!

For editing large wiki pages or big emails in gmail I find this fireFox plugin amazingly useful. Its all Text! Then just use your favourite editor; such as TextMate on OS X to edit text areas in any web page whenever you like. Neat!

Thursday, 28 June 2007

The iPhone looks amazing!

Ever since buying my first mac, the 1Ghz 17" Powerbook when they first came out (and its still going strong, although very very slowly :), I've been a self confessed Apple fan.

I thought the iPhone looked really cool & was drooling over it from the first time I heard about it and saw the early demos.

But after watching the guided tour and then the keyboard tour I'm amazed! They've done an incredible job getting so many of the little things sorted for the first release; am sure it'll keep on improving too. Things I really like...
  • the general user interface looks awesome
  • SMS support is really nice!
  • I love the google maps eye candy :)
  • the headphones & the way that little button works is really cool
  • I love the double click zoom (or pinch) and double click with 2 fingers zoom out
  • turn the phone to switch on cover flow; nice :)
  • tons of clever features added to the keyboard (I hope its easier to use than the apple mice I hate :)
I've just gotta wait months for it to come out in Europe. I guess at least most of the glitches should be ironed out by then :)

Monday, 25 June 2007

More on LazyWeb: using VMWare and maven in a CI tool

more on my previous post on using VMWare with maven builds to run tests on different machine operation system & configurations. I spotted this interesting article on testing using VMWare and perl scripts to spawn different VMWare images and running the tests inside them. So we just need someone to wrap all that up in a shell script that mimicks the mvn script and we're done! :)

BTW Mike made the excellent comment that you could use the Bamboo build number which is a very good idea. (The only downside is sometimes its JMX / RMI ports as well as ActiveMQ ports so its a tad too complex for one single port number). Mark also provided details of how to use the build number in your build - cool beans! Am sure that'll be really useful for other things...

Thursday, 21 June 2007

LazyWeb: spawning maven builds via VMWare in your CI tool

We're using the cute Bamboo tool from those nice Atlassian chaps to build projects like ActiveMQ, Camel and ServiceMix. Its got some lovely eye candy and reporting stuff.

The problem is, lots of the test cases of SOA projects like ActiveMQ often end up hard coding a port number to do some networking tests. The ActiveMQ test suite is probably one of the worst offenders :). (Yes I know, one day all those test cases should be refactored to use zero to create dynamic ports etc).

So we kinda have to run all of the test cases in a single build queue to avoid the test cases conflicting with each other on ports.

It'd be great if rather than just running mvn clean install or whatever, we could boot up maven in a separate VMWare image, with its own private ports and so forth - so the build runs in a separate virtual box and can't conflict with other tests.

e.g. using vmware-mvn clean install

Even better then, would be the ability to run different kinds of vmware images of maven (java 1.4, 1.5, 1.6 etc, then windows, solaris, linux etc).
mvn-win-1.5 clean install
mvn-linux-1.6 clean install

If the VMWare ninja could be wrapped up in a command line that looked like the mvn command, this featre would just drop into all the various maven-supporting CI tools (of which there is a fair few; Hudson, Continuum, TemCity, LuntBuild etc). So the caller of vmware-mvn would get the incremental output via stdout; and after the build, the build files would be synced with the caller, so from the CI tool's perspective its just like calling mvn.

Tuesday, 12 June 2007

Apache FtpServer available in a maven repo

Niklas mentions that Apache FtpServer is now available in the snapshot maven repo. Great!

As I mentioned in a previous post on mocking network protocols for testing; mocking is great and the next best thing to having a mock is to embed an in-JVM provider of some network service such as for testing JMS. If you want to create integration tests of your FTP logic you might want to take Apache FtpServer for a spin.

We tried using it to unit test the new FTP/SFTP/WebDAV component in Apache Camel and it worked a treat! :)

WWDC thoughts

Well WWDC is over and the dust is settling. I've gotta say I'm really liking the looks of Leopard; I love the cover flow in the new finder and the quick look feature. Why is it Apple always have really great ideas; which with hindsight seem so obvious :). e.g. the two fingers on the touchpad for 2D scrollwheel thing? Or the iPhone user interface with your fingers. Or the iPod music quiz game (if you've got an iPod, you have played that game right? Cool & addictive eh?)

Stacks looks cute (I like the eye candy of the reflections in the dock :). Spaces is welcome but no biggie as there are a number of alternatives that have been around a while now. Time Machine is awesome (ZFS really) and can't wait for that. And the new iChat looks fun :). Don't really care about Mac.Mail changes as I try and use gmail for all mail now. I wonder how much other Core Animations stuff will creap in...

I did kinda wonder if Leopard would have more native virtualization for out of the box support for Linux & Windows (X is already supported nicely); with maybe Parallels being integrated into Leopard; but I guess with Parallels and VMWare, its best to keep healthy competition in that space

The choice of using Ajax for the iPhone is great news; anyone can now develop applications for the iPhone in a standards based way that'll work on other platforms & browsers. (I was a tad worried it was gonna be Cocoa / XCode stuff for the iPhone :). Its also good to hear that the iPhone isn't gonna be locked down per se; anyone can write applications for the iPhone.

The other nice thing is now we have a single, fast browser (WebKit/Safari) that runs on the iPhone, Mac and Windows. See Joe's comments via Dion. If the iPhone takes off, especially with alpha-geeks; I wonder how many enterprises will start writing their intranet apps for the iPhone, Mac, & Windows; i.e. picking Safari as their standard supported browser instead of the usual FireFox (or IE for windows-only places).

I wonder how many windows users will actually explicitly choose to use use Safari on the Mac. I guess its used in iTunes anyway, so there's really lots of Safari (or rather WebKit) users already; so Apple might as well make it available. I wonder if Apple will release iLife for Windows as well?

Still its hard for WWDC to be as cool & exciting as the iPhone stuff; I suspect its gonna be increasingly hard for Apple to get us excited about the next OS X when often the really cool stuff is gonna be the non-PC stuff (phone, TV, remotes, tablets etc). e.g. have you seen the new ads? Amazing aren't they; especially the calamari one; I love the lovely google maps integration :).

Only 2 weeks to go to the US iPhone launch; can't wait for the european launch now! Hopefully they'll have fixed the few glitches in the early iPhones by then :)

Monday, 11 June 2007


This is just so funny, I nearly wet myself. Notice the incrementing counter? :) Many thanks to Brian for spotting it.

Thursday, 7 June 2007

We need way more FakeSteves...

As a FakeSteve fan, I found this post great :). We need way more FakeSteves!

FakeStrachan anyone? Go ActiveJelly! :-)

Friday, 25 May 2007

Why isn't RelaxNG Compact Syntax more widely used

Have you ever looked at a non trivial schema definition in RelaxNG Compact Syntax? Its amazingly readable isn't it? (Once you've got used to the + ! ? * characters from DTDs). Now and again I bump into some RelaxNG compact syntax and think its pseudo code; but no its the real syntax specification! (e.g. in the JBI spec).

When you compare how easy it is to read & write to XSDs its not even funny. Yet it seems we're all still using XSDs all over the place. So next time you have to author an XSD by hand, consider giving RelaxNG Compact Syntax a go then use Trang to generate an XSD if you need one.

For IDE vendors; it'd be nice to have a RelaxNG Compact Syntax tab on our editors when we have to change any XSDs so we can view them as RelaxNG CS instead of all those pointy brackets and namespaces :)

Wednesday, 23 May 2007

XPath based splitter in one line of Java code

This came up in a recent thread & thought I'd mention it here for those not on the list. If you want to implement the Splitter Pattern from the Enterprise Integration Patterns using XPath then you can use the following line of Java code...

Pretty neat eh. Use any language you like for the expression such as XQuery, SQL, Groovy, Ruby etc.
It sure beats programming in XML :)

Monday, 21 May 2007

SOA and Newton versus Einstein's universe

I really enjoyed Pat's analogy of SOA being like Einsteins view rather than Newtons view of the universe. Its a great way to think of the difference in approaches.

It seems for highly loaded systems that we are increasingly we're moving away from the XA and transactional approaches to looser definitions of consistency (caching/dirty reads, alternative locking models, compensating transactions rather than commit/rollback). I liked Pats hotel room reservation example as well; its rather like Gregor's coffee shop example for asynchrony and loose coupling when ordering coffee without requiring XA.

Friday, 18 May 2007

Mock JavaMail rocks. Mocking out protocols and services is damn useful

If ever you find yourself needing to test some JavaMail code, I highly recommend Mock JavaMail. It does exactly what it says on the tin & is very useful. Its yet another project from the incredibly prolific Kohsuke - nice job! We're using Mock JavaMail on Camel to test our Mail Integration and its been soo useful.

All APIs to messaging & integration systems and protocols should have some Mock testing library to allow developers to create easy unit tests and to save them having to mock complex services (which you're never sure your mocks are faithful to the underlying systems & protocols).

For JMS we can use ActiveMQ. For Camel and JBI we have Mock Endpoints (which I wish we had years ago, it'd have made developing ServiceMix much easier). For files you can just use your local file system; for databases you can use Derby, HSQLDB or H2. For HTTP/REST you can just embed Jetty.

I guess the missing things are things like XMPP and FTP. Anyone seen any other interesting mock projects for specific protocols, APIs and services? (Yes I know about jMock :)

Thursday, 17 May 2007

Groovy and JRuby punch up!

via Kirk...
It was great fun actually! I think the Java platform won the fight.

I wonder why at JavaOne I always seemed to meet folks from Groovy, Grails & JRuby while drunk in the evenings... I was sober most of the day honest! :).

Tuesday, 15 May 2007

Enterprise Integration Patterns in Java using a DSL via Apache Camel

For those of you who missed me rambling about this at JavaOne I thought I'd introduce Camel to you.

Apache Camel is a powerful rule based routing and mediation engine which provides a POJO based implementation of the Enterprise Integration Patterns using an extremely powerful fluent API (or declarative Java Domain Specific Language) to configure routing and mediation rules.

The Domain Specific Language means that Apache Camel can support type-safe smart completion of routing and mediation rules in your IDE using regular Java code without huge amounts of XML configuration files; though Xml Configuration inside of Spring 2 is also supported.

A good way to get started is to take a look at the Enterprise Integration Patterns catalog and see what the Java code of an example looks like. For example, try the message filter, content based router or splitter.

Apache Camel is heavily influenced by the fluent APIs or Java DSLs used in projects like jMock for testing mock objects and LiFT for testing web applications (both of which are great frameworks BTW), where Camel's primary focus is on the easy creation of routing & mediation rules (and all the Enterprise Integration Patterns) together with testing them.

One of the things I'm most proud of is the Mock endpoint support which makes it very easy to test that your routing and integration rules do what you think they do; rather like with jMock you can create expectations up front (things that at the end of the test you expect to happen) then fire in some messages to some endpoints; then assert that things arrived at the mock endpoints as you expected. This includes adding jMock/LiFT style assertions on things; such as the second message received on a specific mock endpoint has a header called "foo" of value "bar". This can be expressed as
All with nice Java IDE smart completion. I've really wanted something like Camel for a while; a nice easy way to configure EIP rules without having to resort to reams of XML - plus being able to test things in a distributed message based system easily is very useful.

Incidentally if you're curious of the name, here's why we called it Camel

Monday, 7 May 2007

JavaOne time!

Am about to get on a plane for the trip to San Francisco for JavaOne. Am looking forward to catching up with everyone. If you're there pop by and say hi; I'll be mostly spending my time split between the Iona booth and the Thirsty Bear :)

Tuesday, 1 May 2007

Am liking FlashBlock

If you're getting bored of those damn flash adverts on some sites, try FlashBlock

Tuesday, 24 April 2007

specifying types on static methods with generics

If you're working with generics and writing static methods sometimes you find the need to specify the type in a generic method. e.g.
class Foo {
public static <T> doSomething(String name) {... }
Often the compiler often does the right thing
Cheese cheese = Foo.doSomething("Edam");
but sometimes you really need to specify the type. You can use the following syntax to do that
Kinda obscure I know but it might come in handy if you're working with generics.

Wednesday, 18 April 2007

Sharing code snippets online with TextMate

TextMate is an awesome text editor for OS X. I just learnt of a nice plugin from proyal on #codehaus IRC...

When you want to share a code snippet in your editor with others, highlight a bit of code then hit ctrl-command-t and select Paste Selection Online and you can post a link to the code either to a URL or iChat etc. Very cool! :)

Go Sonatype

It looks like Jason, John, Neel and others new venture, Sonatype just pulled off the cloak; good luck guys. Am hoping this helps make Maven even better :).

Maven's like a car; most days it gets you where you wanna get nice and easy with a quite comfy ride (when you wanna build a project no longer do you have to mess around with files in Ant, hack Ant's build.xml or shove random jars in your ant/lib/ directory or manually install jars or mess with classpaths yada yada). Maven though does need a regular service (rm -rf ~/.m2/repository) and might not always work so well in different terrains. Though when it breaks down and stops working, its such a huge PITA :)

Podcast on Apache ActiveMQ available on feathercast

There's a feathercast of me being interviewed on Apache ActiveMQ available which discusses various things such as Apache ActiveMQ being top level etc. David Reid did a good job interviewing me and an even better job editing out my swearing and mumblings so it vaguely sounds like I know what I'm talking about :). There's a bunch of other interesting podcasts on feathercast too which are well worth checking out.

Monday, 16 April 2007

I love FakeSteve!

If you've not read it yet and you use a Mac then you should stop now and read some FakeSteve.

Its an excellent read; though be warned its quite addictive; I've found myself gradually working back in time for earlier and earlier posts. Any post with Bono in it just has me in stitches. And I love the nick names; My Little Pony, Squirrel Boy etc. LOL.

I'm increasingly thinking its really the Real Steve Jobs though...

First Post!

Am just experimenting with a new blog location. If this works OK I'll move my other blog over to here :)