I've just left a meeting where the PM congratulated the team because the customer accepted a product release that was made with three weeks in advance of the original plan. First, thank to the developers' team. Second, thank to the good development process (people and process are always the important things, more than technology). Third, thank to libraries and software factory, including Maven, Spring, NetBeans, TestNG, Nexus, Hudson, Jira - with an explicit mention for Vaadin.

It's my first web project after a few years in which I've been primarily involved with destkop apps and applets. My customer too, just because it's doing stuff which couldn't be made with a web UI. This new project has got a simpler UI and the specific requirement of being a webapp, so it went that way. It's also my first business with Vaadin, which entered my radar a few years ago, but I got acquainted with only at the beginning of this year (not because it's hard, but because only recently I found some time for it). 

Vaadin makes you able to work exclusively with Java and automatically generates a UI running JavaScript, based on components from the Google Web Toolkit. You don't have to run code translators or such, you just program in regular Java, write regular Java tests, JavaScript is generated for you at runtime. A piece of cake. And JavaScript is how my customer and I like it: a bytecode to run in a VM, not a programming language.

You can use Vaadin in many ways. With Maven is pretty easy if you start with an archetype. Vaadin offers a number of model classes which can be used to design your application on. I drove a different design: abstract MVC with interfaces and default controllers, so you can test everything with JUnit / TestNG (*). Views are completely dummy objects, only mocked in tests. Then you have Vaadin UI components implementing them. In this way you have the additional benefit of not depending on a specific UI technology. Not that we don't trust Vaadin: it's version 6, with ten years of history. Not that we plan to change Vaadin: I don't see anything like it for the web. It's just that I consider a Good Practice to reduce dependencies on specific technologies as much as possible.

PS It's also the first time I'm using TestNG and Lombok with a business project. The former made our tests much better, the latter our code  terser. Thanks.


(*) You can see some examples about my way to MVC in a series of DZone posts - the first one being available, the next one coming soon.

 **** Edited to add:

At DZone they have just blogged about a book about Vaadin. I've just bought it.