Tapestry Training -- From The Source

Let me help you get your team up to speed in Tapestry ... fast. Visit howardlewisship.com for details on training, mentoring and support!

Wednesday, November 26, 2003

HiveMind still in transition

The IP issue for HiveMind is still unresolved which is really irking me. I know its just a matter or priorities and schedules inside WebCT, but I don't want to miss the target of opportunity. A number of people are getting very interested in HiveMind ... including the Scott Weaver (whose working on Jetspeed and Pluto). And others within the Jakarta community (who I'll let speak for themselves).

Based on some other posts going around, I think it's likely that HiveMind can become a Jakarta project, once the IP is fixed. The basic sentiment is that mandating that it move over to Avalon is effectively choosing sides, something Jakarta doesn't do. I'm still analyzing my own feelings about this ... intellectually, it may make sense to move the code into Avalon, assuming it will fit. But at another level, I'm very nervous about dilluting the code, and the focus, of HiveMind into Avalon, given that there are many fundamental differences in coding and design style. For me, joining Avalon and introducing HiveMind features into it represents a much higher level of effort. I'd prefer to present HiveMind as-is, and let the Avalon guys pull out what makes sense for Avalon (and the Spring guys, and the Pico guys).

It's kind of like fantasy sports cars. HiveMind is my own personal Ferrari. Avalon is, perhaps, a Diablo. At a high enough level, a Ferrari is interchangeble with a Diablo: four wheels, lots of power, no trunk space. Yet the subtle cues provided by a Ferrari (the sound of that engine, the shape of the hood, the color of the paint) excite me in a way that a Diablo does not ... and a Diablo fan may not be engaged by a Ferrari.

As I've said elsewhere, HiveMind represents my personal "hot points", the issues that are most important to me, reflecting my personal approach to coding and design style. Most of what's in HiveMind exists, in a different mix, inside JMX or Avalon or Keel, but in a different mix, that doesn't give off those same subtle cues that mean so much to me. For others developers, Avalon or Keel or Pico may provide the right set of cues, may be the most natural approach to getting work done. For myself, or those who have very similar sets of hot button issues, the others are just not quite enough, and HiveMind is the way to go.

Tuesday, November 18, 2003

Who will take charge of these people?

Herein being a factual account of the events of Monday, November 17th, 2003 involving myself, Howard M. Lewis Ship, my wife Suzanne, and Mr. Craig McClanahan in and about the "Star Trek: The Experience" attraction at the Hilton Hotel in Las Vegas, Nevada.

So here at ApacheCon, part of the point is to meet people you otherwise only know by an e-mail address or a bio on a web page. One of those people being my <sarchasm>bitter blood-rival and mortal enemy</sarchasm> Craig McClanahan, creator of Struts and lead developer of JSF. Craig was manning Sun's booth and passing out CD's with NetBeans on it and we chatted for a few minutes.

Flash forward to the reception at the end of the day, and Suzy and I found ourselves in line for the appetizer buffer with Craig again; later we ran into him again while talking with Justyna Horwat (another member of the JSF team) about mutual friend Greg Burd. Craig and I chatted a bit about HiveMind and such and then the three of us (including Suzanne) decided to head over to Star Trek: The Experience.

Perhaps we were inspired by the entertainers hired for the reception: a couple of Klingons, a Ferengi and a Borg. They stayed well in character, though I almost got a reaction out of the Borg when I asked him "what's it like to work for Microsoft?"

If you haven't heard of "The Experience", it's a hoot. It's a portion of the casino dressed up to look like a Star Trek set ... lattice-works of aluminum and chrome, lasers and neon. This leads back to sizable museum of Star Trek props. Overhead are large models (about the size of a good SUV) of Star Trek ships: Voyager, Enterprise-A and Enterprise-D and a Bird of Prey. Keeping in character, the props are labeled as historical artifacts, often attributed to entities such as the Klingon National Archives, Vulcan Science Academy and so forth.

The props, especially those from the classic series, provoke a strange reaction: a wave of nostalgia, and simultaneous incredulity at how cheap and cheezey the props actually are (even those props from the more recent series). Craig is a secret (or not so secret) fan, and was right in there with the references and trivia (his favorite race: Cardassians).

