When I understood the meaning of SOA, first feeling I got, that RMI taken from Object level communication to Component level.
This is how I look at whole evolution of SOA:
First came, procedural language to build very large scale application systems.
Structured Object Oriented:
With monolithic approach, larger systems were enormously complex and hard to maintain. Solution was to divide a system into smaller logically divided units based on functionality.
Client and Server:
Logical progression of OO – Grouping objects/functions on one computer and calling these from others.
3 Tier App:
Now, server wanted to control some of its resources by itself and provide services. To access caged functionality, one extra layer added to Client/Server model.
N Tier App:
For simplify more complicated systems, layered request/response agreement installed between application/layers.
Distributed Objects (DO):
Back to freedom to interact with object on N-Tier systems, an ubiquitous and heterogeneous system evolved to interact with orthogonal objects (not one-to-one interactions).
DO created many objects interacting with many object on many computers. Solution emerged by aggregation of logically/functionally connected objects into components and design uniform interfacefor communications.
Service Oriented Architecture:
Now these orthogonal interacting components needs simplified, publishable and accessibility through a service provider proxies which provides widely accepted standard interface.
What next? May be….
Centralized Service Model, Contract Oriented Architecture, IMakeNUBreakArchitecture etc.. 😉