Open-Source-Framework Smooks: Transformers - JAXenter

Open-Source-Framework Smooks: Transformers

Splitting und Routing

Neben der Transformierung von Daten kann Smooks auch für das Splitting und Routen von Daten eingesetzt werden. Sowohl der Splitter als auch der Router sind bekannte Vertreter der Enterprise Integration Patterns. Was fängt Smooks damit an? Um große Datenmengen in einer akzeptablen Performance verarbeiten zu können, macht es Sinn, die gesamte Datenmenge in kleine unabhängige Datenpakete aufzuteilen und diese an eine oder mehrere Destinationen zu schicken. In der Praxis gibt es genügend Beispiele für den Fall, dass die einzelnen Datenpakete an unterschiedliche Destinationen geroutet werden müssen, etwa bei der Trennung von Kopf- und Detaildaten. Aktuell unterstützt Smooks das Routing von Daten an Dateien, Datenbanken und JMS. Transformierung, Splitting oder Routing sind typische Schlagworte, die man mit einem ESB in Verbindung bringt. Das ist der ideale Ausgangspunkt, um die Integration von Smooks und Mule zu betrachten.

Smooks und Mule – ein gutes Paar?

Anfangs wurde erwähnt, dass die Transformierung von Daten eine der Kernaufgaben eines ESB ist. Oft kümmert sich ein Konnektor selbst um die Transformierung der Daten. Der JMS-Konnektor von Mule bietet für JMS einfache Transformatoren wie JMSToObject, JMSToString. Was soll man aber machen, wenn ein EDIFACT oder eine CSV als Inputstream verarbeitet werden muss? Es gibt durchaus Anwendungsfälle, bei denen ein ESB-Service nur die reine Transformierung übernehmen soll (zum Beispiel EDI2Java, XML2Java , CSV2Java oder auch Java2Java).

Warum nicht Smooks und Mule vereinen und von den Stärken profitieren, die Smooks bietet? Das Projekt Smooks for Mule auf MuleForge erlaubt es, Smooks in Mule Anwendungen zu integrieren. Es ist eines der wenigen Module, das bereits die Version 2 von Mule unterstützt.

Smooks kann zum einen als Transformer in Mule eingebunden werden, d.h. die Transformierung der Daten wird über Smooks erledigt, wie wir es zuvor bereits demonstriert haben. Zum Beispiel können wir die CSV-Datei über einen File-Connector einlesen und die Daten anschließend über unseren CSV-Transformer laufen lassen. Die Transformer-Konfiguration geschieht in Smooks (Listing 1). Danach können wir den Transformer in Mule definieren (siehe Listing 6), welcher über das Konfigurationsfile entsprechend eingestellt wurde. Zusätzlich definieren wir noch den resultType, in unserem Fall ein String. Es könnte aber auch ein Java-Objekt sein wie bei unserem EDIFACT-Beispiel. In diesem Fall müssten wir zusätzlich noch das Attribut javaResultBeanId = „order“ angeben, damit wir die richtige Objektinstanz aus dem BeanContext von Smooks bekommen.

Der Transformer kann anschließend wie gehabt in Mule bei Inbound/Outbound Endpoints verwendet werden.

Listing 6: Transformierung mit Smooks in Mule

Neben dem Transformer bietet das Smooks for Mule-Modul noch einen Router an, welcher mit der Routerlogik von Smooks konfiguriert werden kann. Für diesen Zweck wird ein Outbound Router (= MuleDispatcher) zur Verfügung gestellt, welcher mithilfe einer Smooks-Konfiguration eingestellt werden kann.

In Listing 7 ist die Smooks-Konfiguration für ein einfaches Beispiel dargestellt, bei dem ein XML-Dokument mit Artikelpositionen verarbeitet wird und alle Artikel-IDs in eine HashMap gespeichert werden. Die HashMap wird in Smooks als Bean zur Verfügung gestellt. Der Mule Dispatcher kann nun die HashMap an den definierten Endpoint (stockSystem) schicken. Für das Erstellen von Java-Objekten in Smooks ist die Java Cartridge zuständig. Schließlich kann mit folgender Mule-Anweisung der Router im Outbound-Bereich definiert werden:

An welchen Endpoint die Nachricht weitergeleitet wird, bestimmt der Mule Dispatcher von Smooks, welcher in Listing 7 definiert wurde.

Listing 7: Routing Konfiguration in Smooks
    org.milyn.smooks.mule.MuleDispatcherstockSystem
	    a
    org.milyn.javabean.BeanPopulatorjava.util.HashMap
	    a
	    

Fazit

Smooks ist eine interessante Technologie im Bereich der Datenintegration und hat auch eine akzeptable Performance bei großen Datenmengen. Es muss nicht immer ein XML-Dokument sein, wenn Daten ausgetauscht werden sollen. Ein Framework wie Smooks kann auch für einen ESB wie JBoss ESB oder Mule sinnvoll als Transformations-Engine eingesetzt werden. In der Smooks- Distribution befinden sich zahlreiche Beispiele, welche den Einstieg in diese Technologie erleichtern. Man kann sagen, dass Optimus Prime und seine Transformer-Kollegen gute Arbeit leisten.

Markus Demolsky ist Software-Engineer und Berater bei der Soreco Group. Seine Schwerpunkte liegen bei Softwarearchitektur, Workflow-Management-Systemen und Open-Source-Technologien im Java-EE-Umfeld. Er ist Committer bei MuleForge und arbeitet aktuell mit Dr. Alexander Schatten an einem Buch zum Thema „Software Engineering – Best Practices“.

Kommentare

Schreibe einen Kommentar

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