SSB Wrapper Class

Paul Murphy pointed out a SSB wrapper class that ships as part of the integrated storefront sample that ships with SQL 2005. It’s a bit tricky to install, so I refer you to Paul’s blog for instructions. (you have to install the sample installer) The wrapper class is in a file called ServiceBroker.cs and supports the following operations:

  • Get Conversation Group
  • Begin a Dialog
  • Begin a Dialog (with related conversation)
  • Send a Message
  • Receive a Message
  • Receive all messages from a conversation group
  • End a Dialog

If you’re not sure what dialogs and conversation groups are, I’ll be blogging about them in the coming weeks.

Booch on DSLs (Round 3)

Steve Cook responded to Grady Booch’s latest comments on software factories and DSLs, which was in turn a response to an entry by Alan Wills. It’s obvious that Booch is never going to agree with the DSL approach, but there are a couple of fascinating elements of the exchange.

First off is Microsoft’s “rejection” of UML, which is just plain FUD. I’m behind on news reading (as usual) but I was clued into this conversation by a post on TSS.com that linked to Booch’s blog and read “Grady Booch explains why he disagrees with Microsoft’s rejection of the UML in favor of proprietary domain-specific languages.” Not exactly priming the pump for intelligent discourse on the subject. As Alan and Steve both point out, we’re not rejecting UML. UML is a tool, and like all tools it has things it’s good at and things it’s not good at. We’re talking about using DSLs for things UML is not good at.

The next is Common Semantics. Every time he posts on DSLs, Booch mentions something about “covering the same semantic ground as the UML”. I promised Dan in my comments that I would summarize this argument “in simple English” and I never got around to it. The term semantics simply means “meaning”. For example, in C#, the keyword “class” always means the same thing – it has what Steve pointed out is “objective semantics”. Obviously, the word “class” has widely varying semantics in common use – when a high school senior cuts class he’s not copying an object definition to the clipboard. But within the realm of C#, the word “class” has a well understood and precise meaning – it’s so precise that the C# compiler can tell you if you use it incorrectly.

So when Booch writes about a “common semantic model”, I take that to mean that he thinks there’s a core set of well-defined concepts that all languages build on. And if that’s what he means, I imagine he assumes all the interesting concepts are already defined by UML. I think that’s where the primary disagreement lies – we don’t think any one language can provide all the possible concepts needed for all programming domains. A language for developing a web app page flow will be built on very different semantic concepts that a language for developing telephone billing systems. Trying to build both of them on top of the same set of concepts is like putting a square peg in a round hole.

Furthermore, even if you wanted to build on a common set of concepts, it’s not clear if UML provides a precisely defined set of concepts to build on. Obviously, Booch thinks it does, but there certainly isn’t agreement in the industry. Steve refers to UML as having “cognitive semantics”, which means there is no one objective definition for a specific element of UML. For example, in covering Aggregation and Composition, Fowler refers to UML’s white diamond aggregation as a “modeling placebo” and having “no standard meanings”. When there’s no standard objective meaning, then each person brings their own experience and reason in order to formulate their understanding – hence the term “cognitive”. Of course, the chance that any two people will reach the same understanding via cognitive reasoning is slim to none – there’s just too much room for personal interpretation. Because of this lack of objective precision, Steve describes the resulting discussion of UML and its semantics as “political, rather than objective” which IMO is not a good foundation to build your own language on.

In the end, the proof is in the pudding. Personally, I think Booch looks at UML with rose-colored glasses and that his beliefs don’t mesh with reality. (Of course, our DSL modeling tools and software factories approach isn’t far enough along yet to test against reality.) How about your experience? What success or failure have you had with UML?

Be There or Be Square

PDC 2005. ’nuff said.

TechEd 2005 Call for Papers

BTW, speaking of TechEd 2005, we’re currently inviting potential presenters to submit proposals to speak. Norman is taking over ownership of the Architecture track, but I’m still responsible for technical content and community for the track. If you’re interested in presenting at TechEd on any topic, head over to the TechEd 2005 Call For Papers website. Proposals are due by the end of December.

Starting in on SQL Service Broker

Since Norman joined the team a few months ago, I’m no longer in firefighter mode. For about six months my team was short a marketing manager and I ended up picking up a bunch of extra duties. For example, I took over as TechEd architect track owner when out previous marketing manager left. I don’t know much about marketing, but I guess I did OK – I received a Marketing Impact Award for my work on TechEd. However, I’m very happy to have handed those marketing responsibilities back to their rightful owner. Even still, Norman is trying to educate me about marketing. He made me read the first two chapters of Building Strong Brands by David Aaker. I actually got thru the first three chapters before borrowing Birth of the Chaordic Age by Dee Hock from my father at Thanksgiving.

You would think that I would now have more time for blogging, but alas that has not been the case. When I was firefighting, I had no time for planning. Now, of course, I do. So between planning and thanksgiving vacation I’ve just been too busy to blog much.

One thing I’m getting into recently is SQL Service Broker. I’m working on an interesting community project that is building on top of SSB. Luckily, one of the primary architects of SSB sits down the hall from me. Of course, not everyone is so lucky, so watch this space as I dig deeper on SSB. A good place to start is the SSB First Look article. In order to start getting a handle on SSB, I ported the Hello World example from that article from T-SQL to C#. It’s a bit tricky, as there is no SSB-specific framework – you just use SqlCommand to execute SSB commands like BEGIN DIALOG and RECEIVE – but otherwise it’s pretty straightforward. My sample also demonstrates using the new SQL Management Objects to create databases and SSB related objects (message types, contracts, queues and services). Here’s the code – enjoy.