Webservices - Department of Information Systems

Transcription

Webservices - Department of Information Systems
Praktische Informatik in der Wirtschaft
Westfälische Wilhelms-Universität Münster
Prof. Dr. Herbert Kuchen
05. Juni 2007
3. Übung zum Praktikum Enterprise Application Integration“
”
im Sommersemester
2007
Abgabe: 16. Juni 2007, 2359 Uhr.
Integration der Applikationen
Die größten Kunden fragen mitunter größere Stückzahlen einer Ware nach, als ein Betrieb
liefern kann. Aus diesem Grund sollen die einzelnen Systeme integriert werden. Das
Management erhofft sich, dass Kunden mit hohem Bedarf nicht auf das Angebot der
Konkurrenz zurückgreifen, sondern ihn komplett bei Mega Mampf decken können. In der
ersten Ausbaustufe sind nur die Standorte Münster (realisiert mit EJB) und Osnabrück
(realisiert mit .NET) betroffen.
Aufgabe 3
(30 Punkte)
Damit die Integration überhaupt gelingen kann, muss der Kundenstamm in beiden
Systemen synchron sein. Um dieses Ziel zu erreichen, sollen neue Benutzer und
Organisationen zukünftig in beiden Systemen angelegt und gepflegt werden. Stellen Sie
die entsprechenden Möglichkeiten als Webservices zur Verfügung. Für den Benutzer
transparent soll das Anlegen neuer Nutzer und Organisationen nicht nur lokal geschehen; vielmehr soll von der Geschäftslogik der Webservice der zweiten Applikation
aufgerufen werden, der den Vorgang dort auch ausführt. Diese Funktion soll sowohl in
Münster, als auch in Osnabrück zur Verfügung stehen. Denken Sie bitte an eine geeignete Absicherung der Webservices - sie sollten nicht ohne Authentifizierung nutzbar sein.
Die redundante Datenhaltung birgt sicherlich Probleme, soll aber zunächst für Mega
Mampf ausreichen.
Aufgabe 4
(20 Punkte)
Wenn die von einem Kunden bestellte Menge von einem Standort nicht bereitgestellt
werden kann, kann diese eventuell durch den zweiten Standort gedeckt werden. Stellen
Sie daher die Möglichkeit, Bestellungen aufzugeben, per Webservices zur Verfügung.
Veranlassen Sie, im Falle eines Engpasses (serverseitig) zu überprüfen, ob genügend
Waren am zweiten Standort verfügbar sind und leiten Sie die Bestellung in einem
solchen Fall komplett weiter. Ignorieren Sie eventuell unterschiedliche Preise und legen
Sie die Preise vom Ausgangsstandort zugrunde.
1
Anmerkungen zur Abgabe:
• Beachten sie bitte die Hinweise der vorherigen Übungen bezüglich der Benennungskonventionen etc. und bauen Ihre Lösung auf Ihre Ergebnisse der ersten und zweiten Übung auf. Planen Sie dabei ein, dass auch die vierte Übung wieder eine
Erweiterung darstellen wird.
• Sollten Sie bei den ersten beiden Übungen Angaben getroffen oder Implementierungsmöglichkeiten gewählt haben, die die Weiterentwicklung erheblich erschweren, können Sie auch unsere Musterlösung oder eine der anderen veröffentlichten
Lösungen als Basis nehmen. Bitte stellen Sie in diesem Fall aber sicher, dass Ihre
Ergänzungen und Veränderungen gekennzeichnet sind.
• Bitte lösen Sie die Aufgaben so simpel wie möglich.
• Für Fragen steht nach wie vor das Forum unter http://openuss01.
uni-muenster.de/Welcome.po zur Verfügung.
• Bitte schicken Sie die Quelltexte Ihrer Applikation möglichst als komprimiertes
Archiv des Projektordners bis zum Abgabetermin an [email protected].
de. Denken Sie an ausreichende Dokumentation des Quellcodes. Falls Funktionen
Ihrer Applikation einer Erklärung bedürfen, erklären Sie diese bitte kurz in einem
zusätzlichen Dokument. Bitte deployen Sie ihr Java-Projekt wieder auf wi-vm573.
• Weitere organisatorischen Richtlinien und Termine zur Veranstaltung entnehmen
Sie bitte der Seite http://www.wi.uni-muenster.de/pi/lehre/ss07/EAI/
index.php.
Tipps zur Entwicklung:
• Die dritte Übung ist kniffeliger, als es zunächst aussieht: Zwar reichen theoretisch einfache Annotationen der Quelltexte, um eine Webservice-Funktionalität
zur Verfügung zu stellen, tatsächlich steckt der Teufel aber im Detail. Planen Sie
daher ausreichend Zeit zum Testen ein. Bedenken Sie auch, dass insbesondere bei
Java viele Wege zum selben Ziel führen, allerdings mit mitunter erheblich größerem
Aufwand.
• Auch wenn Webservices theoretisch in hohem Maße standardisiert sind, werden
Sie möglicherweise gemeinsame Nenner“ suchen müssen. Nicht alles, was Java
”
problemlos nutzen kann, ist für .NET zu verwerten und umgekehrt.
• Grundsätzlich sollten Sie mit den eingebauten Funktionalitäten von EJB bzw.
.NET arbeiten können. Arbeiten Sie auf einem möglichst hohen Abstraktionsgrad
in Bezug auf SOAP und WSDL.
• Java verarbeitet im Rahmen von Webservices grundsätzlich nur einfache Datentypen wie Integer oder Strings; Arrays oder allgemein Objekte, die keine Umwandlung in Basistypen erlauben, benötigen ein so genanntes Type Mapping“. Sie
”
2
können sich entweder – eventuell mit Toolunterstützung – um dieses Zuordnung
kümmern, oder versuchen, mit einfachen Datentypen auszukommen.
• Mit Java auf die EJB-Webservices zuzugreifen ist relativ problemlos möglich. Der
Zugriff auf die .NET-Webservices ohne Toolunterstützung ist es hingegen nicht, da
zahlreiche zusätzliche Objekte benötigt werden, die im Vorfeld generiert werden
müssen. Gut für diesen Zweck geeignet ist z.B. wsimport aus dem JAX-WS RI Paket (https://jax-ws.dev.java.net/).
• Ihr Java-Projekt wird als zusätzliche JAR-Datein die jboss-saaj.jar und die
jbossws-client.jar auf dem client-Verzeichnis Ihres JBoss benötigen, ebenso die
Web Services 1.0 Libraries des JBoss-IDE. Falls Sie JAX-WS RI nutzen, müssen
Sie zudem jaxws-api.jar und jaxb-api.jar einbinden, in der Regel zudem jsr181api.jar. Diese finden Sie im \lib-Verzeichnis von JAX-WS RI.
• Aufgrund einer Inkompatibilität kann es vorkommen, dass bei einem installierten
1.6er JDK der Zugriff auf die auf dem JBoss deployten Webservices fehlschlägt.
Sie erhalten dann (in der Konsole) eine Exception, die wie folgt lautet: setProper”
ty must be overridden by all subclasses of SOAPMessage“. In diesem Fall reicht
es, ein 1.5er JDK einzubinden, das Problem verschwindet damit. Empfehlenswert
ist z.B. das jdk-1 5 0 11. Im Web finden sich auch Anleitungen, bestimmte JARDateien der JBoss-Installation auszutauschen, da nur diese inkompatibel seien.
Dies blieb trotz umfangreicher Versuche beim Erstellen der Musterlösung ohne Erfolg; wir empfehlen daher, das ältere JDK parallel zu installieren und ausschließlich
in den Debug“-Einstellungen als JDK für den JBoss anzugeben. Als Basis-JDK
”
für Eclipse können Sie ohne Probleme das aktuellste 1.6er nutzen. Der JBoss auf
wi-vm573 läuft unter der Version 1 5 0 11 des JDK.
• Wir empfehlen überdies, das neueste stabile Release des JBoss zu verwenden. Die
Version 4.2.0 kann zwar durchaus kleinere Anpassungen bestehender Projekte nötig
machen, sollte aber näher an geltenden Standards arbeiten. Einige Implementierungsprobleme mit den Webservices konnten wir durch das Upgrade lösen. wivm573 wird ebenfalls noch auf die Version 4.2.0 aktualisiert werden.
• Falls Sie den neuen“ JBoss verwenden, ist es möglich, dass Webservices nicht mehr
”
deployed werden, weil es einen Konflikt mit dem context-root gibt. Anders als der
die Version 4.0.5 wird nicht der Name der JAR-Datei, die die EJBs beinhaltet,
als Pfad zugrunde gelegt. Um dieses Problem zu lösen, geben Sie den Pfad explizit an: Ergänzen Sie in der Implementierung unter der @WebService-Annonation
@WebContext(contextRoot= /GruppexyUebung3WS“, secureWSDLAccess=false).
”
Den Pfad können Sie natürlich variieren; er sollte aber zur Vermeidung von Konflikten mit anderen Gruppen Ihre Grupennummer beinhalten.
• Um mit derselben Weboberfläche auf eine beliebige Zahl von funktional identischen, aber in anderen Programmiersprachen implementierten Webservices zugreifen zu können, bieten Interfaces und eventuell Fassaden gute Dienste. Günstig eingesetzt, können Sie die gesamte Darstellungslogik der ersten beiden Übungen über-
3
nehmen und müssen nur den Aufruf der Geschäftslogik auf Webservices umstellen.
Dies ist allerdings auch wesentlich von Ihren bisherigen Ergebnissen abhängig, da
sich einige Konstrukte nur schwierig übernehmen lassen werden. Dies gilt z.B. für
einen direkten Durchgriff auf die Datenbank in den GridViews von .NET.
• Die Möglichkeit von Visual Studio, Webverweise zu erstellen, ist sehr hilfreich.
Wenn sie etwas an der darunterliegenden Logik ändern, müssen Sie den entsprechenden Webverweis allerdings aktualisieren. Achten Sie dabei darauf, dass im Projekt keine mit diesem Verweis in Zusammenhang stehenden Fehler sind. In einem
solchen Fall ist es möglich, dass der scheinbar aktualisierte Webservice weiterhin
auf dem alten Stand ist. Sie müssen also erst die fehlerhaften Zeilen auskommentieren und danach eine erneute Aktualisierung anstoßen.
• Die URL der Webservices bei .NET läßt sich in Erfahrung bringen, indem Sie im
Projektmappen-Explorer mit rechts auf das Projekt klicken und Webverweis hin”
zufügen“ wählen. Im sich öffnenden Fenster klicken Sie auf Webdienste in dieser
”
Projektmappe“, wählen einen Dienst aus und klicken – eventuell nach Ändern des
Namens – auf Verweis hinzufügen“. Anschließend suchen Sie den neuen Verweis
”
im Projektmappen-Explorer unter Web References“ und klicken ihn mit rechts
”
an. Im sich nach einem Klick auf Eigenschaften“ öffnenden Fenster finden Sie die
”
Webverweis-URL“.
”
• Um die URL von EJB-Webservices zu ermitteln, müssen Sie das entsprechende Projekt lediglich auf dem JBoss deployen. Kurz vor Abschluss des Vorgangs erhalten Sie in der Konsole eine Erfolgsmeldung
für jeden Webservice:
[ServiceEndpointManager] WebService started:
”
http://localhost:8080/Uebung3WS/LoginVerwaltungBean“
• Natürlich ließen sich die entsprechenden URLs auch aus den Positionen der maßgeblichen Dateien in den Projekten ableiten, aber die beiden beschriebenen Wege
sind die einfachsten. Beachten Sie auch, dass zur Verarbeitung in der Regel noch
?wsdl an die URL gehängt werden muss, da der aufgerufene Dienst nur so das
zugehörige WSDL-Dokument erzeugt.
• Von Webservices geworfene Exceptions werden mitunter umverpackt“. Es emp”
fiehlt sich, sie vor der Ausgabe noch nachzubearbeiten, um für den Benutzer
unnötige Informationen herauszufiltern. Dazu ist eine Fallunterscheidung hilfreich
(wurde die Exception von einem Java- oder einem .NET-Webservice geworfen?),
zur Nachbearbeitung reichen dann einige wenige Zeilen, die die Nachricht der Exception entsprechend kürzen.
• Vorsicht mit den Namesräumen (Namenspace) von Webservice - hier dürfen Sie
keine Portnummer mit angeben, sonst sind unerwartete Resultate möglich.
• Nutzen Sie das Forum! Vieles, was sich über Google & Co an Artikeln, Fehlerbeschreibungen etc. finden lässt, ist hoffnungslos veraltet oder wenig zweckmäßig.
4