However, the heart of the attraction is the The Experience itself. A group of about thirty are led into an antechamber and lined up in front of doors leading to the motion ride ... except that's not what happens. Instead, the whole lot of us are beamed across time onto the Enterprise (a very fun effect involving wind, twinkling lights, darkness and an elevator). This is where this blog's title comes in: a crew member asks the question of the ride operators; from there, we're escorted down a a realistic Enterprise corridor to the bridge, find out about the ride's "plot", ride an out-of-control turbolift and, eventually, end up in a shuttle craft (the motion ride itself).

The ride is typical motion-ride fare, again enhanced by the theme and environment. It is also one of the more violent (in terms of large, jarring motion) rides of this type I've been on, especially if you sit towards the back.

All-in-all, quite a bit of fun, and quite lovingly put together. It uses seven or eight live actors (and some interactions with pre-recorded segments featuring Riker, LaForge and Picard), so it is somewhat involved. I kind of wished more small children had been in the mix, because all of us adults could only enjoy it somewhat sheepishly. At the end of the ride, after they try to shill Star Trek credit cards, we're let out into a gift shop (shades of Disney) and "Quark's Lounge". We bought a couple of drinks and deserts ... all with Star Trek punny names or references. I had the Tranya (if you visit The Experience, I hope you will relish it as much as I) but could as easily have ordered a "James Tea Kirk" or a "Wrap of Khan".

Entry to The Experience allows you to visit the museum and ride The Experience as many times as you like. We decided to finish checking out the prop displays (we had been interrupted earlier when we chose to ride The Experience) and it was nearly closing time for the museum. We ended up right at the entrance to the ride, just as they were ready to run it for the last time. And the three of us were the only ones in line.

I lobbied that we should just take off: it would just be the three of us, the ride is a bit hokey, and I felt guilty that they should have to run the whole thing just for us, instead of going home early. All three of us hemmed and hawed a bit and, suddenly, we realized that we did want to ride it again ... and then the chucking started. Which turned into giggling. Which led to uncontrolled bouts of laughter. And it was infectous ... several of the "crew members" couldn't keep a straight face when they saw the three of us. The line "Who will take charge of these people?" was just hilarious when the actors outnumbered the audience (and the audience was so incapcitated with laughter that a sleepy kitten could have taken charge of us). We were making jokes about the Klingons using nitrous oxide on us ... I also made a lame joke about hebephrenic particles that no one got (I had been drinking, in my defense).

The actors rotate through different roles, which is nice for them; I suspect working at The Experience would be totally unbearable otherwise. They tried to stick to their lines; for example, asking us to move forward into the bridge to make room (even though there was just the three of us). The second trip let us see a lot of detail you can miss on a single pass: for example, the comm panels at the back of the bridge are live ... initially they show scanner data about the three Klingon ships, then switch to a bio of the Klingon captain when he hails the Enterprise. They're also helpful to lean on when you can stand any more from laughing too hard (just don't let the bridge crew see you).

