2014-02-08

To ServiceMix or not to ServiceMix

This morning an interesting topic was posted to the Apache ServiceMix user forum, asking the question: To ServiceMix or not ServiceMix.



In my mind the short answer is: NO

Guillaume Nodet one of the key architects and long time committer on Apache ServiceMix already had his mind set 3 years ago when he wrong this blog post - Thoughts about ServiceMix.

What has happened on the ServiceMix project was that the ServiceMix kernel was pulled out of ServiceMix into its own project - Apache Karaf. That happened in spring 2009, which Guillaume also blogged about.

So is all that bad? No its IMHO all great. In fact having the kernel as a separate project, and Camel and CXF as the integration and WS/RS frameworks, would allow the ServiceMix team to focus on building the ESB that truly had value-add.

But that did not happen. ServiceMix did not create a cross product security model, web console, audit and trace tooling, clustering, governance, service registry, and much more that people were looking for in an ESB (or related to a SOA suite). There were only small pieces of it, but never really baked well into the project.

That said its not too late. I think the ServiceMix project is dying, but if a lot of people in the community step up, and contribute and work on these things, then it can bring value to some users. But I seriously doubt this will happen.

PS: 6 years ago I was working as a consultant and looked at the next integration platform for a major Danish organization, and we looked at ServiceMix back then and dismissed it due its JBI nature, and the new OSGi based architecture was only just started. And frankly it has taken a long long time to mature Apache Karaf / Felix / Aries and the other pieces in OSGi to what they are today to offer a stable and sound platform for users to build their integration applications. That was not the case 4-6 years ago.


Okay No to ServiceMix - what are my options then?
So what should use you instead of ServiceMix? Well in my mind you have at least these two options.

1)
Use Apache Karaf and add the pieces you need, such as Camel, CXF, ActiveMQ and build your own ESB. These individual projects have regular releases, and you can upgrade as you need.

The ServiceMix project only has the JBI components in additional, that you should NOT use. Only legacy users that got on the old ServiceMix 3.x wagon may need to use this in a graceful upgrade from JBI to Karaf based containers.


2)
Take a look at fabric8. IMHO fabric8 is all that value-add the ServiceMix project did not create, and a lot more.

James Strachan, just blogged today about some of his thoughts on fabric8, JBoss Fuse, and Karaf. I encourage you to take a read. For example he talks about how fabric becomes poly container, so you have a much wider choice of which containers/JVM to run your integration applications. OSGi is no longer a requirement. (IMHO that is very very existing and potentially a changer).

I encourage you to check out fabric8 web-site, and also read the overview and motivation sections of the documentation. And then check out some of the videos.

After the upcoming JBoss Fuse 6.1 release, the Fuse team at Red Hat will have more time and focus to bring the documentation at fabric8 up to date covering all the functionality we have (there is a lot more), and as well bring out a 1.0 community released using pure community releases. This gives end users a 100% free to use out of the box release. And users looking for a commercial release can then use JBoss Fuse. Best of both worlds.


Summary

Okay back to the question - to ServiceMix or not. Then NO.
Innovation happens outside ServiceMix, and also more and more outside Apache.

If you have thoughts then you can share those in comments to this blog, or better yet, get involved in the discussion forum at the ServiceMix user forum.


PPS: The thoughts on this blog is mine alone, and are not any official words from my employer.

6 comments:

Mark Nuttall said...

Where do you see "OSGi is no longer a requirement" in James post?

Claus Ibsen said...

Where he says the following

As soon as the JBoss Fuse 6.1 release is out, fabric8 will move to support Karaf, Tomcat, WildFly containers (hopefully vertx and jetty too) along with stand alone JVMs like DropWizard and Spring Boot - in addition to its current support for managed processes, OpenShift and jclouds.

Raúl K. said...

Give it a break, Claus! ServiceMix has accumulated much merit over time. Many Camel users have only arrived at Camel because SMX introduced it as the integration framework in the ESB context to begin with. Take me as an example.

