The web is soaring, since Google announced
Java support on Google App Engine!
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...