With the upcoming release of Tapestry 5 I’ve decided to take the plunge and try out GWT. I’ve long been a Tapestry fan (I can’t stand the goto development style of Struts), but this latest version has left me a little wanting. In short:
- It’s changing dramatically again.
- The framework now magically invokes methods if they follow particular conventions.
- I hate method conventions. Intellij IDEA is really good at telling me all kinds of useful things. Method conventions bugger that up completely.
- Tapestry documentation has always been lacking, this magnifies the previous gripe by a factor of 100.
Once I realised the depth of my grumpiness I decided to re-evaluate the webapp landscape. Since I’m not interested in ruby/rails I decided to give GWT a whirl.
The GWT approach is different. You don’t develop a web application with lots of pages etc, you write Javascript application which you then embed in a given web page (I.e. a bit like embedding an Applet in a page). While it’s not a solution for generating websites, it’s great for developing web applications.
What’s more, you write your Javascript in Java. Sweet. I get everything Java gives me (well a fair bit anyway) like packages, interfaces and type safe refactoring etc.
Some of the good points are:
- The documentation is great. Well thought out and well written.
- The shell environment is wonderful. The best out of the box web development experience I’ve had yet.
- The client aspects of the application are written using standard client techniques. Observable models, reusable widgets, similar development approaches.
- My server is stateless.
Things that could be better:
- There’s no binding API. Life without binding sucks. There are apparently plans for one, but in the mean time it took me a week to migrate my Swing binding framework over to GWT.
- It would be nice if there was an easier way to add servlet context listeners and context parameters to the shell environment.
- Better documentation on writing compiler plugins would be nice.
Other than that, the combination of GWT in the browser and simple servlets using Guice on the backend has been a delight.