Technical White Paper Services mit Oracle SOA Suite

Werbung
Technical White Paper
Services mit Oracle SOA Suite
oder Java EE implementieren
esentri AG
Pforzheimer Straße 132
DE – 76275 Ettlingen
Tel +49 (0) 7243 / 354 90 0
Fax +49 (0) 7243 / 354 90 99
[email protected]
www.esentri.com
02. August 2013
AN 13-Services
mit Oracle SOA Suite oder Java EE implementieren Technical White Paper, Seite 1 von 27
Einleitung ................................................................................................ 3 Voraussetzungen ................................................................................... 3 Architekturaspekte .................................................................................... 4 Service-Infrastruktur ............................................................................. 4 Komponentenmodelle ............................................................................ 6 Message-Exchange Patterns.................................................................... 8 Event-Driven SOA ............................................................................... 10 Klassifizierung von Services .................................................................. 11 Service-Entwicklung ................................................................................ 13 Entwicklungswerkzeuge ....................................................................... 13 Serviceschnittstellen ............................................................................ 13 Serviceprogrammierung ....................................................................... 13 Lifecyclemanagement .............................................................................. 18 Security ................................................................................................ 20 Management und Betrieb ......................................................................... 21 Fazit ..................................................................................................... 23 Glossar .............................................................................................. 25 Referenzen ......................................................................................... 26 Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 2 von 27
Einleitung
Mit der Oracle SOA Suite 11g steht ein mächtiges Werkzeug für die Entwicklung und den Betrieb
von Services, auf Basis der Service Component Architecture (SCA) zur Verfügung. Services können
sehr einfach, schnell und vor allem deklarativ mit der SOA Suite entwickelt und betrieben werden.
Oftmals wird sehr kontrovers die Frage diskutiert, ob Services auf Basis von SCA mit der SOA Suite
oder klassisch mit JEE-Technologien entwickelt werden sollten. Diese Frage ist nicht einfach zu
beantworten. Ausgehend vom Anwendungskontext haben beide Varianten ihre Stärken und Schwächen.
In diesem Dokument werden verschiedene Aspekte, z. B. Architektur, Management und Betrieb,
betrachtet und jeweils die Vor- und Nachteile beider Technologien gegenübergestellt. Ziel dieses
Dokumentes ist nicht einer Variante den Vorzug zu geben. Vielmehr sollen hier Kriterien aufgezeigt
werden, um eine Entscheidung im jeweiligen Anwendungskontext zu erleichtern.
Voraussetzungen
•
Grundsätzliches Verständnis von Application Server Architekturen und Entwicklungserfahrung im Bereich Webservices und JEE-Technologien.
•
Die nachfolgenden Betrachtungen gehen davon aus, dass Oracle WebLogic Server als
Applikationsserver eingesetzt wird.
•
Ferner wird angenommen, dass bei der Entwicklung von Serviceschnittstellen und Datentypen auf Basis WSDL und XSD der Contract First-Ansatz zum Einsatz kommt.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 3 von 27
Architekturaspekte
Service-Infrastruktur
Nachfolgend wird kurz gegenübergestellt, welche Infrastruktur benötigt wird, um einen Service auf
Basis von SCA oder JEE zu betreiben. Es werden lediglich die minimalen Anforderungen dargestellt.
Im jeweiligen Anwendungsfall kann es durchaus notwendig sein, zusätzliche Infrastrukturkomponenten, wie z. B. eine Datenbank für Fachdaten, bereitzustellen. Diese Komponenten werden nachfolgend nicht betrachtet.
Oracle SOA Suite
Abbildung 1: Vereinfachte Systemarchitektur Oracle SOA Suite
Oracle SOA Suite ist ein SCA-Container der in Form einer JEE-Anwendung im Applikationsserver
installiert und betrieben werden kann. SOA Suite benutzt u.a. folgende technische Komponenten
aus dem JEE-Standard:
•
EJB’s
•
Resource Adapter nach JCA
•
JMS
•
Webapplikationen
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 4 von 27
Ferner benötigt die SOA Suite eine Datenbank zum Speichern von Informationen. Diese Datenbank
besteht mind. aus den beiden Schematas MDS und SOAINFRA. Im MDS werden alle Konfigurationsdaten der SOA Suite und alle installierten Composites gespeichert. Im Schema SOAINFRA werden alle Daten zu laufenden Instanzen von Composites gespeichert. Zu diesen Daten zählen u.a.
Audit-Informationen, Prozessstati etc.
Die Oracle SOA Suite kann mit den verfügbaren Werkzeugen der Oracle Fusion Middleware überwacht und gesteuert werden. Diese Werkzeuge sind WebLogic Server Console und Fusion Middleware Control bzw. Cloud Control.
Ein SCA wird in Form einer *.jar zu einer installierbaren Einheit zusammengebaut. Der Aufbau eines SCA’s muß einer bestimmten Struktur folgen (diese Struktur wird in diesem Dokument nicht
erläutert!). Die jar-Datei mit dem SCA wird durch Werkzeuge der SOA Suite installiert. Technisch
erfolgt die Weitergabe der jar-Datei an ein Servlet in der SOA Suite. Das Servlet (DeployerServlet)
übernimmt die Installation und Konfiguration des SCA’s. Im Falle eines Clusterdeployments erfolgt
die Installation eines Composites immer auf genau einen Server. Die Mitteilung über ein neu installiertes Composite wird über Coherence an die anderen Server im Cluster verteilt. Die einzelnen
Server im Cluster beziehen die Daten zum Composite aus dem MDS.
JEE
Abbildung 2: Systemarchitektur Java EE-Webservice
Prinzipiell benötigt man für die Bereitstellung eines Java EE-Webservice einen Applikationsserver,
z. B. WebLogic Server. Je nach dem, welche Java EE-Technologien (mit/ ohne EJB) für die Implementierung des Webservice eingesetzt werden, kann auch ein Servlet-Container für den Betrieb
ausreichend sein. Diese Möglichkeit, wird allerdings in diesem Dokument nicht berücksichtigt.
Ein Webservice wird typischerweise in Form einer ear-Datei zur Verfügung gestellt. Der Aufbau der
ear-Datei ist ebenfalls in den JEE-Spezifikationen definiert und wird hier nicht näher betrachtet.
Weitere Informationen können der JEE-Spezifikation entnommen werden.
Die Installation der ear-Datei wird durch den Applikationsserver durchgeführt. Die Überwachung
der Applikation erfolgt mit den Werkzeugen des Applikationsservers. Im WebLogic Server erfolgt
die Überwachung mit der sog. WebLogic Server Console.
Als Infrastrukturkomponente benötigt ein Java EE-Webservice zunächst einmal keine Datenbank.
Ausgenommen sind natürlich Services, die Daten in einer Fachdatenbank verwalten.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 5 von 27
Komponentenmodelle
Service Component Architecture (SCA)
Abbildung 3: Komponenten in einem SCA
SCA besteht aus einer Reihe von Spezifikationen die ein Model für die Implementierung von Anwendungen und Systemen in einer SOA beschreiben. An der Definition der Spezifikationen waren
verschiedene Firmen, u.a. auch Oracle, beteiligt. Der SCA-Standard wird zur Zeit bei OASIS geführt
und liegt in Version 1.0 aus dem Jahr 2007 vor.
Ein wesentlicher Baustein in einem SCA ist das sog. Component. In einem SCA tauschen Componentes Nachrichten miteinander aus. Dabei ist die konkrete Implementierung einer Component
zunächst unerheblich. In der SOA Suite werden folgende konkrete Implementierungen für Components angeboten. Diese Implementierungen werden auch als Service Engines bezeichnet.
•
BPEL
•
Decision Service (Rules Engine)
•
Mediator (Routing)
•
Human Workflow (Human Interaction)
•
Spring Context
Überdies implementiert die SOA Suite folgende Binding-Komponenten:
•
Webservice (SOAP over HTTP)
•
JCA adapters (AQ, Database, FTP, JMS, MQ, Socket, etc.)
•
B2B binding component
•
ADF-BC service
•
Oracle Applications
•
BAM Adapter
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 6 von 27
•
Direct binding service
•
HTTP binding
Bei SCA handelt es sich zwar um einen Standard der durch OASIS verwaltet wird. Jedoch ist zu
beachten, dass ein erstelltes Composite mit Oracle-Tools nicht ohne weiteres in einem SCAContainer eines anderen Herstellers installiert und betrieben werden kann!
Java Enterprise Architecture (Java EE)
Im Java EE-Umfeld existieren prinzipiell zwei verschiedene Möglichkeiten Webservices zu implementieren. Diese werden nachfolgend erläutert.
Java-API for RESTful Web Services (JAX-RS)
Es wird eine einheitliche Schnittstelle in der Programmiersprache Java zur Verfügung gestellt, um
Webservices nach dem Architekturkonzept REST zu implementieren. Wie andere Schnittstellen im
Java EE-Kontext benutzt JAX-RS Annotations um die Entwicklung und das Deployment von Webservices zu vereinfachen.
Java-API for XML Web Services (JAX-WS)
JAX-WS stellt ebenfalls eine einheitliche Schnittstelle für die Erstellung von Webservices in der Programmiersprache Java zur Verfügung. Wie andere Schnittstellen im Java EE-Kontext benutzt JAXWS Annotations um die Entwicklung und das Deployment von Webservices zu vereinfachen.
JAX-WS ist Bestandteil der sog. Metro-Plattform und baut technisch auf JAX-RPC (Java-API for
XML-based RPC) auf.
Ein wesentlicher Unterschied zu JAX-RS ist die Nutzung von SOAP für den Austausch von Nachrichten zwischen Client und Server. SOAP ist ein Protokoll für den Nachrichtenaustausch auf Basis von
XML.
Für die Konvertierung der Datentypen zwischen Java-Objekten und XML delegiert JAX-WS die Aufgabe an JAXB (Java Architecture for XML Binding).
Mit JAX-WS können Webservices auf folgende zwei Arten erstellt werden:
•
top-down (contract first)
Zunächst wird eine WSDL und entsprechende Datentypen auf Basis von XML-Schematas
entwickelt. Aufgrund der WSDL und XML-Schematas werden Java-Klassen generiert, die
das Webservice-Interface beschreiben. Im Anschluß muß lediglich noch die Businesslogik
für den Webservice integriert werden.
•
bottom-up
In diesem Fall wird die Schnittstelle für den Webservice in Form eines Java-Interfaces, POJO’s oder EJB definiert. Anschließend erfolgt die Generierung der WSDL und XMLSchematas auf Basis der Java-Definitionen.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 7 von 27
Mit dem Projekt METRO existiert eine Referenzimplementierung für JAX-WS. Weitere Implementierungen dieser Spezifikation ist z. B: Apache CXF.
Java Architecture for XML-Binding (JAXB)
Ermöglicht das Transformieren von XML-Daten nach Java-Objekten und zurück. Ausgangsbasis ist
eine XML-Schemabeschreibung, auf deren Basis entsprechende Java-Klassen generiert werden
können. Durch die Nutzung von JAXB ist es nicht erforderlich sich direkt mit SAX oder DOM, bei der
Verarbeitung von XML-Daten, zu beschäftigen.
Message-Exchange Patterns
Synchroner Service
Ein synchroner Service entspricht im wesentlichen einem entfernten Funktionsaufruf (RPC). Mit
Daten bzw. Parametern wird eine „entfernte“ Funktionalität aufgerufen. Der Nutzer wartet auf den
Eingang der Antwort, um setzt danach erst die Weiterverarbeitung fort. Typischerweise wird der
Ablaufzustand und Context während der Dauer der Verarbeitung gespeichert und nicht über die
Verarbeitungsdauer der Anfrage hinweg.
Die Basis MEP’s für synchrone Service’s sind:
•
Request/ Response
Der Nutzer sendet eine Anfrage an den Anbieter. Der Anbieter verarbeitet die Anfrage und
sendet eine Antwort an den den Nutzer zurück. Der Nutzer wartet auf die Antwort des Anbieters.
Abbildung 4: Request/ Response MEP
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 8 von 27
•
One Way (aka Fire & Forget)
Im wesentlichen gleich zu Request/ Response, allerdings erfolgt hier keine Rückmeldung an
den Nutzer. Der Nutzer wartet nicht auf eine Antwort vom Anbieter, sondern führt nach
dem Aufruf seine Verarbeitung fort.
Abbildung 5: One-Way MEP
Daneben existieren noch eine Reihe von Ausprägungen für diese MEP’s, die aber nicht näher erläutert werden.
Die Implementierung eines synchronen Service ist prinzipiell sehr einfach und wird durch Java EEFrameworks und die SOA Suite gleichermaßen sehr gut unterstützt.
Asynchroner Service
Bei einem asynchronen Service sendet der Nutzer eine Anfrage an den Anbieter und setzt seine
Verarbeitung anschließend fort. Jedoch möchte der Nutzer nach erfolgreicher Verarbeitung der
Anfrage durch den Anbieter eine Benachrichtigung erhalten. Hierzu werden meist sog. CallbackFunktionen angeboten. Damit der Anbieter die Rückantwort an den Nutzer senden kann, muss er
eine Reihe von Informationen, z. B. Adresse des Nutzers etc. ermitteln. Ferner muss der Nutzer
sicherstellen, dass eine „Callback-Nachricht“ vom Anbieter mit der ursprünglichen Anfrage assoziiert werden kann. Der Fachbegriff zu dieser Forderung lautet Correlation.
Für Webservices wurde für diesen Zweck ein Standard mit Namen WS-Adressing definiert. Mit WSAdressing werden alle notwendigen Informationen für die Nachrichtenzustellung in den SOAPHeader eingetragen und übermittelt.
Die Basis MEP’s für asynchrone Service’s sind:
•
Request/ Callback
Der Nutzer sendet eine Anfrage an den Anbieter. Anschließend setzt der Nutzer seine Verarbeitung fort. Der Anbieter verarbeitet die Anfrage und sendet seine Antwort durch Nutzung einer Callback-Funktion an den Nutzer zurück.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 9 von 27
•
Publish/ Subscribe
Sofern mehrere Systeme über Zustandsänderungen etc. informiert werden möchten, können Sie sich auf bestimmte Ereignisse registrieren. Sie warten bzw. beobachten die eintreffenden Ereignisse. Sobald eine Zustandsänderung in Form einer One-Way-Nachricht veröffentlicht wurde, erhalten alle registrierten Beobachter diese Nachricht und können ihre Verarbeitung entsprechend fortsetzen.
In der SOA Suite besteht die Möglichkeit einer Correlation mit dem MEP Request/ Callback auf Basis einer intern, eindeutig erzeugten ID oder aufgrund von fachlichen Daten herzustellen. Die Nutzung von fachlichen Daten für eine Correlation erfolgt durch Definition eines Correlation Sets. Dies
geschieht deklarativ in der Entwicklungsumgebung. Technisch nutzt die SOA Suite WS-Adressing,
um dies Correlation-Daten in der Nachricht zu übermitteln.
Das MEP Publish/ Subscribe kann innerhalb der SOA Suite mit dem EDN realisiert werden. Die Nutzung von EDN erfolgt dabei ebenfalls deklarativ in der Entwicklungsumgebung. Eine besondere
Programmierung ist nicht erforderlich.
Mit einer Webservice-Implementierung auf Basis von JEE muß die Correlation für beide dargestellten MEP‘s manuell nachprogrammiert werden. Die Informationen über den Aufrufer und die Correlation-Daten müßen u.U. längerfristig gespeichert werden. Dies ist vor allem in einem komplexten
Geschäftsprozeß-Szenario der Fall. Die Aufbewahrung der Correlation-Daten kann im Dateisystem
oder in einer Datenbank erfolgen.
Event-Driven SOA
Bei Event-Driven SOA wird die Erzeugung und Verarbeitung von Ereignissen (Events) in den Vordergrund gestellt. Oftmals wird dieser Architekturstil auch als SOA 2.0 bezeichnet. Beim Einsatz
von Event-Driven SOA ist vor allem der Umfang der Daten die in Ereignissen zur Verfügung gestellt
werden sollen, zu betrachten. Aspekte wie Security etc. spielen dabei eine große Rolle.
Unter technischen Gesichtspunkten kann der Nachrichtenaustausch mit den MEP‘s Publish/ Subscribe und One Way als Bereitstellung und Konsumierung von Ereignissen betrachtet werden.
Eine Event-Driven SOA kann mit der SOA Suite mit dem sog. EDN realisiert werden. Das EDN ist
nativ in SCA integriert. Der Umfang an Daten in einem Ereignis kann sehr einfach in der Entwicklungsumgebung definiert werden. Darüberhinaus erfolgt die Definition, wann ein Ereignis bereitzustellen und konsumieren ist, deklarativ in der Entwicklungsumgebung. Eine gesonderte Programmierung ist nicht erforderlich.
Im Bereich Java EE gibt es keine Lösung für eine Event-Driven SOA out-of-the-box. In diesem Fall
ist es notwendig, eventl. auch ein Produkt oder Framework mit dieser Funktionalität zurückzugreifen oder eine Eigenentwicklung durchzuführen. Die Eigenentwicklung könnte typischerweise auf
Basis von JMS erfolgen.
In beiden Fällen ist jedoch zusätzlich noch der Integrationsaufwand bei der Anwendungsentwicklung zu berücksichtigen. Die Integrationsaufwände sind im wesentlichen die Definition, Erzeugung,
Bereitstellung und Konsumieren der Ereignisse.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 10 von 27
Klassifizierung von Services
Anforderungen und Eigenschaften an Services können sich sehr stark unterscheiden. Aus diesem
Grund ist es empfehlenswert Services nach diesen Kriterien zu unterteilen. In Abhängigkeit von der
Klassifizierung ergeben sich dann automatisch auch Implikationen auf die technische Implementierung. Folgende grobe Klassifizierung trifft man sehr häufig in Unternehmen an. Die im Folgenden
vorgestellte grobe Klassifizierung ist häufig in Unternehmen zu finden, die bereits eine erfolgreiche
SOA Implementierung aufweisen. Weitere Klassifizierungsmöglichkeiten sind vorstellbar, werden
aber in diesem Dokument nicht weiter betrachtet.
Elementar-Services
Diese Klassifizierung wird häufig auch als Basis- oder Daten-Service bezeichnet. Sie implementieren eine fachliche Basisfunktionalität. Typischerweise handelt es sich hierbei um Services, die kurzlaufend und zustandslos sind. Diese Services werden fast immer synchron aufgerufen.
Services dieser Kategorie können sehr einfach als Java EE-Service zur Verfügung gestellt werden.
Die Entwicklungsumgebung stellen gute Werkzeuge für die Generierung zur Verfügung. Falls erforderlich müsste zusätzlich noch ein Adapter vor den eigentlichen Java EE-Service hinzugefügt werden, wenn beispielsweise ein Mapping für das Datenmodell erforderlich ist.
In der SOA Suite können Services dieser Art ebenfalls einfach erstellt werden. Die SOA Suite ist
einem Java EE-Service nur dann vorzuziehen, wenn beispielsweise ein solcher Service nach dem
ETL-Muster erstellt werden muss. In diesem Fall bietet die SOA Suite Komponenten an, das Datenmodell-Mapping deklarativ vorzunehmen.
Composed-Services
Composed-Services kombinieren Elementar- oder andere Composed-Services zu neuen neuen „höherwertigen“ Services. Die Komposition neuer Services aus bestehenden Services wird als Orchestrierung bezeichnet.
Die Orchestrierung von Services erfolgt in der SOA Suite unter Einsatz der Komponente BPEL. In
der Entwicklungsumgebung erfolgt eine Modellierung der Aufrufreihenfolge von Services. Im Composite-Editor können die Abhängigkeiten und Aufrufe von Services sehr einfach überblickt werden.
Im Fall von Java EE ist die Komposition von Services manuell in Java zu programmieren. Der Ablauf ergibt sich nicht aus einem Modell und kann nur unter Betrachtung des Sourcecodes ermittelt
werden. Auch die Transformation zwischen den verschiedenen Datenmodell ist im Wesentlichen
manuell
durchzuführen.
Üblicherweise werden Webservices-Proxies für die einzubindenden Services erstellt, die dann im
Rahmen des neuen Services entsprechend angesprochen werden. Auch die Verwaltung der Endpunkte für diese Services muss manuell vorgenommen werden.
Wenn mehr als zwei Services zu einem neuen Services orchestriert werden, dann empfiehlt sich auf
jeden Fall die Nutzung der SOA Suite. Bei weniger als zwei Services hängt es im Wesentlichen von
den Anforderungen ab, z. B. ist eine Transformation notwendig etc.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 11 von 27
Prozess-Services
Diese Servicekategorie implementiert komplette Geschäftsprozesse. In dieser Servicekategorie
werden auch Services orchestriert, allerdings ist zu beachten, dass der Zustand zwischen den einzelnen Serviceaufrufen gespeichert wird.
In der SOA Suite können Services dieser Kategorie unter Einsatz verschiedener Komponenten deklarativ erstellt werden. Ferner bietet die SOA Suite Funktionen für das Management und Überwachung von Services an. Der Zustand zwischen den einzelnen Serviceaufrufen wird in einer Datenbank gespeichert.
Im Bereich Java EE gibt es keine Lösung für die Implementierung eines Prozess-Servie out-of-thebox. In diesem Fall muss auf ein Produkt oder Framework zurückgegriffen werden. Eine Eigenentwicklung ist in den seltensten Fällen sinnvoll.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 12 von 27
Service-Entwicklung
Entwicklungswerkzeuge
Die
Entwicklung
von
JEE-basierten
Services
kann
mit
jedem
beliebigen
JavaEntwicklungswerkzeug, wie z. B. Oracle JDeveloper, Eclipse, NetBeans o.ä., erfolgen. Dabei unterscheiden sich die einzelnen Werkzeuge in Komfort und Geschwindigkeit. Üblicherweise bieten die
Entwicklungswerkzeuge einen integrierten JEE-Applikationsserver an, der es ermöglicht, die entwickelten Services auf dem lokalen Entwickler-PC zu installieren und auszuführen.
SCA ist im Vergleich zu JEE noch eine rechte junge Technologie. Insbesondere ist das an der IDEUnterstützung im Vergleich zu JEE-Entwicklung erkennbar. Viele Funktionen, z. B. im Bereich des
Refactorings, stehen im Bereich SCA noch nicht zur Verfügung. Die Implementierung eines SCAbasierten Services kann zum aktuellen Zeitpunkt ausschließlich mit dem Oracle JDeveloper durchgeführt werden. Ein anderes Entwicklungswerkzeug kann nicht genutzt werden. Darüberhinaus
muss eine Oracle SOA Suite Installation zur Verfügung stehen, um die entwickelten Services zu
installieren und auszuführen.
Serviceschnittstellen
Serviceschnittstellen werden durch WSDL und XSD-Dateien beschrieben. In fast jeder JavaEntwicklungsumgebung gibt es mehr oder minder-komfortable Editoren für die grafische Anzeige
und Veränderung von WSDL und XSD-Dateien.
Sowohl bei der Entwicklung auf Basis Java EE und SCA können bestehende WSDL und XSD-Dateien
als Ausgangsbasis genutzt werden („Contract First“). In beiden Fällen besteht jedoch auch die Möglichkeit, WSDL und XSD-Dateien automatisch generieren zu lassen („Code First“).
Serviceprogrammierung
Erstellung
Im Kontext Java EE werden üblicherweise Interfaces und Klassen durch das jeweilige Framework
generiert. Die Aufgabe des Entwicklers ist nun die konkrete Implementierung der Serviceoperationen durch Schreiben von Java-Code. Die Struktur des Services wird durch Java-Klassen beschrieben. Jedoch ist der Ablauf und die Beziehungen nicht sofort erkennbar. Erst durch SourcecodeAnalyse oder Nutzung eines zusätzliches Werkzeuges (Klassendiagramm, Sequenzdiagramme etc.)
werden die Zusammenhänge teilweise sichtbar.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 13 von 27
Abbildung 6: Webservice mit Java-POJO
Für die Referenzierung von WSDL- und XSD-Dateien während der Serviceprogrammierung muss
ein Mechanismus für das Projekt definiert und umgesetzt werden. Beispielsweise könnte ein zentraler Apache HTTP-Server aufgesetzt werden, um WSDL und XSD-Dateien zur Verfügung zu stellen.
Die Referenzierung erfolgt dann über die URI http://. Diese URL muss dann im Buildprozeß an die
entsprechende Umgebung (Development, Test, Produktion) angepaßt werden. Ferner muss ein die
Bereitstellung der WSDL und XSD-Dateien in den HTTP-Server definiert werden.
Die Entwicklung von SCA-Services im Oracle JDeveloper erfolgt fast ausschließlich deklarativ im
Composite-Editor. Die Abhängigkeiten der einzelnen Komponenten sind durch ein Diagramm anschaulich visualisiert. Viele Wizzards unterstützen und vereinfachen die Entwicklung, z. B. XLSTTranformer um Datenmodelle anzugleichen. Die Programmierung beschränkt sich auf die deklarative Beschreibung und Konfiguration der Komponenten.
Abbildung 7: Composite-Editor im JDeveloper
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 14 von 27
Darüberhinaus steht mit dem MDS ein Werkzeug zu Verfügung, um WSDL und XSD-Artefakte umgebungsunabhängig zu organisieren und zu referenzieren. Das MDS speichert Artefakte in einer
Datenbank oder im Dateisystem. Das dateisystem-basierte MDS ist im JDeveloper integriert und
erlaubt die Referenzierung von WSDL und XSD-Dateien ohne komplexe Infrastruktur. Artefakte
werden mit der URI oramds:// referenziert. Diese URI wird durch die Infrastruktur entsprechend
aufgelöst, also in eine Datenbank oder auf das Dateisystem. Für den Entwickler ist das völlig transparent.
Integration
In Bezug auf Integrationsaufgaben muss das jeweilige System bzw. Komponente, im Falle eines
Java EE-Services, manuell integriert werden. Systeme und Komponenten können beispielsweise
Queues, Datenbanken, ERP-Systeme oder andere Services sein. Ferner muss das Mapping des
Datenmodells, falls erforderlich, ebenfalls manuell programmiert oder durch Einsatz von XLSTTools erfolgen.
Für viele Systeme und Komponenten gibt es bereits vorgefertigte Adapter in der SOA Suite die nur
in den Service eingebunden und konfiguriert werden müssen. Beispielsweise existieren Adapter für
Queues, Datenbank etc. Ein externer Webservice wird in Form einer Referenz verfügbar. Bestehende POJO/ Spring- und EJB-Komponenten können einfach eingebunden werden. Somit können bestehende Komponenten sehr einfach in eine SOA-Welt überführt werden. Die Plattform optimiert
den Zugriff auf diese Komponenten! Für das Mapping von Datenmodellen ist in den diversen Komponenten ein XLS-Transfomer integriert. Die Mappingbeschreibung erfolgt ebenfalls deklarativ.
Fehlerbehandlung
Die Fehlerbehandlung erfolgt im wesentlichen durch das „Werfen“ (Throw) und „Abfangen“ (Catch)
von Java-Exceptions. Die Java-Exceptions müssen dann noch in einen SOAP-Fault übersetzt werden. Die Strategie für das Werfen und Abfangen von Exceptions muss durch den Entwickler manuell entworfen und umgesetzt werden. Der Aufwand für die Überführung von Java-Exceptions in
SOAP-Faults hängt stark vom eingesetzten Webservice-Framework ab.
Die Fehlerbehandlung wird überlicherweise pro Service entwickelt. Eine einheitliche Fehlerbehandlung über die Servicegrenzen hinweg ist schwierig zu implementieren (Java-Library) und erfordert
eine hohes Maß an Governance zwischen Entwicklungsteams.
In der SOA Suite erfolgt das Werfen und Abfangen von Fehlersituationen deklarativ zur Designtime.
Die Übersetzung in einen SOAPFault erfolgt ebenfalls deklarativ. Darüberhinaus steht mit dem
Faultframework eine Möglichkeit zur Verfügung, das Fehlermanagement zu zentralisieren und zwar
über die Servicegrenzen hinweg. Somit kann beispielsweise zentral definiert werden, was in bestimmten Fehlersituationen zu erfolgen hat, ohne das der Entwickler im einzelnen Service dies berücksichtigten muss.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 15 von 27
Abbildung 8: Deklarative Fehlerbehandlung in BPEL und Auszug aus fault-policy.xml File
Die Aspekte des Fehlermanagements zur Laufzeit werden in einem separaten Kapitel betrachtet.
Test
Im Context einer Java EE-basierten Serviceentwicklung können Unit-Tests erstellt werden. Dabei
gibt es eine Reihe von Frameworks, die genutzt werden können, um Services zu testen. Die internen Klassen können beispielsweise mit jUnit oder Ablegern überprüft werden. Den ablauffähigen
Service kann man über SOAP UI oder Apache jMeter testen.
Die SOA Suite erlaubt die Definition von Unit-Tests für SCA’s. In diesem Fall ist es auch nicht erforderlich Mocks für externe Services zu erstellen. Deklarativ können Testdaten als Ergebnis dieser
Serviceaufrufe in der Entwicklungsumgebung definiert werden.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 16 von 27
Abbildung 9: Unittest für Composite definieren
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 17 von 27
Lifecyclemanagement
Versionsmanagement
Im Rahmen der Bereitstellung von Services muss auch die Frage beantwortet werden, wie mit unterschiedlichen Versionsständen von Services umgegangen werden soll.
Im Kontext einer Java EE-basierten Entwicklung von Services muss das Versionsmanagement ausschließlich manuell durchgeführt werden. Die Versionierung bezieht sich nicht nur auf die Schnittstellenbeschreibung mit WSDL- und XSD-Dateien, sondern auch auf die Implementierung selbst.
Insbesondere die Frage wie unterschiedliche Serviceversionen bereitgestellt werden, sind zu beantworten. Es existieren eine Reihe von Bestpractices in diesem Umfeld, die manuell auf die eigene
Serviceimplementierung angewandt werden können. Ferner ist zu beachten, daß Servicekonsumenten explizit die einzelnen Serviceversionen, durch Auswahl der entsprechenden URL, ansprechen
müssen. Durch Einsatz zusätzlicher Infrastrukturkomponenten, z. B. Oracle Service Bus, kann dieser Umstand jedoch vereinfacht werden.
In der SOA Suite unterliegen SCA’s automatisch einer Versionierung. Die Kennzeichnung der Version kann jedoch individuell gestaltet werden. Die einzelnen Serviceversionen sind sichtbar und können entsprechend verwaltet werden. Insbesondere kann definiert werden, welche Version per
Default mit der selben URL zur Ausführung kommt. Veraltete Serviceversionen können „deaktiviert“
werden.
Abbildung 10: Version für ein Composite definieren
Zu beachten ist in beiden Fällen, daß Services mit schreibenden Zugriff auf eine Datenbank eine
besondere Betrachtung benötigen. Das zugrundeliegende Datenbankschema muss auf jeden Fall
immer auch abwärtskompatibel zu allen noch verfügbaren Serviceversionen sein. Dieser Umstand
wird durch keine Infrastruktur automatisch sichergestellt. Insbesondere mehrere Versionen eines
Datenbankschematas zu verwalten ist nicht sinnvoll. Darüberhinaus ist eine Versionierung von
WSDL und XSD-Dateien, die beispielwiese nach dem Contract First-Ansatz definiert wurden, immer
eine manuelle Aufgabe und abhängig von den eingesetzten Entwicklungswerkzeugen.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 18 von 27
Entwicklungsprozess
Oftmals ist es erforderlich die Implementierung umgebungsabhängig für die Installation vorzubereiten (Deployment). Diese Anpassungen sind beispielsweise Konfigurationseinstellungen oder
URL’s.
Im Java EE-Kontext erfolgt der Einsatz von Buildwerkzeugen, z. B. Apache ANT oder Apache
Maven. Diese Werkzeuge bieten mehr oder minder komfortable Möglichkeiten diese Anpassung
beim Buildprozeß durchzuführen. Einmal eingerichtet, erfolgt die Anpassung immer automatisch
und schnell.
Im Umfeld der SCA-Entwicklung erfolgen solche Anpassungen durch die Nutzung von Configplänen.
Das Konzept folgt den gleichen Ansätzen wie z. B. bei ANT oder Maven.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 19 von 27
Security
Das Thema Security ist sehr umfangreich und hat viele Aspekte. In diesem Abschnitt wird lediglich
der Zugriff auf einen Webservice (Authentifizierung) und Absicherung der Nachrichten eingegangen.
Ein Java EE-basierter Webservice wird in Form einer Enterprise Applikationen in einen Java EEServer installiert. Somit kann der im Java EE-Kontext die Authentifizierung alleine durch Deklarationen (Java EE-Rollen in web.xml) an den Java EE-Container delegiert werden. Das ist für den
Webservice völlig transparent. Deneben existieren eine Reihe von Security Standards im Webserviceumfeld. Die Umsetzung und Nutzung dieser Standards ist abhängig vom eingesetzten Framework oder Produkt. Oftmals erfolgt die Definition der Securityeinstellungen über Annotationen in
der Serviceimplementierung. Darüberhinaus ist festzustellen, daß der Oracle Webservice Manager
auch für Java EE-basierte Services genutzt werden kann, sofern diese in einer WebLogic Server
Infrastruktur verwaltet werden (siehe nächster Abschnitt).
Der Oracle Webservice Manager ist in die Oracle SOA Suite integriert. Mit dem OWSM können diverse Serviceaspekte über Policies geschützt werden, z. B. SAML-Authentifizierung in Verbindung
mit Nachrichtenverschlüsselung. Die Definition der Securityeinstellungen erfolgt deklarativ zur Designtime im JDeveloper. Ferner besteht auch die Möglichkeit, die Security automatisch oder manuell zur Laufzeit in der Infrastruktur zu definieren (Nutzung von PolicySets). Somit kann sich der
Entwickler auf die Implementierung der Businesslogik im Service konzentrieren.
Abbildung 11: Security-Policy zu einem Service hinzufügen
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 20 von 27
Management und Betrieb
Die Architektur eines Java EE-basierten Webservice ist einfacher zu überwachen und besteht oftmals aus folgenden Komponenten:
•
eventl. einer Datenbank für die Anwendungsdaten
•
Java EE-Server
•
Enterprise Applikation für das Deployment (ear-Datei)
Die Java EE-Technologie ist weit verbreitet und etabliert. Darüberhinaus gibt es eine Vielzahl von
Best Practices in diesem Umfeld. Ein Java EE-basierter Webservice ist auf allen Standard-Java EEContainern grundsätzlich betreibbar.
Jedoch ist zu beachten, daß ein End-to-End Monitoring nicht möglich ist. Die prinzipiell verfügbare
Monitoring-Möglichkeiten hängen von der verwendeten Infrastruktur ab. Der interne Ablauf eines
Java EE-basierten Webservices wird nicht visualisiert. Vielfach erfolgt die Analyse des Ablaufs durch
Betrachtung der diversen Logfiles. Problematisch sind u.U. unterschiedliche implementierte Logging-Strategien in den diversen Webservices, z. B. log4j, java-logging,...
Die SCA-Infrastruktur mit der SOA Suite erlaubt ein End-to-End Monitoring von SCA-Services. Im
einzelnen besteht die Möglichkeit, den Zustand der einzelnen Serviceinstanzen zu überwachen.
Ferner kann der Ablauf und Daten von einzelnen Serviceinstanzen jederzeit eingesehen und überprüft werden. Insbesondere kann der Prozessablauf grafisch visualisiert werden. Darüberhinaus
können im Error-Hospital fehlerhafte Serviceinstanzen wieder angestartet werden.
Abbildung 12: Monitoring von Composites im Enterprise Manager
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 21 von 27
Ein wichtiger Bestandteil in der SOA Suite ist das sog. Fault Framework. Mit diesem kann zentral
das Fehlermanagement für SCA-Service deklarativ konfiguriert werden. Somit kann eine einheitliche Fehlerbehandlung für alle installierten SCA-Services erfolgen.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 22 von 27
Fazit
Mit dem Java EE-Standard steht eine bewährte Technologie für die Servicentwicklung zur Verfügung. Daneben existiert mit SCA ein noch junger Standard, der noch nicht von allen Herstellern
100%ig unterstützt wird. Beide Technologien haben in Bezug auf die Entwicklung von Services ihre
Stärken und Schwächen. Somit kann weder der einen noch anderen Technologie der Vorzug gewährt werden. Vielmehr ist der Einsatzzweck der entscheidende Faktor. Ferner ist festzustellen,
daß es durchaus sinnvoll ist, beide Technologien im Rahmen der Serviceentwicklung zu nutzen. Ein
mögliches Szenario ist beispielweise die Elementarservices auf Basis von Java EE zu entwickeln und
aber der Ebene der Composed Services SOA Suite zu nutzen. Nachfolgend sind die möglichen Entscheidungskriterien tabellarisch zusammengefaßt:
Kriterium/ Technologie
SCA
Java EE
Infrastruktur (Runtime)
benötigt komplexe Infrastruktur:
• Applikationsserver
• Service Infrastruktur
• Datenbank
Applikationsserver ausreichend
Synchron
einfach zu implementieren
einfach zu implementieren
Asynchron
Nutzung empfehlenswert
Nutzung nicht empfehlenswert
Elementar Service
einfach
einfach
Composed Service
Empfehlung
• komplexe Logik mit Verzweigungen
• mehr als 2 Services in einer Sequenz und Transformation der Datenmodell
Empfehlung
Empfehlung: BPEL oder BPMN
Nutzung nicht empfehlenswert
Empfehlung: EDN
Nutzung nicht empfehlenswert
nur JDeveloper
jede Java EE-Entwicklungsumgebung
MEP
Serviceklassifizierung
Prozess Services
Event-Driven SOA
bis max. 3 Services in einer Sequenz
und geringer Transformationslogik
Serviceentwicklung
Werkzeug
+ Frameworks
Entwicklung
oft deklarativ, unterstützt durch viele
Wizzards
Manuelle Entwicklungs, ggf. WizzardUnterstützung je nach Framework
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 23 von 27
und IDE
Integration
XSLT-Mapper und Adapter, z. B. Datenbank, FTP etc. verfügbar
manuelle Integration notwendig
Lifecyclemanagement
Versionierung von SCA’s durch Infrastruktur bereitgestellt.
Versionierung muss manuell definiert
und umgesetzt werden.
Security
über Java EE und OWSM möglich
über Java EE und OWSM möglich
Management und Betrieb
End-to-End Monitoring für alle SCA’s
gleichermaßen möglich
End-to-End Monitoring muss manuell
programmiert werden.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 24 von 27
Glossar
BEGRIFFE UND
ABKÜRZUNGEN
BESCHREIBUNG
SOA
Serviceorientierte Architektur
Eine serviceorientierte Architektur ist ein Konzept für eine Systemarchitektur, in welchen Funktionen in Form von wiederverwendbaren, voneinander unabhängigen und lose gekoppelten Services
implementiert werden.
WSDL
Webservice Description Language
Auszeichnungssprache auf Basis XML für die Definition von Serviceschnittstellen.
SCA
Service Component Architecture
Ist eine Sammlung von Spezifikationen, die ein Modell für
serviceorientierte Architektur beschreiben.
Synonym: Composite
eine
EJB
Java Enterprise Beans
Spezifiziert ein Komponentenmodell für die Entwicklung von verteilten Serveranwendungen, die in einem JEE-Container betrieben
warden können.
JCA
Java Connector Architecture
Definiert eine Architektur um Anwendungen in die JEE-Plattform zu
integrieren.
JMS
Java Messaging Serv ABKÜRZUNGEN ice
Definiert eine Programmierschnittstelle, um Nachrichten in Verbin
dung mit einer Message Oriented Middleware (MOM) zu empfangen
und zu senden.
FMW
Oracle Fusion Middleware
Middleware-Plattform von Oracle
MDS
Master Data Services
Zentraler Service, innerhalb der FMW, zum Verwalten von Konfigu
rationseinstellungen und Customizations. Das MDS wird durch di
verse FMW-Produkte, z. B. Oracle SOA Suite verwendet.
BPEL
Business Process Execution Language
Eine XML-basierte Sprache zum Orchestrieren von Webservices.
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 25 von 27
ADF-BC
Application Development Framework – Business Component
Framework für die Erstellung von JEE-Anwendungen mit deklarativem Ansatz. Business Component ist ein Modul innerhalb von ADF,
daß den Zugriff auf Datenbanken kapselt.
BAM
Business Activity Monitoring
Ermöglicht die Ermittlung und Darstellung von Kennzahlen zu SOAApplikationen.
REST
Represential State Transfer
Beschreibt Architekturkonzepte für Netzwerke mit dem Ziel eines
einfachen und zustandslosen Zugriffs auf Ressourcen. Häufig auf
Basis des HTTP-Protokolls realisiert (GET, PUT, POST, DELETE).
RPC
Remote Procedure Call
MEP
Message Exchange Pattern
EDN
Event Delivery Network
EDA
Event Driven Architecture
ETL
Extract Transform Load
OWSM
Oracle Webservice Manager
Referenzen
•
Open CSA bei OASIS
(http://www.oasis-opencsa.org/sca)
•
JEE 6 Technologies
(http://www.oracle.com/technetwork/java/javaee/tech/index.html)
•
SOA Suite Developer’s Guide 11.1.1.5
(http://docs.oracle.com/cd/E21764_01/integration.1111/e10224/toc.htm)
•
Webservices Adressing Working Group
(http://www.w3.org/2002/ws/addr/)
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 26 von 27
Autor: Markus Lohn
esentri AG
Pforzheimer Straße 132
DE – 76275 Ettlingen
Tel +49 (0) 7243 / 354 90 0
Fax +49 (0) 7243 / 354 90 99
[email protected]
www.esentri.com
© 2013 esentri AG
Technical White Paper - Services mit Oracle SOA Suite oder Java EE implementieren, Seite 27 von 27
Herunterladen