Dienstag, 9. September 2008

Sollen ESB Dienste mit WSDL beschrieben werden?

Dienste auf einem JBI konformen Enterprise Service Bus lassen sich mit WSDL beschreiben. Für die Beschreibung der Schnittstellen genügt abstraktes WSDL, d.h. ein WSDL Dokument ohne Binding und Service Element. Die Nachrichten auf dem Bus müssen jedoch nicht das SOAP Format verwenden. Mit WSDL lassen sich auch andere Schnittstellen beschreiben. Die Möglichkeit die Schnittstellen der Dienste mit WSDL zu beschreiben wird von den einzelnen ESB Produkten unterschiedlich ausgelegt. Integrationslösungen für den Apache ServiceMix verwenden meist gar keine WSDL Beschreibungen für Dienste, die innerhalb des Buses kommunizieren. Beim OpenESB dagegen muss jede Komponente mit WSDL beschrieben werden. Selbst die Konfiguration, z.B. der File Komponente, erfolgt meist über WSDL Erweiterungen. Ich frage mich was der richtige bzw. sinnvolle Ansatz ist. Für eine Beschreibung mit WSDL spricht die Dokumentation der Endpunkte sowie die Möglichkeit, dass GUI Tools die in WSDL enthaltenen Metadaten auswerten können. Andererseits ist es aufwendig, für jeden Service Endpoint eine WSDL zu erstellen. Viele Dienste sind auch nicht auf eine enge Schnittstelle begrenzt. Eigentlich alle Komponenten, welche die XML Idee aufgreifen. Zum Beispiel ein Splitter der über einen XPath Ausdruck eine Nachricht in mehrere aufsplittet oder ein XSLT Transformer, der ein regelbasiertes Stylesheet verwendet. Richtige regelbasierte Stylesheets verarbeiten nicht nur ein starres Format. XSLT ist dann auch in der Lage zum Zeitpunkt der Entwicklung noch unbekannte Formate zu verarbeiten. Solche flexiblen Stylesheets verwenden anstatt unflexible foreach Konstrukte apply-templates und überlassen den XSLT Prozessor die Wahl des nächsten Schrittes. Gerade diese Flexibilität macht eine Integration mit XML aus. Um diese Flexibilität mit WSDL Beschreibungen zu erreichen, könnten dort die Nachrichten mit xsd:any definiert werden. Das ist aber auch nicht im Sinne einer strikten Schnittstellenbeschreibung. Ich bevorzuge daher WSDL nur für die Schnittstellen des ESB nach außen, also für die Binding Components einzusetzen. Nicht für die Kommunikation zwischen Service Engines.

Keine Kommentare:

Kommentar veröffentlichen