The various definitions of SOA and the discussions of the various benefits are not always tremendously helpful or illuminating when it comes to answer the question of “so what do I need to put in place to achieve one”. So that's what I've decided to start to cover over the coming days.
The usual disclaimer applies: this is my set of opinions, and there will be other opinions expressed elsewhere. However, they are based on 20+ years in the software industry, both on the supplier and consumer side, with multi-tier, distributed systems being a focus for just over 10 of those years (and counting).
There's a graphic that has becoming almost a de facto standard in SOA presentations. It shows a four-layer model, those four layers being (starting at the bottom) Data Layer, Service Layer, Process Layer and Presentation Layer, something like this:

Now having a layered model is nothing startling and it's been with us for years: 'monolithic', host-based computing fitted a single layer; client/server extended that into two layers, largely in conjunction with the advent of a 'standardised' way to access data – SQL; then there followed a wider push to three layers – data, business logic and presentation, driven originally by technologies such as DCE, CORBA, DCOM and the maturing of development disciplines around OO, patterns and the like.
So SOA introduces a couple of distinctions:
1. The “business logic” layer is further categorised into 'processes' (the sequencing and orchestration of actions to achieve something of measurable value) and 'services' (the encapsulation of business functionality into components that can be accessed in a consistent way). This separation of processes and services leads to the second distinction.
2. The layers should not stop at application boundaries: any and all applications ('processes') that wish to access a specific set of functionality should do so by using the same, shareable service
Examining the impact of the second distinction shows that the translation of functionality into services must also include aspects of security and self-protection, since the service cannot determine ahead of time who is attempting an access, and whether they are attempting to do so in a well-behaved manner. This is a point that I'll return to some time later.
Whilst I consider this four-layer model a reasonable start, I think it is still too simplistic and can actually encourage problems later.
To illustrate this, let's take the Data Layer. What goes into it? Is it just the actual corporate data itself? Is it an object Domain Model, so that the there's some functionality encapsulated in there? Or is it the same content that was in the three-layer model, such as object-relational mapping, Java Entity beans and their alternatives, etc.? And how are those those things accessed? Where do you draw the boundary between the Data Layer and the Service layer that's the next one up? And if you're using some external functionality, such as a credit rating service, does that fit in the Data Layer (because you're retrieving credit rating data), or in the Service Layer (because it's a “service”).
Therefore, when speaking with people about SOA I introduce this picture, but then I change some of the names (you'll see why) and I supplement it with two 'vertical' elements that interact with each of those four 'horizontal' layers, those two elements being:
1. A common, system- and platform-independent model for representing data that is transferred between and within the layers. By using this approach, each different source and sink of data, functionality and events that is added to the environment need only have one set of data translation functionality developed, i.e. from its 'native' form into the common model. This eliminates any inter-system dependencies based on data formats.
2. A common set of 'framework' services that will underpin the operation of the functionality in all of the layers, those framework services to include such things as auditing, exception/violation reporting, the collection of performance data and other operational metrics, the management of operational events and configuration parameters, etc.
So my picture looks like this:

So what I intend to do, is go through each of these six pieces in turn to outline what I consider to be some of the defining characteristics of each and why I consider them essential to the formation of a successful implementation of a service-oriented architecture.
But as a teaser, I shall explain that my Technical Platform layer is the layer that wraps all systems where there is an element of integration work to be performed, such as data transformation, connection into external and/or legacy systems, etc. So the access to a database and the access to a credit rating service would both go in the Technical Platform layer.
As it happens, SeeBeyond has a similar view of the SOA world, so I'm not alone here.
There's more to come – soon, I promise!
