Friday, July 25, 2008

Give it a REST...

Sanjiva lets fly with a rebuttal to Tim Bray's comments on REST and its relationship to SOAP, Java, and the multi-language divide.

Although I'm getting a little tired of saying it these days, I think it's clear that both SOAP and REST are here to stay.  There are some situations where you could use either (or both), but there are also a bunch where there is a clear winner - just like there are some cases where TCP is the right protocol, and others where UDP is better.  Use the right technology for the right situation.  Don't break the web.  And you'll be fine.

SOAP isn't "an embarrassing failure".  REST isn't "insufficient for the enterprise". Can we get on with the good stuff now? :)

Sunday, July 13, 2008

WSO2's Semantic Web Initiative... wait, what?

We had a nice chat with Rich Seeley from SearchSOA a little while ago, all about the new 1.1 release of the WSO2 Registry.  Rich wrote up the conversation in this article, but he seems to have focused a bit too narrowly on the "triples" aspect. :)

It looks like Rich conflated our discussion of the extension points in the Registry with the talk about associations.  Not a truly egregious error, to be sure, but one that does mask some of what we're doing.

The extension points in the Registry are designed to enable serious customization in two ways - first, Filters/Handlers let you install interceptors that control the existing Registry behavior.  For example, you can set it up so that whenever a put() matching certain conditions (let's say where the target URL matches "/pictures/*") occurs, a Handler can check that the size of the new resource is under a certain threshold before the put() is allowed to complete.  Handlers are great for inserting custom governance rules, or for performing automated tasks triggered by normal Registry actions.  We use these for our WSDL validation and auto-importing XSD Schemas that are imported from WSDLs or Schemas.

The second extension point is called Aspects, and using Aspects allows you to add new behavior beyond the standard put/get/delete and our various built-in community features.  The out-of-the-box example we have for this is Lifecycles, where we let you configure a chain of states and, optionally, conditions which control the transition from state to state.  The Lifecyle aspect adds the "promote" and "demote" actions to any resource which has a Lifecycle associated with it.  But Aspects can be used to make any arbitrary behavior occur, so for instance spell-checking, triggering an external build process, sending email to someone, etc...

So, we also do of course now support arbitrarily typed associations, so you can say stuff like "document D1 references service S1" (this might be documentation for a Web service) or "picture foo.jpg is-a-photo-of".  These are the actual triples, and they do represent what are essentially subject-verb-object relationships.  The subjects are always Registry resources in our world, the relationship types are arbitrary strings (which may, and probably should, be URLs), and the objects (or "targets") are either relative URLs from the Registry root, in which case they are other resources in the Registry, or absolute URLs in which case they point to Web resources.

The important takeaway here is that our extension model isn't entirely built on the triple system.  Triples are just one way you can use the Registry to build out a network of behaviors and relationships that best reflects your particular set of data.

Thursday, July 10, 2008

Trying out Windows Live Writer

Yep, it's time for an offline blogging client.  I've heard good things about Windows Live Writer, so trying it out right now.  It's got a feature where it analyzes the look (i.e. theme) of your weblog at install-time so it can give you an accurate preview of what your posts will look like.  It at least got the sizes and fonts right!

Definitely seems cool so far, so we'll give it a run and see how it goes.  Stay tuned for actual content next post.

Wednesday, July 2, 2008

Open Repositories and APP Patterns

Dan picks up the baton and kicks off a discussion about Open Repository API issues - cool! I'll start posting my thoughts here as well.

Among the things he mentions:
Define a way to deal with hierachical collections of versioned resources. That is, we need a standard way to model folders and files in AtomPub. This would be of benefit to a lot of people.
Totally agree, this is huge. As I see it this breaks down into several parts:
  • How do we indicate that a particular <entry> is in fact a collection (i.e. another feed)? We (WSO2) do this now with a custom extension, but are open to other ideas.
  • How do we create a sub-feed (i.e. subdirectory)? We do this by POSTing a <feed> instead of an <entry>. I'd like to put that forward as a good option.
  • How do we represent versioned URLs as "the same thing"?
Other things I'd like to discuss in this realm include standardizing some metadata properties (so I guess I'm agreeing with Dan's instinct to roll this in) - for instance both Galaxy and WSO2 Registry pull some useful information (service names, etc) out from WSDLs that are put into the repository. If we serialized that metadata the same way that would be really nice. I would imagine that we'd come up with a) a standard XML wrapper element for the property bag, and then b) some agreed-upon vocabulary for common properties like XML namespaces and WSDL artifact QNames.

I like Dan's proposed list of interested parties. My guess is that James and the Abdera crew might be very interested in this as well - and I bet that both Dan and I would want whatever appropriate support for this stuff baked in to Abdera if possible, since we both use it heavily.

+1 for a mailing list / wiki, so we can start throwing stuff up on a mutually-editable blackboard. Codehaus is fine, or we're happy to offer space for it as well. Dan, can you get this set up over there, or would you like us to do it?

Tuesday, July 1, 2008

Mule Galaxy rolls out

Hey, Mule Galaxy goes 1.0!

Congratulations to Dan and the Mule team on the release of their JCR- and APP-powered Registry. I'm looking forward to taking it for a spin, and continue to be very psyched that other vendors are traveling the same road we are with the WSO2 Registry - REST and APP are great foundations on which to build a registry/repository solution.

Despite some of the recent heat between our two companies, I think there are good opportunities for "coopetition", and one of those is definitely in the Registry realm. As Anne mentioned a while back, it might be nice if we got our heads together and thought about some standard models for SOA in a RESTful/APP data store. Simple example - how do I find WSDLs in the Registry which use a particular schema namespace? Can we make that work the same way across both our products?