Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

...

So you've read How to Evaluate an ESB and you're ready to select one. Now the question becomes, 'Is ServiceMix the right one for me?' Here's some basic information to get your decision-making process started.

Open Source

...

and Open Standards

How do Open Source ESBs compare to commercial ESBs?

...

In the middle, there's the bus. The messages on the bus are JBI Normalized Messages, which are XML-based with optional binary attachments, header values, etc. (for more detail see What is JBI?).

On the bottom are binding components Binding Components. These are JBI components (like plugins) that have the capability to convert incoming messages from some protocol (like SOAP over HTTP, REST over JMS, SNMP, some custom binary junk, etc.) into Normalized Messages, and put those messages onto the bus. Or take a Normalized Message from the bus, and send it out using some other protocol. Or both.

On the top are service engines Service Engines. These are JBI components (again, like plugins) that can do interesting things with Normalized Messages. Like perform some custom message routing, or transform the message via XSLT, or run a BPEL process, or invoke a method on an EJB and return the result as another Normalized Message.

So when you deploy an a JBI application, it will probably include things like:

  • Some POJOs, Spring Beans, or other components with service logic
  • Configuration files to activate certain service engines (e.g. to convert accept Normalized Messages from the bus and translate those into method calls on your beans above)
  • Configuration files to activate certain binding components (e.g. to connect your services to the send or receive SOAP-over-HTTP protocol on a certain URL, converting to or from Normalized Messages on the bus)
  • Any additional routing rules, perhaps using a routing service engine, if it can't be deduced (e.g. by comparing the format of a Normalized Message to the WSDL describing the services) or needs additional customization

...

ServiceMix can support any protocol so long as a binding component is available to convert protocol messages to or from Normalized Messages. For custom protocols, you may need to write a bit of code for the binding component, but that is not particularly complex (outside of whatever the protocol processing requires).

Routing

...

and Transformation

What routing options does ServiceMix provide?

...

You could also write custom Java code to perform orchestration (see, for example, this tutorial).

Finally, while it's not full-fledged orchestration, Camel is integrated with ServiceMix and supports many Enterprise Integration Patterns that might otherwise require an orchestration engine to implement.

...

Are there any other development tools available?

If you're starting a new Maven project, there are Maven Archetypes available for many types of JBI and ServiceMix modules.

Those archetypes use a series of Maven plugins (which you can also use without the archetypes) There are Maven plugins to package a Maven project or module as a JBI Service Unit or Service Assembly. For a walkthrough of using the Maven tools to create, build, and deploy a JBI application, see the Maven JBI Application Tutorial.

There are also more Maven options in case you're building a custom JBI service engine or binding component.If you're starting a new Maven project, there are also archetypes available for many types of JBI and ServiceMix modulesyou're building a custom JBI service engine or binding component.

Testing

What are the options for testing services during development?

...

Of course, you would want to coordinate changes to routing, transformation, or orchestration that depend on changes to the service's WSDL. (This is easiest for anything deployed in the same Service Assembly as the service in question.)

Note that if you want to support clients using different versions of a service WSDL, you can use Content-Based Routing and XSLT Transformations to send new requests straight through, but run old requests through an XSLT transformation first.

What options are available for building composite services (or business processes)?

...

Other options, depending on the level of integration necessary, would include using #Routing & Transformation and other Enterprise Integration Patterns to connect individual services. You could also use a Script or Java Bean to integrate several services.

Publication

...

and Discovery

Is there a service registry?

...