Bleibt alles anders?

Was ist

Zunächst konzentrierten sich die Entwickler auf die interne Verarbeitung der XML-Nachrichten. Man wendete sich vom DOM- und SAX-Parsing ab und setzte zeitgemäß auf StAX. Auf StAX aufbauend wurde zudem ein leichtgewichtiges Objektmodell (AXIOM) entwickelt, das effizienten Zugriff auf einzelne Nachrichteninhalte bietet und dennoch einen dem DOM-Modell ähnlichen Zugriff ermöglicht. Allein der Umstieg auf AXIOM brachte deutliche Verbesserungen hinsichtlich der Geschwindigkeit gegenüber Axis 1.x, was sich in Benchmarks und Performancetests gut zeigen ließ.

Weiterhin widmete man sich der bereits angesprochenen Problematik, dass die Axis-Engine zu stark auf Request-Response ausgelegt war. Um das Problem zu lösen, teilte man den Nachrichtenfluss in zwei eigenständige Abschnitte: 1. Eingehend (IN-Flow) und 2. ausgehend (OUT-Flow), wobei jeder Abschnitt von einer eigenen Axis-Engine verwaltet wurde. Damit war nun endlich der Weg für alle anderen Kommunikationsmuster frei. Die Ideen rund um asynchrone Web Services wurden in ihrer ganzen Tiefe (Blocking und Non-Blocking APIs mit ein oder zwei Verbindungen) umgesetzt.

Einen weiteren Schwerpunkt setzte man auf das Deployment von Web Services. So wurde zunächst ein neues Konzept eingeführt, nachdem ein neuer Web Service samt seiner Ressourcen und dem Deployment-Deskriptor in einem JAR-Archiv mit spezieller Verzeichnisstruktur untergebracht werden muss. Dieses so genannte Axis-Archiv ist dann nur noch durch einfaches Kopieren in eine laufende Axis2-Instanz einzubringen und schon ist der Service installiert. In späteren Axis2-Versionen hat man dieses Verfahren noch weiter aufgebohrt und Interfaces zur Verfügung gestellt, mit denen ganz eigene, individuelle Deployment-Verfahren implementiert werden konnten. Ein Beispiel hierfür ist der POJO-Deployer, mit dem es möglich ist, eine Klassendatei oder ein JAR zu nehmen und Teile daraus direkt als Web Service offenzulegen. Der Deployment-Deskriptor, der in Axis bisher immer ein wesentliches Deploymentmerkmal war, wird dabei weitgehend durch Annotations ersetzt. Von Anfang an propagierte Axis2 den Contract-First-Ansatz bei der Entwicklung von Web-Service-Anwendungen. Hierzu werden mächtige Kommandozeilenwerkzeuge für die Codegenerierung und auch für diverse IDEs (Eclipse, Netbeans) angeboten. Hatte man in Axis 1.x noch ein eigenes Type Mapping Framework, so wurde dieses in Axis2 verworfen. An seiner Stelle verlässt man sich beim Serialisieren und Deserialisieren von Java nach XML und zurück nun auf externe Werkzeuge und Frameworks, die speziell für diese Aufgabe entwickelt wurden.

Von Anfang an unterstützt Axis2 hier das eigene Data-Binding Framework ADB, XMLBeans und JiBX. In neueren Versionen wird auch die Umsetzung von JAXB 2.0 weiter vorangetrieben, was im Übrigen eine wesentliche Voraussetzung zur vollständigen Unterstützung von JAX-WS darstellt. JAX-WS als Nachfolger von JAX-RPC von Anfang an zu unterstützen war erstaunlicherweise gar nicht das erklärte Ziel der Axis2-Entwickler. Vielmehr konzentrierten sie sich darauf, eine flexible, modulare und offene Architektur zu entwickeln, auf deren Grundlage dann erst die Umsetzung von JAX-WS erfolgen sollte. In der aktuellen Version 1.4.1 von Axis2 wird JAX-WS nun auch weitgehend unterstützt. Weitgehend statt vollständig deshalb, weil die JAXB-Unterstützung derzeit immer noch in einem so genannten „experimental“-Status vorliegt, was letztlich bedeutet, dass hier noch an einer der wesentlichen Grundvoraussetzungen für JAX-WS gearbeitet wird. Wie JAX-WS rein technisch funktioniert, wird Thema des nächsten Artikels sein.

Was kommen wird

Axis2 ist ein modernes, stabiles und sehr ausgereiftes Web Service Framework, das uneingeschränkt zur Verwendung empfohlen werden kann. Auch eine Migration von auf Axis 1.x basierenden Web Services auf Axis2 ist sinnvoll. Und obwohl Axis2 technologisch auf dem Stand der Zeit ist, gibt es schon Pläne für zukünftige Versionen. Zunächst sei erwähnt, dass derzeit keine erneute Neuimplementierung von Axis, so wie es schon zwei Mal der Fall war, vorgesehen ist. Die hohe Flexibilität, Modularität und Offenheit der aktuellen Fassung spielt ihre Stärken beim Einsatz von Axis und bei seiner eigenen Weiterentwicklung voll aus und ist ein gutes Beispiel für eine gelungene Softwarearchitektur. JAX-WS ist auch für die Zukunftsentwicklung ein wichtiges Thema. Derzeit unterstützt Axis2 JAW-WS in der Version 2.0 weitgehend. Mittlerweile liegt JAX-WS jedoch schon in der Version 2.1 vor. Axis2 wird diese Version vermutlich in seiner nächsten Fassung 1.5 unterstützen, wahrscheinlich zusammen mit einer dann vollständigen Integration des JAXB-Standards, der für JAX-WS von essenzieller Bedeutung ist.

Kommentare

Schreibe einen Kommentar

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