Von Anfang an war es ein großer Wunsch der Entwicklergemeinde, dass neben Python auch Java als Hostsprache unterstützt wird. Vor kurzem wurde nun die Google App Engine für Java oder kurz GAE/J als "Early Look" veröffentlicht. Auch wenn die Zahl der Accounts zunächst auf 10.000 beschränkt ist, lässt sich dennoch mit dem SDK auf dem eigenen Rechner die Plattform testen.
Die Anwendungen werden als typische Java-Webanwendung auf der Plattform betrieben. Dazu stellt Google die Java Virtual Machine in der Version 6 zur Verfügung. Es empfiehlt sich also, ebenfalls unter dieser Version zu entwickeln, auch wenn die Version 5 genauso möglich wäre. Als Servlet Container wird Jetty eingesetzt – darüber dürften sich die Entwickler des Open Source Servlet Containers sicher gefreut haben. Die GAE/J unterstützt das Servlet-API in der Verison 2.4. Ebenfalls bereits vorhanden ist die JavaServer Pages Standard Tag Library (JSTL). Bis auf wenige Ausnahmen können im Deployment Descriptor (web.xml) die für Java-Webanwendungen typischen Konfigurationen vorgenommen werden (Welcome-File, Filter, Fehlerbehandlung, Taglib-Definitionen, Sicherheit und Authentifizierung, Sichere URLs, JSP- und Servlet-Mapping). Nicht unterstützt werden dagegen die Elemente load-on-startup, mime-mapping, distributable und run-at sowie die Definition von JNDI, EJB-Ressourcen. Damit ist schon im Deployment Descriptor eine wesentliche Anforderung an Webanwendungen auf der GAE vorgezeichnet: Es geht um eine möglichst schnelle Bearbeitung einzelner Requests. Tatsächlich ist die Dauer eines Requests beschränkt – er muss nach spätestens 30 Sekunden abgearbeitet sein. Der Zugriff auf die HTTP-Sitzung ist möglich, muss aber gesondert konfiguriert werden.
Im Hintergrund der Webanwendungen steht mit BigTable ein Datenspeicher zur Verfügung, der für verteilte Anwendungen optimiert ist. Dabei handelt es sich nicht um eine SQL-Datenbank, auf die man per JDBC zugreifen könnte, weshalb die Benutzung von Hibernate ausgeschlossen ist. Vielmehr ist es eine Map, in der Objekte abgelegt werden. Die Objekte können unterschiedliche Eigenschaften haben. Ein Datenbankschema muss nicht angegeben werden. Nichtsdestotrotz lassen sich aber die beiden Java-Persistenz-Mechanismen JDO und JPA benutzen. Implementiert wurden diese Standards durch DataNucleus. Um auf alle Funktionen des Datenspeichers zuzugreifen, steht aber auch ein Low-Level-API zur Verfügung. Um die Indexerstellung kümmert sich die Entwicklungsumgebung. Dem erfahrenen Entwickler wird aber auch die Möglichkeit geboten, in die Konfiguration der Indizes einzugreifen.
Neben dem Datenspeicher stehen weitere Services zur Verfügung:
- Mit Memcache lässt sich beispielsweise ein Zwischenspeicher für Datenbankabfragen umsetzen. Auch die Unterstützung der HTTP-Sitzungen macht von diesem Cache Gebrauch.
- Benötigt die Anwendung Zugriff auf andere Ressourcen im Web, kann URL Fetch benutzt werden.
- Der Versand von E-Mails erfolgt über den Mailservice. Als Absender muss entweder ein angemeldeter User (mit Google-Account) oder der Admin eingetragen sein.
- Einfache Bildbearbeitung ist mit dem Image-Service möglich.
- Wer auf eine eigene Implementierung der Benutzerverwaltung verzichten möchte, benutzt einfach den User-Service.
- Für Anwendungen, die Code zu bestimmten Zeiten ausführen möchten, steht eine Cron-basierte Lösung zur Verfügung.
Wenn es für einen der Services ein spezifiziertes Java-API gibt, stellt die GAE dafür auch ein zur jeweiligen Spezifikation passendes API zur Verfügung.
Natürlich beschäftigt viele Entwickler die Frage, ob das selbst bevorzugte Framework oder Toolkit auf der GAE/J läuft. In einem Forumsbeitrag wird aufgelistet, für welche Frameworks erste Tests erfolgreich verlaufen sind. Darunter z.B. die aktuellste Version von Grails. Es wird wohl nicht lange dauern, bis fast alle Entwicklerteams ihren Code dahingehend geprüft und ggf. aktualisiert haben, um problemlos auf der GAE zu laufen. Probleme entstehen meist dadurch, dass nicht sämtliche Klassen des JRE benutzt werden dürfen – eine Whitelist ist auf der Homepage der GAE/J zu finden.
Wer sich bei der Entdeckung der GAE/J lieber zurücklehnen möchte, kann sich auf YouTube ansehen, wie man ein einfaches Beispiel (ein Gästebuch) lokal erstellt und anschließend auf der GAE/J veröffentlicht. Für Eclipse-Anwender ist der Einstieg aber auch ohne dieses Video ganz einfach mit dem neuen Eclipse-Plug-in für die GAE/J möglich. Ein neues GAE-Projekt ist schnell erstellt und schon kann man das erste "Hallo Welt" lokal testen.
Wo ist der Haken? Eigentlich gibt es keinen. Im Gegensatz zu vielen anderen Cloud-Computing-Plattformen, ist der Einstieg immer kostenlos und die angebotenen Bandbreiten, CPU-Benutzungszeiten und der verfügbare Speicher reichen allemal für einfache Webanwendungen mit wenigen Nutzern aus.
Links & Literatur
- http://code.google.com/appengine
- http://www.mortbay.org/jetty/
- http://java.sun.com/products/jsp/jstl/
- http://www.datanucleus.org/
- http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine
- http://www.grails.org/
- http://www.youtube.com/watch?v=P3GT4-m_6RQ
- http://code.google.com/intl/de-DE/appengine/docs/java/tools/eclipse.html




