On the ROXX: Flex, REST, Akka, Scala, MongoDB

Flash/Flex

Flash-Anwendungen werden in der Sprache ActionScript 3 (AS3) geschrieben. ActionScript 3 basiert, seit der Veröffentlichung des Flash-Players 5 im Jahr 2000, genau wie JavaScript auf ECMAScript. Dementsprechend stehen auch in AS3 funktionale Sprachfeatures wie collection.filter(.) zur Verfügung, was eine erste nette Parallele zu der serverseitig verwendeten Sprache Scala bietet. Aufbauend auf dem ECMAScript-Sprachkern, bietet AS3 unter anderem ein Klassensystem ähnlich dem, das man von Java kennt. Ein wesentlicher Unterschied zu JavaScript ist der, dass ein statisches Typensystem optional zur Verfügung steht. Außerdem wird AS3 zu Bytecode kompiliert, der in einer VM (Virtual Machine) abläuft. Eine solche VM gibt es nicht nur in Form des Flash-Players für den Browser. Die Adobe AIR Runtime bietet ebenfalls eine VM, die allerdings außerhalb des Browsers läuft und sich wie eine native Anwendung des Zielsystems verhält (damit ist nicht das Look and Feel gemeint). Besonders interessant ist hierbei die Tatsache, dass es unter dem Schlagwort „Flex Mobile“ auch eine VM (ebenfalls Adobe AIR) für mobile Plattformen wie Android und iOS gibt. Hierzu gibt es im zweiten Teil der Artikelserie mehr Details. Aufbauend auf AS3 gibt es das eventgetriebene Flex-Framework, das erweiterte High-Level-Funktionalität bietet, etwa Pop-ups, Buttons, Skinning, CSS-Styling oder bidirektionales Data Binding (Listing 1).

Listing 1: Bidirektionales Data Binding in Flex
REST/JSON

Vermutlich kennen die meisten Leser REST und JSON. Deshalb wird an dieser Stelle nur kurz erwähnt, weshalb diese sich für ROXX besonders anbieten. JSON: Auf der Clientseite bietet Flex von Haus aus eine hervorragende JSON-Unterstützung. Auch die auf der Serverseite verwendete Scala Library namens sjson [2] funktioniert hervorragend. Außerdem nimmt die gewählte Datenbank (MongoDB) zum Speichern direkt JSON entgegen. REST: Der Webarchitekturstil mit seinen Methoden GET, PUT, POST, DELETE, … ist aus vielen verschiedenen Gründen eine gute Wahl. Warum das in unserem Technologie-Stack nur mit Einschränkungen gilt, wird später erläutert. Ein Beispiel für das Annehmen eines GET Requests sowie das Laden der DB und das Zurücksenden als JSON ist in Listing 3 zu sehen.

Akka: Actors, Akka Mist, Servlets 3.0, Jetty 8

Um eine Webanwendung mit möglichst guten Antwortzeiten bereitzustellen, ist es sinnvoll, so viele Requests wie möglich in möglichst kurzer Zeit parallel abzuarbeiten. Diese Anforderung schlägt sich auch in der aktuellen Servlets-Spezifikation (3.0) unter dem Schlagwort „Aynchronous Request Handling“ nieder. Um in den Genuss dieser Technologie zu kommen, muss jedoch auch eine aktuelle Implementierung eines Servlet-Containers verwendet werden, derzeit noch Mangelware. In unserem Fall verwenden wir Jetty 8. Direkt am Servlets-API hängt Akka Mist, das HTTP-Modul des Akka-Projekts. Akka Mist bildet zusammen mit den Akka-Actors eine Einheit. Während Mist für das HTTP Handling zuständig ist, garantieren die Akka Actors eine sauber getrennte, parallele und asynchrone Abarbeitung der Requests. Die Einbindung von Akka Mist in den Showcase ROXX ist in Listing 2 zu sehen. Akka insgesamt versteht sich als Plattform zur Erstellung von eventgetriebenen, skalierbaren und fehlertoleranten Architekturen der nächsten Generation auf der JVM [3]. Akka bietet sowohl APIs für Scala als auch für Java an und kann daher auch sehr gut in reinen Java-Projekten verwendet werden.

Listing 2: Akka-Mist-Integration über die web.xml
akkaMistServletakka.http.AkkaMistServlet...
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.