Google App Engine: Guestbook with Groovy Groovlets

People are getting ahead of themselves to try out their favorite piece of the Java ecosystem on the Google platform.
I figured that I also wanted to experience this pre-alpha-geek feeling :-)
I followed the guidelines to run Groovy appliccations on Google App Engine from glaforge and reimplemented the guestbook example from the Google Appengine SDK with Groovy Groovlets.
The result is here. Leave me a message ;-)
The backend classes (Greeting.java, PMF.java) were not changed (however it seems to be possible to datanucleusenhance classes written in Groovy and compiled with groovyc, see here).
I kicked out the two servlets and the jsp and replaced them with the following two Groovlets.
hello.goovy
import com.google.appengine.api.users.User import com.google.appengine.api.users.UserService import com.google.appengine.api.users.UserServiceFactory import javax.jdo.PersistenceManager import guestbook.PMF import guestbook.Greeting UserService userService = UserServiceFactory.getUserService() User u = userService.getCurrentUser() PersistenceManager pm = PMF.get().getPersistenceManager() String query = "select from " + Greeting.class.getName() + " order by date desc range 0,25" List<Greeting> greetings = (List<Greeting>) pm.newQuery(query).execute() html.html { head { title "Hello" link(type:"text/css", rel:"stylesheet", href:"/stylesheets/main.css") } body { div(class: "main"){ div ("Today is: ${new Date()}") if (u == null) { div(class:"login"){ a (href: userService.createLoginURL(request.getRequestURI()) , "Log in with your Google Account.") } } else { div(class:"login"){ span("Welcome ${u.nickname}. ") a (href: userService.createLogoutURL(request.getRequestURI()) , "Log out") } } p ("Leave me a message:") form(method: "POST", action: "/post.groovy"){ div(){ textarea(name: "content", rows: "3", cols: "60", "") } div(){ input(type: "submit", value: "Post") } } greetings.each{ def user = "anonymous" if(it.author != null) user = it.author div(class:"entry-header", "On ${it.date} ${user} wrote: ") div(class:"entry-body", "${it.content}") } } } }
post.groovy:
import com.google.appengine.api.users.User import com.google.appengine.api.users.UserService import com.google.appengine.api.users.UserServiceFactory import javax.jdo.PersistenceManager import guestbook.PMF import guestbook.Greeting UserService userService = UserServiceFactory.getUserService() User user = userService.getCurrentUser() String content = request.getParameter("content") Date date = new Date() Greeting greeting = new Greeting(user, content, date) PersistenceManager pm = PMF.get().getPersistenceManager() try { pm.makePersistent(greeting) } finally { pm.close() } response.sendRedirect("/hello.groovy")
This was my first take at Groovlets, so it might well be that things are not state of the art...