September 13, 2005

web services course redux

Teaching the web services class again this fall.  The revised syllabus is at http://rosetta.sims.berkeley.edu:8085/sylvia/f05/view/290-3.complete

This semester will focus more on mobile web services, including exposing some of the mobile web services technology we're building at Good Technology.

December 04, 2004

web services course

My web services course is winding down, so I should have more time for posting in the coming weeks.  I gave my final lecture last week on Best Practices in Service Oriented Architecture. Adam Bosworth also came out on Thursday and gave a great guest lecture on the future of web services.  Now that he's at google not doing web services, it was fun to force him to weigh in on the area where he is sorely missed.  Next week is the final class where students present their impressive array of web services projects.  I'll miss Thursday evenings on campus spewing my random pontifications on web services. 

October 14, 2004

mobile web services

Its been a while since I've posted here. I've been completely headsdown for the last seven months at Good Technology, building our first release of what is now the industry's best mobile web browser. It boasts a variety of features such as asynchronous download, compressed data and sophisticated content transformation capabilities that make it IMHO the first truly usable mobile device frontend to enterprise applications. We've now just shipped and I can take a breath and start posting on web services topics again.

In fact, as director of server software here I'm also working on some interesting mobile web services technologies that I'll be talking more about in coming posts.

In the meantime, I'm most of the way through teaching a web services course. I'd love to get feedback here on the content of the course. As far as I know its the only course focus on building schema-first coarse-grained document-oriented web services. Things are going great. Tonight, I'm having one of several industry luminaries, Roger Sippl (founder of Informix, Vantive, and Visigenix), come out to talk about web services clients and web services-oriented composite applications, centered on his work at AboveAll. Should be a great lecture.

March 04, 2004

Versioning Web Service Information in UDDI

This blog has been a great source of feedback from customers and industry colleagues. I'd like to use that channel a little more proactively now.

We're working with the UDDI TC on approaches to versioning (as the public OASIS UDDI meeting minutes show). We've currently identified that we want to take any web service object in UDDI (business services, binding templates, and portType and binding tModels generated following the "Using WSDL in UDDI" Tech Note) and put versioning information on any of them. Our current thinking is that this includes version numbering (usually a major.minor number but any content should be alright), revision or build information (of arbitrary content), milestone information (such as "latest revision"), and "component information" that can be used to logically tie together multiple objects. Unchecked taxonomy tModels can be created for each of these types of information. From any UDDI web service object (e.g. a portType tModel representing an interface definition) categories (keyedReferences) that refer to those tModels and whose keyValues reflects the version, revision, milestone and component.

All this is straightforward enough. A few questions:
- is it acceptable that this won't work for V2 bindingTemplates (categories can only be placed on UDDI V3 bindingTemplates)? Most versioning may take place on the portType tModels (the interfaces) so maybe this is okay.
- should the version be arbitrary content (any string) or should it be allowed to be numeric (possibly with a majorVersion category and minorVersion category)? Since UDDI will get range searching soon enough, this might be attractive. It is however, more complex (more categories necessary) and may not match with the version labeling methods of some shops.
- are there other semantically meaningful milestones that should be "built-in" besides "latest revision", "latest version".

I'm very curious how companies have versioned their web service information in their registries (UDDI-based or otherwise, from Systinet or elsewhere).

February 18, 2004

WS-Eventing feedback workshop

Excited that its going on tomorrow at Tibco Palo Alto and that I have an excuse to be home in the Bay area yet a few more days. WS-Eventing is a great spec. I've provided some feedback on this blog on it already. I have more substantive suggestions for tomorrow.

Below is a sample C# command line utility I wrote tonight that allows you to subscribe a URL-specified endpoint to XPath-specified document content. It does this by sending WS-Eventing Subscribe messages to a WS-Eventing supporting Content Based Routing service. Full source (with comments even!), WS-E WSDL file, VS project files and executable is also available here. Works against our WS-Eventing implementation nicely it seems.

* Shouldn't be necessary to have such caveats on a personal blog, but it has not been tested very much at all, and for all I know has all kinds of bugs (certainly should be doing more sanity checking of the SubscribeResponse than I do below). The only real use of it will be that some variation of it will probably end up as a sample in an article or tutorial somewhere. In other words, its true CTO-quality code...

Haven't tried it against Casey Chesnut's WS-Eventing implementation (which requires Microsoft SQL Server) since I don't have SQL Server on any systems here (shocking since I was on that team at Microsoft). Any other implementations to interop test this against? I'm sure I'll find out a few tomorrow...

Couldn't resist showing how simple the program gets to be due to the straightforwardness of WS-Eventing and how easy it is to subscribe to document traffic. Now, getting source code to appear nicely on a blog is another story, as the indentation is totally lost below :-(.

using System;
namespace CBRSubscribe
{
class MainClass
{
[STAThread]
///////////////////////////
static void Main(string[] args)
{
if (args.Length<3)
{
Console.WriteLine(
"Usage: CBRSubscribe <web service for notifications> <filter expression> <CBR URL>");
return;
}
bool result;
result=Subscribe(args[0],args[1],args[2]);
if (result)
Console.WriteLine(
"Endpoint {0} is successfully subscribed to documents matching {1} with CBR service {2}!",
args[0],args[1],args[2]);
else
Console.WriteLine("Subscription failed!");
return;
}


static bool Subscribe(string notifyAddress,string subscriptionFilter,string cbrServiceURL)
{
CBRSubscribe.CBRService.Subscribe subscription=new CBRSubscribe.CBRService.Subscribe();
subscription.NotifyTo=new CBRSubscribe.CBRService.EndpointReferenceType();
subscription.NotifyTo.Address=new CBRSubscribe.CBRService.AttributedURI();
subscription.NotifyTo.Address.Value=notifyAddress;
subscription.Filter=new CBRSubscribe.CBRService.MessagePredicateAssertion();
subscription.Filter.Value=subscriptionFilter;

CBRSubscribe.CBRService.Eventing objEventing=new CBRSubscribe.CBRService.Eventing (cbrServiceURL);
CBRSubscribe.CBRService.SubscribeResponse subscribeResponse=
new CBRSubscribe.CBRService.SubscribeResponse();
subscribeResponse=objEventing.SubscribeOp(subscription);

// sanity check the subscription results
bool result=true;
if (!subscribeResponse.Id.StartsWith("uuid:"))
result=false;
return result;
}
}
}

September 2005

Sun Mon Tue Wed Thu Fri Sat
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

Companies