structure of the URIs and the format and semantics of
the documents exchanged in order to implement the job
service’s operations are application specific. Thus, while
the URIs appear to convey some semantic information
based on their structure (for example, a /status at the end
of a particular job URI may be interpreted by a human
as the identifier of the status resource), this is an application-specific convention.
No-conventions/Web services implementation. Since
in this approach we assume no defined state management
conventions with widely agreed-upon semantics, each
application domain is expected to define interactions
that meet its own requirements. Table 6 summarizes a
potential implementation of the job management service
in this style, using SOAP messaging.
Because of the nature of the example chosen, all
operations are defined as request-response message
exchanges. The CreateJob message exchange returns
an identifier as the job handle. The returned job identifier may be a globally unique URI (for example, a URN)
that can be accepted by multiple job services. Metadata
about it (for example, the job services that “know” about
it) may be discovered from registries. Examples of this
approach to identifying resources include the LSID (Life
Science Identifier), IVOA (International Virtual Observatory Alliance) identifier, and ASIN. Thus, the job identifier
may become a technology-independent handle that can
also be used with other technologies (for example, a Jini
or CORBA interface to the same service). A client receiving such a job handle can then pass it to the job management service.
DISCUSSION
The four approaches to modeling state do not differ greatly in terms of what they actually do. All send
essentially the same messages, with the same content,
across the network. For example, a request to destroy a
particular job will in each case be directed to a network
endpoint via an HTTP PUT, and will contain the name of
the operation to be performed, plus some data indicating
the job that should be destroyed. The approaches vary
only in how these different components are included in a
message, an issue that may have implications for how
messages can be processed and routed but that has no
impact on how services are implemented.
At the same time, there clearly are significant differences among the approaches in their use of conventions,
the underlying protocols, and the tooling available to
support their use. Here we summarize important arguments on these topics. The characterizations of the various positions are our own.
The value of convention. Proponents of the WS-RF and
WS-Transfer approaches argue that creating, accessing,
and managing state involve a set of common patterns
that can usefully be captured in a set of specifications,
thus simplifying the design, development, and maintenance of applications that use those patterns. For
example, in the case of our job management service,
these proponents might observe the following:
• The creation and subsequent management of a job
can naturally be viewed as an instance of some general
patterns (creation, access, subscription, lifetime management, and destruction of state associated with a job).
• The encoding of the job management interface in terms
of those patterns simplifies both the design of the interface (as much of it is already provided in other specifications) and the explanation of that interface to others.
They may also point out that programmer productivity is enhanced by client tools and applications that
are “WS-RF and/or WS-Transfer aware.” For example, a
registry or monitoring system can use WS-RF operations
to access service state without any application-specific
knowledge of that state’s structure.2
In contrast, proponents of the no-conventions
approach argue that the design of any particular interface
(for example, one for job management) will typically be
relatively simple, involve issues that are not captured by
these conventional patterns, and not require all features
included in the specifications that encode that pattern.
Thus, one can achieve a simpler design by proceeding
from first principles. For example, in the case of our
job management service, while WS-RF and WS-Transfer
provide us with a Destroy operation “for free,” we still
need to introduce a separate Suspend operation. Furthermore, the semantics of Destroy may be quite application