Elias Sinderson wrote:
> Someone quipped:
>
> >>Yes, but because the data, in the end, defines the semantics of the
> >>operation, HTTP is really immaterial. It doesn't provide a bit of
> >>extra anything to the applications overall ability to "work."
Which was me...
> >>
> To which Patrick Logan replied:
>
> >Tell that to the people who use a browser every day. See, a browser is
> >this application that... Oh, you probably know what a browser is.
> >
> And I say, +1 and here, here. :-)
>
> To ignore the contributions that an appropriate transfer / transport
> protocol selection makes to a distributed system is, well, ignorant.
My comment was a bit uninformative relative to the issues that I considered
prior to making it. I said 'the applications overall ability to "work."', and
didn't explain the context that I was thinking of.
I did say that HTTP was really immaterial. Other protocols can provide the
same
semantic features as HTTP. My reference point of view is as a Jini architect.
I don't think about protocol as a primary issue any longer. All I think about
is the logical architecture that I need. Later, near deployment, I plug in the
protocol that best solves a particular transport need. Because my application
is not toting around URIs, I am not focused on that level of implementation
detail. Instead, I'm carrying around the application data and the things that
matter to the application. Some of that data might in fact be a URI, but
that's
not the "transport" detail, that the "data" detail.
So, yes, I might have to use an URI to get to something that is only available
from a web server. In Java, a document can be represented by an InputStream
that I can create from lots of choices. I have a RemoteSocketStream class that
I use to stream data into Jini clients via an API call that might look like:
public InputStream getData(...) throws IOException;
On the grand scale of things, its the HTML or other content that the user
needs.
The transport is an interesting part of the puzzle, but focusing on a
specific
transport instead of the semantics that you need from the transport is another
point of coupling.
The above interface is about getting the data, not about how is it transported.
With mobile code in Jini, I can do this with an implementation in a smart
proxy How the clients get it can be important in the sense of the way the data
is available, but the protocol for transport or invocation semantics is not
always the best place to throw all your dependencies. In a smart proxy, I can
do
return new URL(url).openConnection().getInputStream();
or
return new StringBufferInputStream( document );
or
return new Socket( host, port ).getInputStream();
and the client won't have to worry about what brings them the data. If I'm
worried about retrying on error, and the client usage can facilitate such, I
can
do some other things to provide retries, restarts etc. But the client API is
not about all those semantic details of transport. It's just about getting the
data for the client to use and the API doesn't push the transport into the API.
Gregg Wonderly
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/service-orientated-architecture/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/