Dependency Injection + ESB = SwitchYard (Coolest New Thing This Year)

Switchyard takes Web Services to the next level. Whereas JAXB2 and JAX-WS (and JAX-RS) have brought the development and deployment of Web Services to the necessary level of maturity for clean, easy and practical development, Switchyard let’s us take things to the next step: it makes Web Service Composition similarly clean and easy. And with Web Service Composition comes the entire arsenal of SOA Design Patterns.

I’m sure everyone right now thinks the biggest advances in the computer industry today are Social Media and the iPad. Or maybe they were last year’s big news and there’s something I don’t know (or yet care) about that just appeared in SXSW this year. Well, as much as I’m still chomping at the bit to do a little iOS development (I still watch the Stanford  class lectures from iTunes U on my iPhone while I run the elliptical at the gym at 5:30am every morning!) I’m actually really the most excited about something else. And when I mean excited, I mean that first thing every morning I’ve been checking the JIRA “open tickets” report to see how the countdown is going. I’m talking “kid counting the days to Christmas” sort of behavior.

The countdown to what? Well, I’m glad you asked. I’ve been waiting since about November for the countdown to the release of the 0.4 version of JBoss Switchyard.

Some J2EE History

Cool things come out of JBoss, the Java-centric division of Red Hat. I mean really cool things—things that actually change the face of Enterprise computing. Hibernate became the radical simplification of Enterprise-grade persistence that deprecated the entire EJB 2.x Entity Beans and ushered in the biggest part of J2EE version 5. After Hibernate (which introduced some powerful Aspect Oriented concepts) came CDI—Java Contexts and Dependency Injection—that, paired with increased use of annotations, made J2EE version 6 something equally exciting. Gavin King, creator of Hibernate, fought hard to bring a standardized version of CDI to Java Enterprise.

I can’t begin to express how grateful I am of Gavin’s enterprises. Around 2004, Hibernate saved a doomed EJB project I was working on that was grinding itself into the ground due to exploding complexity. It brought greater power and greater simplicity at the same time, and in today’s complex world of software development, that’s really saying something! Then just a couple years ago I was working on another major project, that was—for different reasons—collapsing under its own complexity, and Dependency Injection came to the rescue. (And, to a great degree, that came from the Manning Press Dependency Injection book by Dhanji R. Rasanna that I just happened across in a Barnes & Noble a couple years ago. Dhanji is another one of my heroes.) If you have any doubts about the new CDI standard’s transformative power, look no further than JSF 2.0/2.1 and the rewritten resource management system. Clean. Powerful.

So there’s this other “thing” in the J2EE Universe that is very important, very powerful, but until now it’s also been almost prohibitively complicated. I’m referring to Service Oriented Architecture (SOA) and, more specifically, the Enterprise Service Bus (ESB) and BPM Orchestration. SOA is a big deal to me. SOA is a best-of-breed application of carefully thought-up design patterns to make big Enterprise systems more manageable and scalable and agile. I’ve been applying SOA principles to take our software offering—a very powerful and mature optimization platform—and make it even more flexible.

There are things I would like to start to do to take it to the next level, but many advanced concepts that enable composable web services are pretty hard to get going. Setting up an ESB platform is daunting. There are some cool initiatives like FuseSource that reinvent the ESB platform in a nice, lightweight, modular fashion with optional standards-based deployment capabilities like OSGi, but you still have to install, configure and maintain another server platform. And writing and integrating web services still involves some weird and confusing bits… obscure routing rules written in XML that I just haven’t found easy entry-level documentation for.

Enter Switchyard.

Switchyard takes Web Services to the next level. Whereas JAXB2 and JAX-WS (and JAX-RS) have brought the development and deployment of Web Services to the necessary level of maturity for clean, easy and practical development, Switchyard let’s us take things to the next step: it makes Web Service Composition similarly clean and easy. And with Web Service Composition comes the entire arsenal of SOA Design Patterns.

SwitchYard installs as a module on top of JBoss Application Server (version 7.1.1) and instantly brings the Next Generation of ESB and BPM to your J2EE applications with the addition of a few new annotations and a couple XML configuration files. With the help of Maven and Forge, these are really easy to get started with.

Two “oh my God!” moments came when I saw some basic examples of SwitchYard at work:

  1. A quick five-minute (no words) video which shows how quickly you can get a sample BPM example up and running with just a few keystrokes. (Note: this video works with an older version of SwitchYard and is outdated. But the general concept is great, and hopefully I or someone else will assemble a replacement soon.)
  2. The JavaServer Faces section in the user documentation showed how easy it is to compose a web service as just another JSF resource for an amazingly simple and lightly coupled integration of SOA Web Services into a web application.

I’m not going to pretend to be an expert at SOA or a lot of other Enterprise Computing topics, but this stuff has the hair at the back of my neck standing straight up. This is amazing stuff. This is cutting edge. This is the next logical progression in Enterprise Computing. This is why JBoss holds its own in the company of such industry giants as Oracle and IBM. This may portend a direction for the next versions of J2EE. This is fantastic!

So anyway, we’re days away from seeing the release of SwitchYard 0.4. I don’t know when “1.0” is going to come out, but I would say that 0.4 really is a maturity milestone. It cements the integration with JBoss Application Server 7.x where things are really going to start “just working”. I’ve been waiting for version 0.4 to start doing my own real integration work. If you want to get onboard, I think now is really the moment.

Author: Murray Todd Williams

I live in Austin, Texas. I'm enthusiastic about food, wine, programming (especially Scala), tennis and politics. I've worked for Accenture for over 12 years where I'm a Product Manager for suite of analytical business applications.

Leave a Reply

Your email address will not be published. Required fields are marked *