A really bizarre article on IEEE Spectrum. I say bizarre, because it totally nails the problem (linking databases), yet totally flubs the solution (Web services).

If you want to open up your databases and link them together, look no further than the Semantic Web.

Update; yes, I know it’s a pro-Semantic-Web article, I’m just pointing out the misconceptions about Web services. They are not about publishing data. That’s what the Web is for. The article even claims that HTTP was designed for HTML, which is totally false.

Via Savas (subscribed!), I’m following a lot of the discussion regarding the recent Grid/Web-services “unification” specs, WSRF. Good stuff! These folks are even closer to having their Web gestalt moment I believe, as they’re now talking about “stateful resources” (now where have I heard of those before?) in the context of integrating two different systems, the Grid and Web services. Rock on! I think I’ll sign up to a mailing list or two.

While following those links, I ran across a proposal by Savas and his group called WS-GAF, a sort of accidental precursor to parts of WSRF. It mentioned REST;

There have been proposals for naming and uniformly providing access to resources, like the REpresentational State Transfer (REST) [2] model. However, since REST depends on HTTP it is protocol specific and hence unsuitable for heterogeneous systems like the Grid.

First, I just want to say that I think it’s wonderful that REST was even mentioned in the context of the Grid. Most folks think it’s still just for humans and browsers and HTML. Very refreshing. Now for the bad news (come on, you knew it was coming … 8-). REST does not depend on HTTP at all. It is an architectural style, and therefore prescribes no specific implementation, it just describes the constraints that one uses when designing a RESTful system. You could run out and build one that didn’t use any existing technology, if you wanted to.

Savas might be interested in a response of mine to Werner Vogels regarding his Web services are not distributed objects paper.

WS-GAF still uses URIs, which is great. Here’s an example of one;

urn:dais:dataset:b4136aa4-2d11-42bd-aa61-8e8aa5223211

This is wonderful, in a sense. It’s the first time I’ve seen that we’ve narrowed the whole SOA/REST/Web issue down to an issue of Web architecture, in particular, httpRange-14 (well, you have to squint a little to see why it’s really that issue – it could have been called the “uriRange” issue, i.e. what can a URI identify?).

So my claim is that WS-GAF would be far better off to identify its resources using http URIs, for the same reason that “info” scheme users would.

Lots of distributed object, SOA, Web, Web services talk going on recently …

Dare Obasanjo on Web/SOA;

What Don and the folks on the Indigo team are trying to do is apply the lessons learned from the Web solving problems traditionally tackled by distributed object systems.

I know they’re trying to do that, but what they’ve (and most nearly everybody else) have missed, is that the Web is already a distributed object system; it has its own way of addressing most of the problems that previous attempts at distributed object infrastructures attempted to solve. For the things it doesn’t address, Web extensions like the Semantic Web and ARREST cover them … and then some.

James Robertson on HTTP, documents and coupling;

Here’s my point though. It’s magic thinking to say that you have looser coupling simply because you use Http transport and XML documents. It’s a fantasy. Why do I say that? Well, let’s posit a blog server that accepts XmlRpc formatted posts. There you go – http transport, xml documents.

HTTP isn’t a transport protocol. It’s not intended to send RPC messages, it’s intended to send real documents like images and resumes and letters and purchase orders and … anything that is serialized state. If you use it that way, then there is magic there, because it gets data into the hands of somebody else’s application code, rather than into the hands of some infrastructure code.

It’s actually no different than CORBA – except that maybe it’s slower. Either way, I have a server listening on a port, expecting data in a given form, and able to perform a constrained set of actions if I send it the right requests – and ready to send back errors if I don’t.

CORBA only tells you that objects have interfaces. HTTP tells you what that interface is.

More later…

Chris Ferris writes, regarding BEEP and HTTP;

The BEEP protocol offers much richer message exchange patterns than does HTTP, enabling the likes of publish/subscribe, one request/N responses, etc. without having to resort to hacks.

I’m not a fan of BEEP, primarily because I see little value in standardizing at that layer (OSI layers 5 and 6) without standardizing up higher with an application protocol, because layer 7 is where interop happens on the Internet.

