by Len DiMaggio
I listened to a webcast from JBoss World today with a group of people. After hearing several speakers announce new middleware products and initiatives (as JBoss is the leading force in open source middleware), one of them turned to me and asked, “Just what is middleware?” When I started to describe transaction servers and database connection pool sharing, she held up a hand and said, “No. I want to know what it is in real world terms, and why it’s a big deal.”
That got me thinking and sent me to Google to look for a short definition of middleware. I found a lot of them, but they mostly were either too vague or too dependent on the reader already having some knowledge about middleware. Then, I found this one:
middleware: The kind of word that software industry insiders love to spew. Vague enough to mean just about any software program that functions as a link between two other programs, such as a Web server and a database program. Middleware also has a more specific meaning as a program that exists between a “network” and an “application” and carries out such tasks as authentication. But middleware functionality is often incorporated in application or network software, so precise definitions can get all messy. Avoid using at all costs…
And that really got me thinking about how to describe middleware and why it matters. What I was searching for was a real-world analogy that would make sense to people with varying levels of computer and software experience. And then, it hit me.
Middleware is plumbing.
There are four ways that this is true.
First, it’s mostly invisible.
You don’t generally see much of the plumbing in your house. What you see is the water. As a consumer, you don’t see middleware. You see the web sites and the information flow that middleware make possible. This is part of why middleware is hard to define. If you live and work with software, and if you’re reading this you probably do, then you’re very aware of software packages at the top level in a logical view, such as e-commerce web applications, and packages that exist at the bottom level, such as databases and the operating system. The middle part, that plumbing that ties everything together, can seem less concrete and identifiable.
Second, it provides a standard way of doing things.
If you wanted to build your own plumbing from scratch, you could. But it’s much easier to just buy plumbing fixtures. You, as a software developer, could design and build your own application servers, database connection drivers, authentication handlers, messaging systems, etc. But these wouldn’t be easy to build and maintain. It’s much easier to make use of middleware components that are built according to established (and especially open!) standards. In middleware, these standards take the form of libraries of functions that your programs call through well-defined application programming interfaces (APIs). You call these functions instead of having to invent your own.
Third, it ties together parts of complex systems.
In your house, you have kitchens, heating systems, bathrooms, washing machines, garden faucets, etc. Each plays an important part in making your house livable. You almost never have to worry about not having running water because the plumbing is robust and reliable. It just keeps the water moving through the pipes. Middleware keeps information moving through complex web-based applications. One of its primary tasks is to connect systems, applications, and databases together in a secure and reliable way. For example, let’s say you bought an over-priced sweater at a store web site last night. What happened? You looked through various sweaters’ images, selected color and size, entered a charge card number, and that was it, right? Well, behind the scenes, middleware made sure that the store’s inventory database showed that sweater in stock, connected to the charge card company’s database to make sure that your card wasn’t maxed out, and connected to the shipping company database to verify a delivery date. And, it made sure that hundreds or thousands of people could all shop that site at the same time. Also, while it looked to you like you were looking at one web site, middleware tied together many different computers, each in a different location, all running the store’s e-commerce application, into a cluster. Why is this important? To make sure that you can always get to the store online, even if some of these computers are down due to maintenance or power failures.
There’s another similarity about your household plumbing and middleware tying systems together. They both enable you to tie together systems that were built by different people, at different times, without your having to reconstruct everything from scratch. Think about your house for a minute. If your house is older, you probably have several generations of plumbing all working together. You didn’t have to upgrade your washing machine with multiple service packs when you installed a new hot water heater. In middleware, one the most powerful approaches is service-oriented architecture (SOA) based on an enterprise system bus (ESB). As its name implies, an ESB provides a server, messaging, and APIs that function like a hardware bus. In order to integrate enterprise software applications developed at different times, by different organizations, and even communicating via different protocols, you don’t have to rewrite them to speak one consistent language. The ESB enables you to “plug” these applications as services into the bus. The ESB takes care of transforming messages between the protocols and routing the messages to the correct services. In February, Red Hat announced the JBoss SOA Enterprise Platform. This platform provides a flexible, open source solution for businesses to integrate applications, SOA services, and business events, as well as to automate business processes.
Fourth and finally, it lets you worry about other things.
When you put an addition onto a house, what do you worry about? Bathroom fixtures, kitchen appliances, flooring, colors, and how to pay for it all. It’s a very stressful process. The last thing you want to worry about is whether you want 3/4-inch or half-inch pipe, copper or PVC connectors, #9 or #17 solder, etc. With middleware taking care of all the invisible functions, you (as a software developer or a business owner) can concentrate on building software to solve your business problems and fulfill your customers’ needs.
My father once told me, “when you move to a new town, don’t look for a doctor–first thing, you find a good plumber so you can sleep nights.” It’s like that with middleware. It may be mostly invisible, but it keeps things running so a lot of developers and managers and customers can sleep at night.