By the end of our second pass through The Experience, I was having trouble breathing from laughing too hard for too long. My throat was raw and I felt physically beat up. I can't promise you that you'll enjoy it nearly as much as we did (some experiences simply can't be recreated) but it might just be worth a visit, if you are a Trek fan (and can stomach the $30 entrance fee).

Monday, November 17, 2003

ApacheCon: XMLBeans

I'm sitting in the middle of a very interesting session on XMLBeans, a very powerful ASF project (currently in incubation). Very interesting; they really grok the XML Schema thing, but are very pragmatic. This session left me with a really good feeling about this framework, as opposed to everything I've seen about JAXB, which only seemed good in theory.

It keep both a (cursor-based) DOM model, and a interface-based Java model of the same document, which is kept synchronized. Don't quite know how to explain this, but a document looks like a standard DOM, but can also be treated as a tree of strongly-typed Java objects (represented as interfaces); the Java interfaces are created from an XML schema document (using a command line tool).

There seems to be a lot of magic in there; when you create new nodes on the Java tree it usually can figure out, automatically, where to put the nodes on the DOM tree ... based on the XML schema.

They seem to follow a good, pragmatic split in their approach to the API; convienience methods for doing things the way you usually want to, and formal methods to give you total control.

This has definately bumped up on my list of technologies to check out. I can't imagine that it's as efficient as SAX and Digester, and it's based on XML schema (for good or ill).

It appears to behave reasonably well, even when the input document is damaged. Validation is optional. They've also done some difficult, interesting things to maximize speed ... for instance, the XML schema is "compiled" into a binary metadata format (based on the Java class format). So you get the benefits of Schema without the cost of parsing those giant schema documents. It's 100% compatible with 100% of W3C schema. They also claim performance about the same as Xerces and much faster than JAXB R1.

Howard Lewis Ship 1.1: Now with ASF Membership!

A side note ... just found out that as part of a mass election here at ApacheCon, the ASF membership voted in 13 (?) new members, including myself. Talking with some involved parties, I learned that there was a good deal of concern ove the current HiveMind IP fiasco (see lots of notes in this blog). Apparently, in this one area, I was branded "incompetent but non-hostile" (or something to that effect).

How does ASF membership affect me? I don't know ... I'm now privy to more ASF discussions (how to keep up?) and, theoretically, have more of a say in setting ASF direction. What direction is that? I have to start figuring out.

ApacheCon presentation post-mortem

Just thought I'd say that the feedback on the presentation was very, very good. I had some time troubles (I've never done any kind of presentation with a fixed time limit before), and I had minor slide issues (the HTML wasn't very readable for the back half of the room) ... but people were involved, interested, taking notes and very receptive. And I forgot to distribute business cards! Why am I here again?

Of course, I can talk about Tapestry for days at a time, not just the minutes I had. And my rates are very reasonable.

Next step is to do something I should have done even before arriving in Vegas ... setting up a Tapestry BOF and/or "guru" sessions. That'll give me a chance to show of Spindle ... which due to a mixup on my part, barely got mentioned during the session (somehow I put the Spindle slide after Q&A, not before, so I never displayed it).

At this moment, I'm sitting on the floor outside Apollo 1 (the venue for the "State of Geronimo" session). It's packed and we arrived late. Andrew Oliver is next to me, IRCing about Tapestry. No, Tapestry is not Cocoon, thank you very much. Andrew was worred that if we walked in together, I would be "guilty" by association (he considers himself the "black sheep" of the ASF community) ... instead, we're not even inside, so I guess I'm in the clear.

There's probably more computing power walking around here in laptop and PDA form than existed twenty years ago.

Sunday, November 16, 2003

On-site at ApacheCon

We'll, I'm sitting in the lounge at ApacheCon working on The Book.

I did a run through of my presentation, and it comes in at about 40 minutes --- that's as long as I can allow for, since it leaves only ten minutes for Q&A. I think I'll perhaps trim just a little, and maybe have time to at least show Spindle in action. I snuck a Spindle slide into the presentation.

Which brings up lies. My bio says that I'm a member of the Jakarta PMC but it turns out that I'm not ... my "election" was not run properly or recorded properly. I believe its being redone.

My session synopsis claims I'll be creating a web application live on stage using Spindle, which isn't accurate either ... at best, I'll have a moment to show off a couple of Spindle features.

Updates tomorrow ... do I knock their socks off, or score a yawn?

Don't tell anyone, but they comp'ed Suzy (my wife) a pass. Apparently, they want a few more women in the audience. Not that she's technical (except perhaps by osmosis). Her badge says "Tapestry Tart" (off of someone's blog entry I can't seem to find). She was excited that she ran into some random ApacheCon attendee who knew about Tapestry, using words like "next big thing". Then she lost a chunk of cash at the blackjack tables.

I'm not sure who'se supposed to be here that I should know. Drew Davidson had mentioned possibly getting together, and I forget if Erik Hatcher was coming or not. Andrew Oliver is around here somewhere I suspect; I'll be attending his Poi session.

Suzy and I are going to catch Zumanity (the newest Circe Du Soleil show) Tuesday night. Advertising works ... hadn't even heard about this show until we were waiting for our luggage at the airport. Expensive, but probably worth it; certainly more so than any of the other pandering t-and-a shows in this bizarre town. Vegas is just plain wierd.

Thursday, November 13, 2003

The Occasional Blogger chimes in

Glen Stampoultzis has posted a few comments about Tapestry in his Blog, The Occasional Blogger.

I do feel everyone's pain with respect to the documentation not being ready yet. I'm just about over the hump with the work for Manning (not to mention the trip to ApacheCon), and light is visible at the end of the tunnel.

This was a trap I dilligently worked to avoid with HiveMind, where I've worked very hard to have useful documentation kept up-to date with the actual code.

Temporary Location for HiveMind Docs

I've put up a temporary, limited version of the HiveMind documentation at:

This doesn't include JavaDoc, the clover code coverage report (> 90%, btw) or source xref ... but it should be enough to whet peoples curiosity until the full site can go live again (once WebCT makes the software grant).

Wednesday, November 12, 2003

ServiceSide picks up the HiveMind Proposal

This was pretty unexpected. The ServerSide's Dion posted this article: HiveMind Proposal to Join Apache Jakarta Project

Seriously; I'm perplexed by the level of interest in HiveMind. Don't get me wrong ... I like to have my ego stroked and all, and I think HiveMind will become a huge success, wherever it is that it ends up (Avalon, Jakarta, or whatever).

Still, people must be hungry for something, they are looking for the way. We want our objects back, we're sick of feeding our little chunks of code into the great J2EE appserver machine.

Once everything gets straightened out with HiveMind I will start to market it ... it's just that it is somehow marketting itself already. The only publicizing I've done is in this blog, and in that ServerSide discussion of Picocontainer (and, to be sure, I did not bring it up myself!).

Well, we'll see where we are when we get back from ApacheCon!

Tuesday, November 11, 2003

Proposal for HiveMind Project

(0) Rationale

HiveMind is a simple framework for creating pluggable, configurable, reusable services.

Simple: HiveMind is a way to create a network of services in terms of Java interfaces and classes; it cherry picks the most useful ideas from Service Oriented Architectures such as J2EE, JMX and SOAP, but removes the aspects that are typically overkill for most applications, such as service remoteability and language neutrality. HiveMind creates a natural network of related services and configuration data, all operating within a single JVM.

Pluggable: HiveMind enforces a complete separation of service definition and implementation. This is manifested by a division of services into an interface definition and a service implementation as well as a split between defining a service (as part of a HiveMind module) and providing the implementation of that service (potentially, in a different module).

Configurable: HiveMind integrates a service oriented architecture to a sophisticated configuration architecture; the configuration architecture is adapted from the Eclipse plug-in model, wherein modules may define configuration extension points and multiple modules may provide contributions to those extension points.

Reusable: HiveMind is a framework and container, but not an application. The HiveMind framework and the services it provides may be easily combined with application-specific services and configurations for use in disparate applications.

The API for HiveMind allows thread-safe, easy access to services and configurations with a minimal amount of code. The value-add for HiveMind is not just runtime flexibility: it is overall developer productivity. HiveMind systems will entail less code; key functionality that is frequently an after-thought, such as parsing of XML configuration files, logging of method invocations, and lazy creation of services, is handled by the HiveMind framework in a consistent, robust, and well-documented manner.

HiveMind fits into an area that partially overlaps the Apache Avalon project, with significant differences. HiveMind's concept of a distributed configuration is unique among the available service microkernels (Avalon, Keel, Spring, Picocontainer, etc.). Avalon is firmly rooted in a type-1 inversion of control pattern (whereby services must explicitly, in code, resolve dependencies between each other using a lookup pattern similar to JNDI). HiveMind uses a mix of type-2 and type-3 IoC, whereby the framework (acting as container) creates connections between services by setting properties of the services (type-2) or making use of particular constructors for the services (type-3).

HiveMind represents a generous donation of code to the ASF by WebCT (http://www.webct.com). HiveMind originated from internal requirements for a flexible, loosely-coupled configuration management and services framework for WebCT's industry-leading flagship enterprise e-learning product, Vista. Several individuals in WebCT's research and development team in addition to Mr. Howard Lewis Ship contributed to the requirements and concepts behind HiveMind's current set of functionality including Martin Bayly, Diane Bennett, Bill Bilic, Michael Kerr, Prashant Nayak, Bill Richard and Ajay Sharda. HiveMind is already in use as a significant part of Vista.

(1) Scope of the package

The package shall entail a core framework JAR (containing essential classes and services), a standard library JAR (containing generically useful services), along with ancillary artifacts such as Maven plug-ins and, of course, documentation, all distributed under the Apache Software License.

(1.1) Interaction with other packages

HiveMind has dependencies on several standard commons packages, including: commons-lang, commons-beanutils, commons-collections and commons-logging.

HiveMind makes use of the Javassist bytecode generation library, which is available under the MPL (Mozilla public license).

(2) Identify the initial source for the package

The initial code base has been developed by Howard M. Lewis Ship within the Jakarta Commons incubator.


(2.1) Identify the base name for the package


Note: the current code base reflects an alternate package name, org.apache.commons.hivemind. Subsequent research has shown that HiveMind is not a suitable candidate for the Jakarta Commons. The existing code base will be migrated to the new package during the transition out of the sandbox.

(2.2) Identify the coding conventions for this package

The code follows a modified version of Sun's standard coding conventions, with the following stylistic changes:

  • instance variables are prefixed with an underscore
  • a newline is inserted before all braces

(3) Identify any Jakarta resources to be created

(3.1) mailing lists

hivemind-user@jakarta.apache.org -- User discussions
hivemind-dev@jakarta.apache.org -- Developer discussions and CVS update notifications

(3.2) CVS repositories

The package will use a root branch of the hivemind CVS repository (to be created).

(3.3) Bugzilla

The package should be listed as top level component, "HiveMind".

(4) Identify the initial set of committers to be listed in the Status File.

Howard M. Lewis Ship <hlship@apache.org>
Prashant Nayak <prashant.nayak@webct.com>
Martin Bayly <martin.bayly@webct.com>
Christian Essl <christianessl@yahoo.de>
Harish Krishnaswamy <hkrishnaswamy@comcast.net>
Knut Wannheden <knut.wannheden@paranor.ch>

This list represents the most active HiveMind participants within WebCT and on the Jakarta Commons Developer mailing list. Notably, Mr.s Essl, Krishnaswamy and Wannheden, among others, have already been actively mentoring other interested users on the mailing list in how to use HiveMind as well as contributing design ideas and patches to the framework itself.

Get this in your toolbox

I mostly try to stick to open-source other otherwise free tools ... I'm just cheap perhaps. Or I want to be able to look under the covers. But every once and a whilie, there's a reasonably priced tool so useful you have to get it.

For about $20, Blazing Tools Software's Instance Source is completly worth it.

It's a plugin for Internet Explorer that provides a real view-source window that is so chock-full of features I already can't live without it. Here's a few:

  • Colorized source as sent from the server
  • Colorized source as currently in browser (i.e., accounting for document.write(), etc.)
  • Frame aware -- different frames / framesets in different tabs
  • Element under cursor -- point the cursor at some text and see the HTML for it (yow!)
  • Selected text -- select some text, see HTML for selection

Basically, this is what I've always needed in my browser to help me debug HTML ... no more having to save HTML to the desktop to disect them, no more guessing what the HTML really looks like, no more frame pain. This is just too cool.

Monday, November 10, 2003

HiveMind Proposal on Tuesday

The proposal for HiveMind should be public tomorrow, Tuesday Nov 11th 2003. It'll be coming out of WebCT, from good buddy Prashant. This is a relief; I was starting to think in terms of total rewrite ... and even that wouldn't necessarily eliminate the intellectual property issues. This will. It's highly likely that HiveMind will find a home somewhere in Jakarta; the worst possible case is that WebCT will sign the grant and HiveMind will end up as a Tapestry sub-project. I'd actually prefer HiveMind to end up on its own, seperate from Tapestry.

Friday, November 07, 2003

Another great Tapestry quote

This one is from Jason Cox and showed up in the Tapestry user mailing list with the title Nothing short of beautiful :
At 11am this morning, the first version of our Web Portal prototype was completed. I'm sad to say that this is an Intranet project and so won't be usable for marketing Tapestry and for confidentiality reasons I cannot even name the company at this time. However, it is a very large company with an international presence, and the portal I am developing is going to be used mostly by managers and up to senior level executives.

I just want to give a big thanks to the members of this list, which I have been reading constantly.

On overview, though I doubt they will be examples of Tapestry best practices, the templates, specifications, and java code has all been very elegant. Not because I am such a stellar developer, but because Tapestry lends itself so well to MVC design. Once I got it in my head to fully implement all aspects of the portal in Tapestry, it took me about 3 days. There was far less effort than I've had using Struts or the custom framework we had at my last job.

The only low point is that I am not convinced that I particularly like how Tapestry handles Javascript. It just slams it all into the page. No cached references to .js files like you typically have in standard HTML and even JSP's.

On the other hand, I was able to perform some neat little tricks that would have been slightly more cumbersome using traditonal JSP development, including dynamic comments that only appear when certain conditions occur. Realistically, they're just there for reference if someone messes with the HTML template, but I didn't want them to actually appear on the page, so I nested them inside the error blocks.

Implementing my own Border web component was incredibly elegant, and if I would just take the time to properly 'HTMLize' it I can actually hand it off to a web designer in the future. Though I am still looking at dynamic menu generation and some other features that will make it less static. Not a high priority right now. What's the most amazing is that it actually works seamlessly with the ridiculously obtuse javascript files that most of our Intranet sites use to build their header and footer.

Now the next challenge is implementing a content management system that will also use Tapestry as its outward facing framework.

Tapestry momentum building

It's pretty clear that the momentum behind Tapestry is building; I just can't keep up with the flow of mail on the user list. Fortunately, the other heavy hitters (MindBridge, David, Erik and Harish, primarily) are keeping up. The first chapter in the book is being proofed right now; I suspect it will actually be available via MEAP next week-ish and the book will be in stores January or February; not so bad, considering the amount of last-minute rewrites. I suspect Tapestry will explode once that's available.

I know the pain, currently, of doing Struts development. I did some at WebCT, but I'm primarily doing UI work for NLG. It Struts, 1.1, Tiles, Tomcat, JBoss. Session facade layer to entity EJBs. Heavy use of XDoclet for the EJBs, for the Strut's Actions and servlet tags, etc.

However, any time I go to do anything, it feels like I'm having to juggle through so many different files. Some obvious things, such as having one Action forward to another Action (the second Action exists to get data from the facade and push into request attributes for use by the JSP) were just painful; I ended up creating a global forward for that since I had several different Actions that had to reference the data-loading Action.

Then there's the problem of figuring out how to reference actions from other actions, or from JSPs. Leading slash or no leading slash? ".do" suffix or no suffix? Global forward or local forward? Seems like this should be easy to do, but I had to do lots of fiddling around.

I don't like Dynaforms but the team standardized on them. You are very limited in terms of what data can be stored in a dynamform. Seems like it should automatically be able to convert to any types that takes a single string constructor parameter, but no ... very much hard coded (I peeked at the code).

Feedback: One of the four "pillars" of Tapestry (with Simplicity, Efficiency and Consistency). Boy do I miss Tapestry exception reporting! When things go wrong, I have no clue ... I just always have to run JBoss with the debugger and always have to set lots of break points. I ended up adding a custom JSP tag to our pages to display servlet request parameters and attributes and session attributes (a limited form of what you see in the Workbench) and that helps, a little.

Erik Hatcher couldn't believe I'd even consider a job developing Struts ... but, hey, I'm building up a war chest here while I start lining up the serious Tapestry opportunities.

HiveMind in transition

HiveMind is causing a bit of commotion in ASF-land ... the whole issue of who owns the code is causing grief. In the short term, the Jakarta PMC has taken down the HiveMind CVS repository and the HiveMind site is probably next. Can't blame them (and I is them ... I'm a Jakarta PMC member myself); the code shouldn't be there, in light of there being any ambiguity about code ownership.

So, HiveMind will be on a short hiatus until such time as WebCT grants the code and submits the proposal.

The great thing about being an independent consultant is that these issues go away; especially if I'm contracted to teach Tapestry courses, the moment I'm off the clock all ambiguity about IP ownership goes away. In the future, I'll make sure that any work I do has special exceptions for spinning off code into open-source land.

Saturday, November 01, 2003

HiveMind proposal almost there

A proposal to promote HiveMind up to a top-level Jakarta project is just about ready. A draft of the proposal has been bouncing back and forth between me and WebCT.

I did some reading and thinking on the plane to and from Virginia; when I get a chance, I have some good ideas about how to integrate HiveMind and JMX, to support things like:

  • Representing the MBeanServer instance as a HiveMind service
  • Representing standard MBeans as HiveMind services (using the MBean interface as the service interface)
  • Creating a performance monitoring interceptor that records invocation counts and times in an MBean
We'll see what other ideas come forth from this.

I've also been thinking of extending some of the event notifications inside HiveMind (thread cleanup and registry shutdown, specifically) to provide "levels" used to provide a coarse level of invocation order. This would be an intermediate step towards real dependency tracking. For instance, during a registry shutdown, I'd like the following order to apply:

  • Disable all configuration item list proxies and discard configuration items
  • Disable all service proxies
  • Cleanup all services
Since objects are registered in the ShutdownCoordinatory using just the RegistryShutdownListener interface, there's no way to order the notifications without additional information. I see the interface for ShutdownCoordinator changing to: public void addRegistryShutdownListener(int level, RegistryShutdownListener l);

Something similar would be good for thread cleanup; I'd like to temporarily disable the threaded and pooled service proxies, invoke the cleanup method on the service implementations, then re-enable the proxies.

Shameless self-promotion

Now that I'm in the world of independent consulting, I can't pass up any chance for good, shameless self promotion, such as this recent posting to the Tapestry user mailing list:
First, apologies are in order to the tapestry-user list community.... we kidnapped Howard Lewis-Ship for a couple of days for onsite training taking him offline from answering questions on the list - please forgive us :) We, in the Darden Solutions Group within Darden Graduate Business School at the University of Virginia, decided to switch from Struts to Tapestry a few months ago for our next project. Since then we've been an early previewer of Howard's wonderful Tapestry in Action book, and working our way through our first passes at implementing a Tapestry application. We had built enough to know what we didn't know and where we wanted a quick boost of insight.

