It's come to my attention that a lot of folks have questions about this thing called "Service Oriented Architecture (SOA)". What is it? Why do I care? How does it help me make better software?
The reason I know people have these questions is because I've done a mediocre job of explaining it. I've described it as one of the selling points of the onTap framework, hoping for that "aha!" spark of recognition. Instead it's produced more puzzled remarks of the kind you'd expect from folks who haven't been properly introduced to a concept yet.
I had another look at the overview page of the framework documentation, thanks to some comments Ziggy offered in a previous blog. He was right, that overview page needed a lot of work! In the process of revising it I think I've developed a reasonably effective way of simplifying the need for "service oriented architecture".
I've also coppied this overview content to a new Project Goals page on the wiki. There's more on the goals page, but I wanted to share the SOA explanation here so this will go out on cfbloggers and may be useful to the broader ColdFusion community.
Let me start with the Wikipedia definition:
Service-oriented architecture (SOA) is a method for systems development and integration where functionality is grouped around business processes and packaged as interoperable services. SOA also describes IT infrastructure which allows different applications to exchange data with one another as they participate in business processes. The aim is a loose coupling of services with operating systems, programming languages and other technologies which underlie applications. SOA separates functions into distinct units, or services, which are made accessible over a network in order that they can be combined and reused in the production of business applications. These services communicate with each other by passing data from one service to another, or by coordinating an activity between two or more services. SOA concepts are often seen as built upon, and evolving from older concepts of distributed computing and modular programming.
This is a serviceable explanation, but it's awfully dry, as you might expect from a wiklopedia. And while you can glean some information from it the mere style of the writing may make it difficult to really grok what all these words mean when you put them together in that particular order. I've heard in the past that when learning something new it's a good idea to have two books on hand - a fact/reference book and a tutorial book. Or in some cases a book that combines both of these aspects. So with Wikipedia as the "reference" part of the equation, here's a more tutorial-esque explanation of what the above means. (Or at least what it means when I talk about SOA.)
What if you wanted to have Kalendar integrated into your BlogCFC blog. Why not? You could be writing a blog and want to insert an AJAX widget that shows an RSVP for a particular calendar event. Or maybe the reverse, you want to associate a blog entry with an event in the calendar.
You can do these things now however, YOU have to write the integration code yourself. Plus EVERY change you make to integrate them increases the difficulty of upgrading to later versions of either project!
Why should you have to do that work? Don't you have plenty of your own projects that need your time?
And why should integrating them make it harder to upgrade?!
Why aren't Kalendar and BlogCFC already integrated for you?
These kinds of services have been available for a while, but when they first came out you had to manually copy the URL of the blog you're reading, manually open a new browser window, manually navigate to del.icio.us and manually paste your coppied url into their tool.
As the notion of blogging has evolved it's become common for blogging software or services like blogger.com or LiveJournal to streamline that process for you by integrating links to services like del.icio.us into their blogs. Ray's BlogCFC that runs this blog has links to Technorati and del.icio.us below this entry you're reading right now.
Having those links means not doing that extra work, because the software does the integration work for you.
What a well designed SOA framework like the onTap framework can do for your ColdFusion applications is the same thing. It can eliminate a lot of the work of integrating different applications.
I'm going to give one last example of a service oriented architecture. One you use every day and probably never realized was an SOA.
What I'd like to point out most specifically about the web is the use of search engines like Yahoo, Lycos and Alta Vista. :P Yeah, yeah, I know... Is Alta Vista even still in business?
But that's actually rather crucial to this point.
Although we generally only use Google now there was a time that there were a wealth of web-searching companies available and in frequent use. All those companies as well as Google relied on and continue to rely on the fact that the web is a service oritented architecture. Because the web is SOA, search providers like Google can discover sites via the prescribed method of service discovery (spidering).
Because these sites are available this way the service provider can provide their services (and here's the key point) independently of the original site. How many site owners do you think knew about Google's new image search on the day of its initial beta release? Probably very few. They didn't need to know. Google didn't need their permission or their help. Google didn't need them to create XML files or databases with lists of the images on their sites.
So there are three parties involved here - there's the search engine service provider (Google), there's the site author and there's the end consumer (us). And what SOA does in this scenario is to eliminate dependencies between these entities, allowing them to discover and utilize each other with minimal prior knowledge. In a traditional software application, Google would be dependent on the actions of the site providers uploading or importing content to them. The SOA nature of the web in this case eliminated that dependency.
So to tie these back together, lets say you've got BlogCFC and Kalendar and you want to integrate these applications. An SOA framework like the onTap framework would allow TJ to create integration for BlogCFC that comes already bundled with Kalendar. But what's even more cool about this SOA is that when you install these two applications (Kalendar and BlogCFC) that integration between them is automatic - the framework does the work for you.