The ServiceMix brand has done a lot for Camel and FuseSource in the past. Now that you're linked to Red Hat, it's clear that the direction you're steering is slightly different.

However, amongst all this FUD that you're throwing, you fail to realise that SMX is no more than a packaging of the components you later propose in your blog post: Karaf, Camel, CXF, AMQ, etc.

So let's put it in a different way...

If SMX equals Karaf + Camel + CXF + AMQ...

... and Karaf + Camel + CXF + AMQ together get your approval...

... what's wrong?

The version numbers that SMX is using?!

Yes – fair enough – ServiceMix is slightly outdated. But you can fix that quickly with features:chooseurl. Isn't it?

Anyway, had to give my 2 cent because it's absolutely unfair that you badmouth and make bold, destructive statements against the ServiceMix brand.

Especially when you propose to use exactly the same components that power ServiceMix later in your post.

Claus Ibsen said...

Rail,

I was giving my thoughts and answer to Cristiano Costantini, whom posted the question about To ServiceMix or Not to ServiceMix. (eg very first link).

He was coming to the same conclusion that activity on ServiceMix was low, and he was in need for a new release which was not coming. He was considering not using ServiceMix but to go and use Karaf instead, and add what he needs. Then he could upgrade and use latest releases of Camel, CXF, ActiveMQ, etc.

I still recommend people to do that. All the activity of ServiceMix happens at other Apache projects such as Karaf, and Camel in particular.

If you want to use ServiceMix then its IMHO much better to face the fact its Apache Karaf container, and that means OSGi. And you will have to learn about OSGi, and Karaf concepts such as features to be able to use it. And certainly when you want to install and run your own applications in the container.

The Apache Karaf community is much better at helping you with that. And there is published books about Karaf you can purchase and learn from.

And if you do not go using ServiceMix then you do NOT lose out of any functionality. ServiceMix offers NOTHING of use. The JBI is dead, and you should NOT use that.

Using Karaf allows you to know how to upgrade individual components in your container when you need to install a bug fix.This allows you to upgrade what you want, and minimize risks. For example with ServiceMix it often comes with a Karaf + Camel + CXF upgrade all at once (when there actually is a release, which you would have to wait a long time for). Using Karaf you can keep the Karaf version as is, and only upgrade Camel etc.

Also if you are new to ServiceMix then the latest release today comes with outdated and old releases. Karaf 2.2, Camel 2.10 (which is EOL and no longer supported), and ActiveMQ 5.8 which is also old and a bit buggy.

So if you downloaded ServiceMix today you are using old stuff. But if you use Karaf you can use latest release of Karaf / Camel / CXF / ActiveMQ in combination.

Omkar Omi said...

Apache ServiceMix is a project of the Apache Software Foundation and was built on the semantics and application programming interfaces of the Java Business Integration (JBI) specification

http://en.wikipedia.org/wiki/Apache_ServiceMix

and u said JBI is dead???

Claus Ibsen said...

The wikipedia article is a bit out of data.

Apache ServiceMix 3.x is JBI based. That version is EOL a long time ago.

Apache ServiceMix 4.x and 5.x is purely OSGi based. In 4.x there was a legacy JBI module, that aimed to help people migrate from 3.x to 4.x and keep using JBI until they have migrated to OSGi.

From ServiceMix 5.x onwards the JBI module has been removed.

And yeah JBI is dead. There is no other new products that implements the specification. And JBI 2.0 spec was never done.

The JBI 1.0 spec is very old.

The lead architect of ServiceMix 3.x/4.x wrote a blog post about his thoughts on SMX and JBI:
http://gnodet.blogspot.se/2010/12/thoughts-about-servicemix.html

And there is a SO questions about JBI is dead
http://stackoverflow.com/questions/5434585/is-jbi-dead-is-it-still-a-valid-criteria-in-an-esb-selection