Our mission is to develop a suite of applications in a short period of time. We brought Howard in for two days of onsite training to give us a kick start in the right direction and ask him detailed questions about implementation issues we've encountered. It started as a semi-formal presentation to introduce us to Tapestry and quickly took a custom tangent into the areas we were most interested in, like creating custom components, how parameters / properties / bindings work, how do to deal with form validation, and much more. Howard was adept at fielding our random questions. At no time did we stump him. He even very quickly picked up on our business use cases and even offered suggestions in that realm, unrelated to the gory Tapestry details we brought him in for.

Our team greatly appreciated having Howard's time and expertise. We have easily saved weeks of time learning this stuff the hard way, and given everyone a very quick boost into how Tapestry works and how to use it effectively and properly.

Everyone here knows that Tapestry can have a steeper learning curve than other less powerful frameworks. If your project has the same delivery timeframe as ours ("yesterday"), yet you want to do it right, I suggest you consider doing what we did and bring Mr. Lewis-Ship in for training.


That's Erik Hatcher, "the Ant guy", frequent speaker at No Fluff Just Stuff symposiums and all around great, well-connected, finger-on-the-pulse kind of guy.

I had a terrific time down in Virginia, it's a real rush to spend two whole days thinking on your feet. Everyone on the team was very complimentary about the presentation ... which just goes to show you how different things look from opposite sides of the podium. I was concerned that I was mumbling incoherently like an escaped mental patient, but that's not how I came off :-). It was very rewarding to see the connections get made inside people's heads. Of course, the first major questions hit all of Tapestry's dirty laundry: the awkwardness of component parameter directions, for instance. But part of open-source is that your dirty laundry it out for all to see, and that no project is ever finished.

We had a really fun time, with discussions of Tapestry and other technologies rolling out of the class room and out over lunch and dinner. It was a quick trip, but we made it out around Charlottesville thursday night, which has a very European-styled "mall" ... an open, wide, cobblestone walkway that extends several blocks and is filled with book stores, coffee bars and the like. Refreshingly, it doesn't seem gap-ified (didn't see a Starbucks or any other national chain). We also swung by the Gravity Lounge, a cool mix of Internet cafe, book store, and live performance stage. It also has an Art-O-Mat, from which I purchased some art for my wife--a wooden block with a kind of beat-style/kitch black cat. A good draw from the Art-O-Mat, since you never know what you'll get ... my wife just loves cats!

So far, that's two Tapestry consulting gigs this year ... one was way back in January for a company out in Los Angeles. Not so bad since I haven't been seeking these out, and have had to work around full-time jobs to accept the gigs. I haven't really started marketing myself since I pretty much have a full-time gig going for the next few months at NLG, but as that looks to wind down (probably late January) I can start trying to schedule out engagements for 2004.