Posts tonen met het label GAE. Alle posts tonen
Posts tonen met het label GAE. Alle posts tonen

zondag 25 april 2010

GAE & Tapestry

Applicaties die moeten draaien in de Google App Engine kun je ontwikkelen in Eclipse en de door Google ontwikkelde plugin. Het maken en deployen van een applicatie is daarmee nog simpeler dan het genereren van een war-file voor Tomcat. Met een druk op de deploy knop wordt je applicatie online gezet.

Als eerste GAE projectje wilde ik een Hello World uit het Tapestry (een framework van Apache) project in GAE deployen. De vraag hierachter is hoe eenvoudig het is om een bestaand framework in de cloud te draaien.

Zoiets begint natuurlijk met even Googlen en de eerste hit is een tutorial hoe je tapestry 5.1 in de App Engine kunt draaien. Helaas werkte het niet (meer) zo simpel omdat een van de XML parsers die Tapestry gebruikt niet (meer) is goedgekeurd door Google. Er waren volgens andere blogs enkele hacks nodig om het aan de praat te krijgen, maar helaas leek ook dat niet het verschil te maken. (Het kan zijn dat ik iets over het hoofd zag.)

Op weer andere blogs las ik dat de nieuwe Tapestry 5.2 wel in GAE kon draaien. En inderdaad, de foutmelding zag er nu ineens anders uit. Het duurde nog even voordat ik ondekt had dat GAE case-sensitive is en dat de template files dus exact dezelfde naam moeten hebben als de bijbehorende classes (wat lokaal onder Windows niet het geval is). Daarmee rekening houdend, heb je het allemaal zo aan de praat en kunnen we vast stellen dat het gebruiken van een bestaand framework in de App Engine geen probleem is mits alle dependencies goedgekeurd zijn door Google.

Ik moet wel toegeven dat het mij enkele uren kostte om de simpele Hello World aan de praat te krijgen, daarom nog een keer de twee pointers:
  • Gebruik de snapshot van Tapestry 5.2;
  • GAE is case sensitive, noem daarom je class geen Index en de template index.tml.




http://www.atentia.net/2010/04/tapestry-on-gaej-java-lang-verifyerror-stack-size-too-large-solved/

Google App Engine

GWT genereert JavaScript dat wordt uitgevoerd in een browser. Zoals eerder geschreven, kun je daarmee vanuit de browser direct methodes op de server aanroepen. GWT zorgt voor de (un)marshalling. Deze in Java geschreven methodes zijn onderdeel van een Java Servlet. Zo'n Java Servlet heeft een container nodig waarbinnen hij kan draaien. Voorbeelden hiervan zijn Tomcat, Jetty, JBoss en Glassfish. Al deze containers zijn programma's welke op een computer kunt installeren en die bovenop de Java Virtual Machine een set features bieden welke handig kunnen zijn bij het ontwikkelen van Web Applicaties.

Wanneer je web applicatie populair wordt, kom je al snel in de problemen. De webserver/Java container kan maar een bepaald aantal verzoeken per tijdseenheid aan. Wanneer het aantal verzoeken blijft oplopen zullen er gebruikers zijn die niet te zien krijgen wat de bedoeling was. De oplossing voor dit probleem is het inzetten van meerdere servers. Hoeveel je er nodig hebt blijft een gok, dus worden er vaak veel te veel servers ingezet. Google had dit probleem ook en hun oplossing hiervoor hebben ze publiek toegankelijk gemaakt in de vorm van hun Google App Engine (GAE).

GAE is onder andere een op Jetty gebaseerde Java container en is onderdeel van de cloud. Wanneer een web applicatie die in deze App Engine draait veel gebruikt wordt, besluit de App Engine om meerdere instanties van de applicatie naast elkaar te gaan draaien, en de verzoeken te verdelen over deze instanties.

De opschaling problemen zijn hiermee verholpen maar helaas zijn er ook nadelen. Zo kun je geen gebruik maken van een SQL server in de cloud. Je bent gebonden aan BigTable (de database van Google) voor het opslaan van data. Daarnaast kun je ook niet zomaar alle jar-files in je project stoppen omdat niet alle Java functionaliteit aanwezig is en GAE. Jar-files moeten daarom worden goed gekeurd door Google.

Als je denkt dat opschalen een van de problemen is waarmee je te maken krijgt in de toekomst, en Java je favoriete ontwikkel taal is, is de Google App Engine zeker het overwegen waard. Als je daarnaast ook nog eens GWT gebruikt, lijkt het helemaal ideaal te zijn.