But I have to take issue with the “hacks” jab. He and I went back and forth on at least one HTTP extension in the early days of the Web Services Architecture WG; the MONITOR method. Is that a hack? Is mod-pubsub a hack? (well, parts sure are, but the bulk of it? 8-)

I suppose if you have the luxury of working in a greenfield environment with little in the way of architectural constraints (e.g. BEEP), then you can pretty much do what you want, and perhaps you’ll end up with something quite elegant. But doing the same thing with an existing architecture is much harder because you have more constraints you have to work within. That doesn’t make them hacks.

Via service-orientated-architecture, a good article, with a great point;

Having a JavaSpaces foundation makes it possible to tackle the modernization of an enterprise application portfolio in a distributed fashion. It becomes possible to modernize front ends without petrifying back ends by agreeing on an abstract middle layer to which all the actual IT assets can connect without concern for what’s on the other side. It lets each center of responsibility make its own decisions about the relative urgency of various goals so that those who have budget accountability also get to decide what will be done when-an essential part of any rational goal-setting process.

Very well said, especially the “abstract middle layer” bit. Of course, there’s nothing special about JavaSpaces in this regard; any interface constrained around an abstraction, be it a space, a resource, or an email inbox, will buy you these same benefits.

So if similar architectural styles to JavaSpaces are the evolution of Web services, and Web services are the evolution of the Web, then why does JavaSpaces look so much like the Web?

Yikes, I awoke this morning to about 100 new emails, 42 of which were this beast. And those were just the ones that evaded the spam filter. It also constituted about a third of the 200 or so spams caught by my filters.

I’ve never been hit so hard.

Via Ted, Stefano’s trying to trace the history of the inversion-of-control pattern (well, I think it’s a pattern at least 8-) used in frameworks.

I used it in my own work in ’94/95 when I first got into C++, and shortly thereafter with Java in the summer of ’95. But it was perhaps late ’95 (confirmed; it was published in Sept ’95), when I first saw it described and referred to as the “Hollywood Principle”. That description was in the famed “blue book”; Bob Orfali, Dan Harkey, and Jeri Edwards’ The Essential Distributed Objects Survival Guide.

I’m sure I sound like a broken record (there’s another case too, but I can’t find it, doh) on this subject, but another group has just taken a stab at reinventing substantial portions of the Web (poorly). This time, it’s presented as a Web-services-meets-the-Grid solution, and ironically, I think they nail the basics of a means to unify those two architectures; with a resource model. But, the reinvention part, is that the Web already has a perfectly good resource model.

Where their resource model breaks down, is that they feel the need to associate a specific interface with it. It’s a resource, why not define an interface for a resource? Let’s see, resources only have identity, state, and behaviour, so the semantics would have to operate on this; things like “serialize your state” (GET), “change your state to this” (PUT), etc..

Apparently, in the whats-hot-whats-not department, Web services are not.

Norm’s playing around with media types. This one is served with application/xml.

Let’s have a look at what should happen in a perfect world if XHTML is served with that media type. RFC 3023 says;

An XML document labeled as text/xml or application/xml might contain namespace declarations, stylesheet-linking processing instructions (PIs), schema information, or other declarations that might be used to suggest how the document is to be processed. For example, a document might have the XHTML namespace and a reference to a CSS stylesheet. Such a document might be handled by applications that would use this information to dispatch the document for appropriate processing.

What that means is that one cannot assume that namespace dispatching will occur, and therefore the semantics of application/xml are ambiguous; it is reasonable that the recipient see it as XHTML/HTML, but also reasonable that they see it as “XML” (such as in the IE XML tree view).

In the real world of course, reality can trump specification; concensus (in the form of running code) may very well be that namespace dispatching is assumed, and in that case at least the ambiguity vanishes. But then we’ve lost the ability to send plain-old XML. For example if somebody asks me for a sample XML document, I’d like to be able to send them some XHTML without it being interpreted by the other end as XHTML, just XML. I think it would be great if application/xml could be used for this purpose, but it’s not a huge deal; text/plain would also be appropriate in many cases.

So I set up a little test. Let me know what you see and I’ll record it. It could be useful in the soon-to-come revision to 3023, enabling us to be a bit more specific than “might”.