Before starting my side project , I was mostly a Java adopter on back-end servers. Java is widely supported and have a large and active contributing community (to its core via the Java Community Process (JCP)  or to 3rd party libraries).
Once I decided to go with GAE, I invested a bit in improving my knowledge of Python , for example by looking at the WSGI specification  and at Django . I have been impressed about the integration done by GAE people, about how easy it is to program complex steps in very few lines! My favorite part is the main function to dispatching events:
# -*- coding: utf-8 -*- # Handlers ... # Dispatcher application = webapp.WSGIApplication( [ ('/API/requests', RequestList), (r'^/API/requests/(.+)$', Request), ], debug=True ) def main(): run_wsgi_app(application) if __name__ == "__main__": main()
Implementing a REST API, the
get(self)to return selected resources, and
put(self)to create the proposed resource. The
get(self, key)for the identified resource retrieval,
post(self, key)to update the identified resource, and
delete(self, key)to delete the identified resource.
In the J2EE world, with the
/requestsURLs to a servlet (as done in the
app.yamlfile), the servlet code will have to get the URI (with
HttpServletRequest.getPathInfo()) and will have to parse it in order to detect the possible request identifier and the possible version number. IMO, Python offers slicker interface.
Another example is the support of the JPA and the JDO  specifications: few annotations decorating the Data Transfer Object (DTO) class definitions allow GAE/J to deal with the persistence layer (i.e. BigTable). Compared with the Python model definitions, the getters and setters plus the annotations seem overkill, but are necessary.
With Python allowing to rely on a more compact code, why would I switch to Java?
- Even if I gave directions on how to test GAE/P applications , I should admit testing GAE/J code is easier: JUnit is de facto standard copied by many frameworks, and JCoverage is the tool helping to determine the quality of these unit tests. While working on an open source project, with possibly contributors from various horizons, relying on a strong testing infrastructure is a top priority. It is then possible I will go over the Java tradeoff in a near future...
- New features and an early look at Java for App Engine on Google official blog and Seriously this time, the new language on App Engine: Java™ of Google App Engine Blog.
- Announcement in preparation this time.
- Java history on Wikipedia, on Sun microsystems website, on IBM developerWorks website; site of the Java Community Process.
- Key components of GAE/P: Python, Django and its template language, WSGI
- Description of standards supported on GAE/J: Standards-based Persistence For Java™ Apps On Google App Engine.
- Automatic Testing of GAE Applications from the series Web Application on Resources in the Cloud.
- Hand me the Kool-Aid :-) by App Engine Fan.