Hi;
The
"neither" option is what frustrates me reading this. We want to
expose
public state, and yet apparently we have to keep implementors in
mind
that have no standard way to expose that public state.
...
I
reluctantly agree. I was operating under the assumption that at very
least
either WSRF or WS-Transfer would be an acceptable requirement. Not
having
any public state model requirement at all makes this a slightly
different
problem in my opinion.
I believe that today’s reality is
that you can’t assume universal WSRF or WS-Transfer support anytime soon.
I
think I'm with you now for the most part. I just have a problem with
singling
out one property over another in terms of which ones are "good
enough"
to have their own accessor operation. Especially if we allow for
notifications,
the activity status might be the least used and yet you
are
proposing that we make it the only property that gets it's own
accessor
operation. Perhaps it would be acceptable to create a hybrid
operation
that either takes an array of property QNames and returns
those
properties (ala WSRF's "GetMultipleResourceProperties"), or if the
array
is empty/not specified returns the entire public state document
(ala
WS-Transfer's "Get"). If we need a multiple-activity operation for
the
BES services, then just add another argument that is an array of
activity
EPRs and name the operation to distinguish it from the singular
operation.
I didn’t mean to advocate that there
be an explicit accessor function for only the activity status property. Rather
I was advocating that there be accessor functions for each of the properties
and that the interop standard mandate that there be at least the accessor
function for returning an activity’s status (in addition to the accessor
function for returning all the state information for an activity). All
other accessor functions would be part of extensions.
In my response further down I explain why
I prefer explicity accessor functions over a WSRF-style
GetMultipleResourceProperties approach.
This
is essentially what I was pushing with my ambiguous public state
model
concept. What I wasn't considering was this new (at least to me)
requirement
for no public state model at all. If we can't assume a
public
state model, then we have to basically agree on some minimal
reconciliation
between WSRF and WS-Transfer since the BES spec implies
some
sort of public state model as a result of it's definition of
statefull
service properties. The two candidates seem to be the
following:
1)
Have named accessor operations for each property and one operation
for
obtaining the entire public state document, or
2)
Have a single, generic operation that fetches either an array of
properties
or the entire set of public state properties.
I would advocate taking approach 1 for the
following reasons, derived from an explanation of a colleague of mine recently provided
me:
The advantage of the
explicit accessor function approach, given the current tooling and suite of
technologies that most of the world has, is that you can describe it completely
using metadata (i.e. WSDL). The latter approach cannot be described in WSDL,
hence the need to introduce the additional message exchange
(GetListOfProperties). The disadvantage of the explicit accessor function approach
is that you can’t request more than one property at a time.
You might ask why
being able to describe the interface completely in WSDL/XSD matters. The
reply to a ‘GetState’ request will have to be a message with open
content…
<properties>
<xsd:any>
</properties>
Of course you can
define in your specification that if property A is included in there, then the
structure would look like
<properties>
<A>
<foo />
<bar />
</A>
</properties>
However, now this
description is in a human language specification and not in a
machine-processable vocabulary. You have to manually make sure that you
implement support for the various infosets before you can deal with the results.
If you make an error in your implementation then the tooling won’t help
you – nor can the tooling help you with any kind of static analysis of
your interface for correctness or security purposes.
If you define
explicit messages, then you can describe the structure using WSDL and XSD and
you can point your favorite WSDL->Java or WSDL->C# tool at the WSDL
document and everything will be generated for you. There would be no surprises
because the two sides have agreed on a contract. Note also that such
tools make the creation of client code for using a multitude of explicit
accessor functions fairly painless.
Marvin.