Straining the bath water (in search of lost babies)
Romain Guy's blog "Get to love web development" chronicles his growing love for the Wicket web component framework... and I must admit that I am very tempted to take the plunge... but my first reaction was to ask the obvious questions:
Tapestry's Howard Lewis Ship had a slightly different reaction:
"Wicket is looking to me like a mix of Tapestry and JSF. I've been giving a lot of thought to what a much better web framework would look like. Tapestry has the templates right (and everyone's been copying that) but internally, the component approach is too limited. I'm envisioning something closer to an AOP approach and may find time to work on a prototype someday."
Kudus to Howard for admitting that Tapestry isn't perfect... and for reminding all of us that "a much better web framework" is still a real possibility.
My cautionary note is that most innovations in web component frameworks seem to be throwing the baby out with the bathwater.
I'll explain what I think "the baby" is, but let me hasten to add that I don't want to single-out Wicket... the sounds of sloshing bath water are all around us.
Ruby on Rails sounds great... but they're not just throwing out the baby, they are throwing away the tub. Do we really have to flush Java down the drain to make web development "fun again"? (The folks on the Grails and Trails projects seem to be enjoying themselves.)
But I digress... What I really want to talk about is web components.
It's the Web Components (stupid)!
In his book Democratizing Innovation, Eric Von Hippel stresses that users want solutions that exactly meet their own needs (that's why Wicket and Ruby on Rails were created). Users needs are never exactly the same, so there is always going to be an incentive to innovate.
In the domain of Java web component frameworks, user innovation has resulted in (at least):
Each of these frameworks has some very nifty features, and each innovator "threw out some bath water" to realize their visions.
Unfortunately the innovators also threw out whole libraries of pre-existing web components. You can't use an Echo component in a Tapestry application. You can't use a Tapestry component in a JSF application. You can't use a JSF component in a Wicket application.
To be fair... with the exception of JSF, none of the web component frameworks set out to define standards for the web components themselves, and in many cases these frameworks were developed during overlapping time frames.
Innovation is a great thing, but the continuing innovation in Java web component frameworks is somewhat stifling innovation in Java web components (and in tool support for component based programming).
Consider AJAX as an example:
Google and a new acronym made AJAX sexy this year, and now every web component framework that I am familiar with is scrambling to support its features.
Itâ€™s wonderful that we live in a world where Wickets and Rubies get a chance to compete... but at some point we need to cast a few things in stone in order to move on and innovate in other areas. Agreeing to support "standard" web components would constrain framework authors, but it would empower a whole new group of innovators.
Kudus to Wicket's creators for creating a loveable framework (I trust Romain's instincts on this one), but you will really win my praise if you figure out how to utilize JSF components. It's not too late to rescue a few babies ;-)