XAP – extensible ajax platform

Im Apache incubator (der Brutstätte neuer OSS-Projekte) befindet sich seit einiger Zeit das XAP-Projekt. Ziel des Projekts ist eine Plattform für AJAX-Anwendungen zu schaffen, bei der die Oberfläche nicht mit HTML und JavaScript gestaltet wird, sondern per XML (genauer gesagt XAL) definiert wird. In dem XAL können dann auch Eventhandler angelegt werden, die auf JavaScript-Funktionen verweisen.

Aus der XAL-Definition erzeugt XAP dann mithilfe des Dojo-Toolkits eine AJAX-Oberfläche. Ab hier können dann per JavaScript die Dojo-Funktionen benutzt werden und so die Oberfläche verändert werden. Allerdings bietet XAP auch die Möglichkeit während der laufenden Anwendungen das zugrunde liegende XAL (also die Oberflächendefinition) dynamisch mittels XModify zu verändern. So muss man also nicht unübersichtliche JavaScript-Funktionen schreiben sondern kann in der gleichen Sprache wie die Oberfläche definiert wurde diese auch wieder verändern. Der XModify-Code kann dabei von dynamischen Seiten (z.B. PHP, JSP, Struts, …) erzeugt werden.

Im einfachsten Fall besteht ein Eventhandler dann aus nur einem Statement:

service.retrieveAndProcess(‘update.php’);

Die Datei update.php liefert dann folgendes:

<xal xmlns=”http://www.openxal.org/xal”>
<xm:modifications xmlns:xm=”http://www.openxal.org/xmodify”>
<xm:set-attribute select=”/xal/label”><xm:attribute name=”text” value=”Das kommt vom Server!”/></xm:set-attribute>
</xm:modifications>
</xal>


Dabei wird per XPath ein Label selektiert und das Attribut text auf den Wert “Das kommt vom Server!” geändert. Die JavaScript-Lösung dazu würde folgendermaßen aussehen:

var ui = session.getDocumentContainer().getUiDocument()
var el = ui.getElementById ( “label”);
el.setAttribute ( “text”, “Das kommt vom Server!” )

Der Client kann dies dann mit folgenden Statements einbinden:

var result = service.retrieve (‘jsupdate.php’);
eval ( result.responseText );

Die XML-Lösung hat dabei den Vorteil, das mit XPath eine deutlich mächtigere Sprache zur Verfügung steht um Element in der UI zu selektieren als dies JavaScript mit seinem DOM-Tree anbietet. Mit XModify können natürlich nicht nur Attribute geändert werden sondern auch komplett neue Bereiche hinzugefügt werden, und das mit der gleichen Syntax wie die statische Oberfläche definiert wurde. Ein weiter Vorteil ist auch, das man sich bei der Verwendung von XML nicht auf JavaScript festlegt und so später auch die Möglichkeit hat, auf eine andere Client-Plattform wie z.B. Java oder .NET wechseln.

XAP bietet also eine hohe Abstraktion von AJAX- bzw. Web2.0-Anwendungen, lässt aber trotzdem die freie Wahl bei der verwendeten Servertechnologie, im Gegensatz zu GWT, JSF+AJAX. Hinter dem Projekt steht übrigens die Firma Nexaweb, welche mit der Nexaweb Platform eine kostenpflichtige Enterprise Web 2.0 Plattform für Rich Internet Applications (RIA) anbietet. Derzeit kommt hier Java (aRex) als Clienttechnologie zum Einsatz. XAP soll dann als Basis für eine kommerzielle AJAX-Oberfläche (jRex) dienen, sodass also von einer zügigen Weiterentwicklung auszugehen ist.

Informationen zu Nexaweb und zu XAP gibt es übrigens auch bei der W-JAX 2006 auf dem gemeinsamen Messestand von SOFTCON und Nexaweb.