Architecture Description Language (ADL) provides a simple notation
for describing service-oriented problems. By using ADL, developers
can quickly define needed services, components, and deployments.
ADL is intended to separate behaviors (service contracts) from
implementations (components). ADL is composed of several simple
constructs: components, roles, connectors, ports, and protocols
(see Figure 1).

Figure 1: ADL Notation
In our use of ADL, the provider is the component offering a service.
The connector direction does not necessarily imply the direction
of communications, but which components are providing and using
the service. Depending on the protocol the service may be pushed
or pulled from the service provider. The distinction of a service
provider is important for other reasons. The connector direction
indicates which component publishes the service (if discovery
is used) and who enforces security (those with something to protect).
These components can be placed over a deployment diagram to show
a specific deployment instance, as in Figure 2. This shows the
mapping of components to platforms.

Figure 2: Deployment Diagram
Typically, the design process should start with a problem model.
Usually this consists of a context diagram and use cases. This
provides a very high-level functional model of the requirements
of the task. The developer must also consider constraining requirements,
such as performance. Even though the solution may be oriented
towards a particular problem and deployment, service-oriented
programming is designed to allow these services to be reused in
other environments.
Next: Service
Oriented Programming Principles