SWISS ORACLE USER GROUP www.soug.ch Newsletter 4/2011 Oktober 2011 · Aktiv/Passiv Failover Clustering · Implementierung von Web Services in Oracle DB Anwendungen · Von Oracle Forms zu Oracle ADF und JEE · SnapManager für Oracle · New Features in Oracle APEX TIPS&TECHNIQUES 11 Magdalena Serban, Bahar Us und Andreas Gaede, PITSS GmbH Von Oracle Forms zu Oracle ADF und JEE Modernisierung von Oracle Forms Anwendungen auf das Oracle Application Development Framework und die JEE Architektur. Doch zunächst einmal: Warum JEE? Warum ADF? Was spricht für den Wechsel? Oracle bietet heutzutage ein umfassendes Sortiment an Entwicklungslösungen, wobei die technischen Möglichkeiten zur Erstellung neuer Anwendungen nahezu unbegrenzt sind. Doch was geschieht mit bestehenden Legacy Anwendungen basierend auf Oracle Forms? Lassen sie sich in die neue JEE Architektur integrieren? In welchem Umfang lässt sich ein Nutzen aus den neuen Technologien ziehen und gleichzeitig das kostspielige und riskante Unterfangen vermeiden, Anwendungen ganz neu zu schreiben? Dieser Artikel geht näher auf diese Fragen ein. Des Weiteren wird ein Überblick sowohl über die Chancen als auch über die Herausforderungen geboten werden, die mit einem solchen Wechsel der Software Architektur einhergehen. Das Internet ändert unsere Geschäftsabläufe wie nie zuvor und damit auch die Anforderungen, die die Anwender an die Software haben. Die meisten Anwendungen, die wir im Laufe der vergangenen Jahre mit Forms entwickelt haben, lassen sich durch geeignete Werkzeuge meist kostengünstig auf die neuste Forms Version anheben und damit Web-fähig machen. Es gibt jedoch Szenarien in Geschäftsabläufen, die durch eine webbasierte Architektur noch besser erfüllt werden können, wie z.B. reichhaltiger gestaltete Anwenderoberflächen oder Datenhaltung in der Logikschicht usw. Für solche Szenarien empfiehlt Oracle, die Applikation gemäss der JEE Architektur neu zu schreiben und mit den restlichen Modulen auf dem Anwendungsserver zu integrieren. JEE verspricht auf lange Sicht eine leichtere Pflege der Anwendungen aufgrund von offenen Standards und vereinfachter Integration mit anderen Produkten. Allerdings erscheint JEE den Datenbankentwicklern trotz der Vorteile komplex und schwierig. Oracle Forms Entwickler (oder allgemeiner 4GL Entwickler) sind eine äusserst hohe Produktivität gewohnt, die sich mit JEE so nicht erreichen lässt. Hier ist es schwierig, Kunden die gleichen kurzen Entwicklungszeiten zu bieten, die sie gewohnt sind. Aus diesem Grund empfiehlt Oracle das Oracle Application Development Framework (ADF), um die JEE Design Pattern (Model View Controller, MVC) einfacher zu implementieren. Mit seiner visuellen, selbsterklärenden Umgebung erlaubt ADF schneller Code zu schreiben und die Entwicklungszeit zu reduzieren. Aber ist das alles wirklich so einfach, wie es scheint? Die Herausforderung: Neuentwicklung Das Rezept für ein erfolgreiches ReEngineering Projekt von Forms nach ADF lautet: Stellen Sie sicher, dass Sie über ein sehr gutes Verständnis der bestehenden und neu zu erstellenden Forms Applikation in ihrer gesamten Komplexität verfügen – Legacy Anwendungen wurden vor langer Zeit entwickelt und haben oftmals eine erhebliche Grösse und Komplexität erreicht. In vielen Fällen sind die damaligen Forms Entwickler nicht mehr im Unternehmen und die notwendigen Dokumentationen unzureichend oder überhaupt nicht vorhanden. Die Java Entwickler, welche für die Neuerstellung der Anwendung zuständig sind, tun sich oft schwer, die Komponenten, deren Verknüpfungen vollständig zu verstehen und benötigen unter Umständen Schulungen zum Verhalten der laufenden Forms-Anwendung. Eignen Sie sich umfassende Kenntnisse der neuen Technologien an und überführen Sie den bestehenden Funktionsumfang in die neue Architektur bei gleichzeitiger Verbesserung – dies ist eine anspruchsvolle Aufgabe, weil Forms und JEE von Grund auf unterschiedlich sind. Darüber hinaus ist die Migration der Applikation nur dann erfolgreich, wenn die neue Version anwendungsfreundlicher ist und über bessere technische Fähigkeiten verfügt, wie z.B. eine intuitivere Oberfläche. Es sollte schliesslich nicht das Ziel sein, dass die hohe Investition in das Modernisierungsprojekt, lediglich eine exakte 1 zu 1-Kopie der ursprünglichen Anwendung hervorbringt. SOUG Newsletter 4/2011 12 TIPS&TECHNIQUES Etablieren Sie ein Projektmanagement, um den Fortschritt der Migration zu planen und zu überwachen – Software Projekte auf Grundlage neuer Technologien scheitern oft an unvorhergesehenen Problemen, an Erfahrungsmangel und an fehlenden Implementierungsstandards. Es empfiehlt sich das Projekt kontinuierlich und gewissenhaft auf bekannte Beschränkungen im Hinblick auf Zeit, Budget und Qualität zu überwachen, um den Erfolg von Beginn an zu gewährleisten. Hinter diesen drei einfachen Zutaten werden die wirklichen Herausforderungen sichtbar: Kompetenzen Gemischtes Kompetenzprofil: Kenntnisse sowohl von PL/SQL und Forms als auch von Java, JavaScript, XML und JEE sind für ein erfolgreiches Projekt unverzichtbar. Java Kenntnisse dürften auf dem Markt einfach zu finden sein, aber der ausschlaggebende Faktor ist das Verständnis sowohl der Forms Komplexität als auch der neuen Technologie samt dessen Zielarchitektur. Anwenderoberfläche Anpassung an die Stärken und Schwächen des Internet Modells: im Gegenzug zur höheren Benutzerfreundlichkeit weisen browserbasierte Anwendungen auch gewisse Einschränkungen auf. Oracle Forms bietet eine äusserst dateneffiziente Architektur, die es möglich macht, in einem Applet Tausende von Datensätzen abzufragen, Hunderte von Feldern auf einer Seite anzuzeigen, auf Client Rechner zuzugreifen sowie Dateien via Host Anweisungen zu bearbeiten. Daher muss eine typische Forms Applikation umgestaltet werden, um in einem einfachen Browser zu laufen – etwa, indem die Datensätze in Gruppen von je 20 angezeigt, die hunderte von Feldern auf verschiedene Seiten verteilt oder die Zugriffe auf den Client Rechner verringert werden. SOUG Newsletter 4/2011 Anwendungen, die sich nicht auf diese Weise anpassen lassen, sollten durch einen Upgrade auf die neueste Forms Version angehoben werden, bis die neue Technologie dies in geeigneter Form unterstützt. Business Logik Forms Anwendungen besitzen oft eine eng verzahnte Logik, die innerhalb eines Codesegments beispielsweise Business Logik mit Aktionen der Anwendungsoberfläche, Datenvalidierung, Datenbearbeitung usw. vereint. Bei der Übertragung eines solchen Codesegments nach ADF muss die Logik in ihre Komponenten aufgetrennt und nach dem MVC Design Patter neu definiert werden, damit eine echte ADF Architektur entstehen kann. Abbildung 1: gemischte Business Logik am Beispiel eines Triggers in einer Forms Applikation Lösungsansätze für die Logik sind: Umsetzung des gesamten Codes in Java – ein solcher Ansatz wäre nur dann erfolgreich, wenn der Code zu 100% von Hand umgeschrieben würde. In einem solchen Fall ginge die gesamte Investition in der Forms Business Logik verloren. Es gibt zwar Tools auf dem Markt, die eine automatische Konvertierung des gesamten Oracle Forms Codes nach Java versprechen, aber der so erzeugte Code ist sequenziell und prozedural wie PL/SQL und nicht objektorientiert, wie Java Code eigentlich sein sollte. Ein so generierter Code enthält das gleiche Gemisch wie der ursprüngliche Code, bestehend aus Datenverarbeitung, Business Logik, Aktionen der Anwenderoberfläche oder gar Runtime-Befehle, die zu eigentümlichen, komplexen Java-Konstrukten führen. Dieser Code ist schwer verständlich und erfüllt in den meisten Fällen nicht die Erwartungen an Java konforme Codes. Eine Pflege des Java- TIPS&TECHNIQUES Codes ist selbst nach Bereitstellung der proprietär eingebrachten Elemente kaum denkbar. Der Hauptgrund, warum dies nicht als der geeignete Lösungsansatz erscheint, liegt jedoch darin, dass wir hier von Datenbankanwendungen ausgehen müssen, deren Business Logik direkt auf grosse Datenmenge angewendet wird. Somit ist ein Grossteil der Logik weit besser in der Nähe der Daten in der Oracle Datenbank aufgehoben als in der Präsentationsschicht. Beibehaltung der Business Logik in PL/SQL und Ablage in die Datenbank – der Code für Datenzugriffe oder Datenbearbeitung ist in der Regel in der Datenbank schneller und reduziert dort den Datenverkehr im Netzwerk auf ein Minimum. PL/ SQL hat sowohl in Oracle Forms Anwendungen als auch in der Datenbank alle im Laufe der Jahre angefallenen geschäftlichen Anforderungen gemeistert und wird das auch in Zukunft in gewohnt zuverlässiger, performanter Weise tun. Ein solcher Ansatz stellt eine enorme Risiko-Minimierung dar. Migriert man nach JEE, dann sind natürlich nicht alle Code Segmente zur Verwendung in der Datenbank geeignet, wie Code für die Anwender Oberfläche, Navigationscode und Feld-Validierungen. Diese sind näher an der Präsentationsschicht. 13 A N Z E I G E gloBâle Services Individuelle Softwarelösungen Business Intelligence Application Engineering Seit 10 Jahren local, in Ihrer weltweiten Nähe. The local player for global solutions [email protected] www.irix.ch Dornacherstrasse 192 CH – 4053 Basel Dank dieser tiefen Kenntnis der Applikation kann PITSS.CON die Anzahl der Forms Komponenten enorm erhöhen, die in natürlicher Form in die ADF Welt überführt werden. Die kombinierte Strategie – Code für die Anwenderoberfläche in Java, Datenbearbeitung in der Datenbank. Dies ist die Lösung, die wir klar empfehlen und im folgenden Abschnitt näher erläutern werden. T 061 367 93 33 Architektur Der grösste Teil der Business Logik (BL) in Forms gilt der Bearbeitung von Daten. Die diesbezügliche Logik gehört selbstverständlich in die Oracle Datenbank. PITSS.CON unterstützt die Transformation der datenintensiven Business Logik in die Datenbank und erzeugt dort Die PITSS.CON Lösung PITSS.CON lädt die Forms und Reports Anwendungen samt Datenbankschemata ins Repository, parst die Programmstrukturen und den gesamten Code und erstellt daraus feingranulare Metadaten mit allen applikations-relevanten Objekten und deren Abhängigkeiten. Abbildung 2: PITSS.CON Forms zu ADF Migration einen Business Logik Layer (BL Layer). Nach der Transformation des Codes von Forms und Reports in die Datenbank ist diese BL Layer nicht mehr nur SOUG Newsletter 4/2011 14 TIPS&TECHNIQUES den Oracle Forms und Reports Programmen zugänglich, sondern auch von Oracle ADF und Oracle APEX aus ausführbar oder kann als Web Service (WS) angeboten werden. Damit ist die neugeschaffene BL von anderen Technologien verwendbar und kann hinter unterschiedlichsten Oberflächen, BEPL Prozessen und innerhalb des Enterprise Service Bus ESB einer SOA seine Aufgaben wahrnehmen. Dies stellt nicht nur einen enormen Schutz Ihrer Investitionen dar, sondern steigert nachhaltig den Wert, durch Wiederverwendbarkeit und Rückführung redundanten Codes zu zentral organisierten Funktionen. Reduzierung der Wartungsaufwände, effiziente Weiterentwicklung und Oberflächenunabhängigkeit sind weitere positiv begleitende Merkmale dieses Ansatzes. Zukünftige Anpassungen oder Modernisierungsvorhaben lassen sich leichter realisieren. Das Ablegen der Business Logik in der Datenbank unterstützt den gesamten langläufigen Migrationsprozess in optimaler Weise, da der neu erzeugte, neu strukturierte und effizientere Code sowohl in der Forms wie auch in der entstehenden ADF Applikation zum Einsatz kommt. Das schrittweise Migrieren führt zu besser getestetem Code, minimiert die Migrationsrisiken und beschleunigt so den Gesamtprozess. Ein weiterer Aspekt dieses Ansatzes ist die Implementierung einer Serviceorientierten Architektur (SOA), denn im gesamten SOA Konzept geht es gerade um die Wiederverwendung und Integration von Komponenten. Die noch verbleibenden Forms Komponenten werden durch den «ADF Assistant» in das ADF MVC Pattern basierend auf ADF Faces, JSF und ADF Business Components überführt. Prozess Abbildung 3: Prozess Applikationsanalyse – der erste Schritt besteht darin, sämtliche Module ins PITSS.CON Repository zu laden, um eine genaue Analyse durchzuführen. PITSS.CON lädt in sein Oracle-basiertes Repository nicht separate XML-Versionen der Forms-Modulen sondern alle verwendeten Quelldateien: FMB, MMB, PLL, OLB, RDF, SQL usw. sowie deren Datenbank-Schemen. Alle diese «Puzzleteile» sind wichtig, um eine korrekte Anwendungsanalyse auszuführen. Abbildung 4: Typische FormsAnwendungskomponenten Abbildung 5: PITSS.CON Forms Flow Analysis SOUG Newsletter 4/2011 In dieser Phase wird die Migrationsstrategie festgelegt, die sich nach der Beschaffenheit und der Komplexität der jeweiligen Applikation sowie den Anforderungen an die Oberfläche und dem Ausmass der Anpassung an die WEB Technologie richtet. Verringerung von Redundanzen und von unbenutzten Objekten – der nächste Schritt ist die Bereinigung der Applikation von nicht genutztem Code, so dass nur noch die Kernfunktionen erhalten bleiben. Dies ist der ideale Ausgangspunkt, um wieder die Kontrolle über die bestehende Applikation zurückzugewinnen, die Applikation auf das notwendige Minimum zurückzufahren und um eine tragende Dokumentation für die Reise in die Modernisierung zu erstellen. Unserer Erfahrung nach stellt sich in diesem Schritt heraus, das mindestens 20–30% der Applikationsobjekte redundant sind, ungenutzte Tabellen, Bibliotheken, mehrfach vorhandene oder ungenutzte Code Abschnitte oder sogar komplett obsolete Funktionen, wie beispielsweise Kalenderfunktionen TIPS&TECHNIQUES 15 für ein Datumsfeld, die in der neuen JEE Umgebung nicht mehr benötigt werden. Toolgestütztes Re-Engineering von Anwendungen nach ADF – nachdem die Anwendung um den Grossteil der darin enthaltenen Business Logik bereinigt wurde, kann die Nachbildung der Anwenderoberfläche nahezu auf Knopfdruck bewerkstelligt werden. Der «ADF Assistant» erzeugt automatisch die dazugehörigen ADF Objekte: Abbildung 6: PITSS.CON Unbenutzter Objekte-Analyse-Bericht Migration von Business Logik in die Datenbank – dieser Schritt ist die Grundlage für die erfolgreiche Modernisierung hin zu einer serviceorientierten Architektur. Hierbei lässt sich mit den folgenden Hilfsmitteln viel Zeit und Geld sparen: BL Assistant – extrahiert BusinessLogik aus dem Forms und Reports Code. PITSS.CON konstruiert die Code Kette, aus der sich ein Dienst, eine Funktion oder ein Prozess zusammensetzt, und zeigt visuell auf, inwieweit der Dienst in die Datenbank migriert werden kann. Der BL Assistant führt dann die Transformation durch und setzt den neu erzeugten Code wieder in der ursprünglichen Applikation ein. Die so entstandene Datenbank-Logik steht nicht nur jeder Forms Applikation zur Verfügung, sondern auch ADF Anwendungen, und lässt sich sogar als Web Service noch breiter verfügbar machen. Web Service Wizard – stellt jede gespeicherte Funktion als Web Dienst zur Verfügung und öffnet die Applikation damit für die Aussenwelt. Application Analysis und Application Impact – ermöglichen Ihnen, schnell und präzise auszuwerten, welche Auswirkungen eine geplante Änderung hat, nicht verwendeten oder problematischen Code zu erkennen und den Übergang in eine serviceorientierte Architektur reibungsloser zu gestalten. Abbildung 7: Beispiel einer Anwendung automatisch mit PITSS.CON ADF-Assistenten migriert s Geschäftsfunktionen mit ADF Business Components; s Datenobjekte, als Unterstützung für einfacheres Aufrufen der gespeicherten Business Logik von der ADF Applikation aus; s Abschluss der Model-, Viewund Controller-Schichten MVC, Analyse aller Komponenten der Forms Applikation – Fenster, Leinwand-Elemente, Blöcke, Objekte usw. und Erstellung der dazugehörigen ADF-Objekte unter Berücksichtigung jeder einzelnen Objekteigenschaft und deren Grösse, in dem dieses Objekt im ADF angelegt wird; s Generierung von Java Methoden für die Benutzeroberfläche durch die Übersetzung der PL-/ SQL-Business Logik in Java Code, wobei automatisch die Zuordnung von Variablen und das Aufrufen von gespeicherter Business Logik über die Datenzugriffsobjekte implementiert wird. SOUG Newsletter 4/2011 16 TIPS&TECHNIQUES Nachbearbeitungs-Prozess – Das Ergebnis des zuvor geschilderten Prozesses wird ausführlich und umfassend dokumentiert. Diese Dokumentation ist eine hervorragende Basis für Entwickler, die an der konvertierten Applikation arbeiten, um Schätzung hinsichtlich des noch benötigten Arbeitsaufwands für Feinabstimmungen zu gewinnen. In der Regel sind manuelle Anpassungen nach der Erstellung für die folgenden Aufgaben möglich: s Anpassung des Weblayouts – falls gewünscht, können die mit dem Tool erstellten Seiten mit Oracle JDeveloper weiter verfeinert werden s Neuordnung der Seitennavigation mithilfe vorgefertigter Komponenten s Verfeinerung und Aktivierung der vom Tool übersetzten Java Methoden s vollständige Definition der Komponenten, die sich nicht 100% toolgestützt generieren liessen, oder das Anbieten von Lösungen, mit denen sich die Beschränkungen des Web-Technologie umgehen lassen (beispielsweise Client Dateisystem oder Zugriff auf die Registry) rung von 20 – 30% zur Amortisation des Projektes beitragen Vorbereitung auf die neue Technologie durch das Beschaffen und Aneignen der erforderlichen Kenntnisse Start von Pilotprojekten – Migration nach ADF von Programmen, die externe Verwendung finden, auf die mit einem Browser zugegriffen werden soll; gleichzeitig Festlegung, welche Anwendungen in Forms bleiben müssen – meist Anwendungen für den internen Gebrauch, insbesondere, wenn sie datenintensiv sind oder sehr häufig die Interaktion des Anwenders erfordern. Der Weg von Forms zu ADF kann eine Herausforderung sein, ist aber auf jeden Fall wert: Die nebenstehenden Schritte sind in Migration Projekten für unsere Kunden angewandt. Und wir sind stolz zu sagen: Es ist uns jedes Mal gelungen, rechtzeitig eine gut funktionierende, moderne ADF-Anwendung zu erstellen. Die End-Benutzer lieben die ADF 11g Rich BenutzeroberflächeKomponenten; die Java-Entwickler mögen die klare, leicht verständliche Architektur. Diese erfolgreichen Kunden-Migrationsprojekte sind der lebende Beweis dafür, dass Oracle ADF in der Lage ist uns zu helfen leistungsfähige, zukunftsorientierte Oracle DatenbankAnwendungen zu erstellen. Fazit Wir sind uns bewusst, dass die Entscheidung zum Umstieg auf JEE und JDeveloper ADF einen wichtigen Schritt und eine grosse Herausforderung darstellt. Hier sind ein paar Schritte welche die typischen Risiken eines solchen Umstiegs erheblich minimieren können: Konsolidierung der Business Logik in die Datenbank – für welchen Lösungsansatz auch immer Sie sich entscheiden (Beibehaltung von Forms oder Umstellung auf ein anderes Framework), der erste Schritt der Risikominimierung besteht darin, die Business Logik zu konsolidieren, also von nicht genutzten Codes zu bereinigen und redundante Codes zusammenzuführen sowie diese in die Datenbank zu verschieben. Allein dieser Schritt kann mit einer Code-Reduzierung und -Konsolidie- SOUG Newsletter 4/2011 Abbildung 8: PITSS.CON Anwendungsanalyse-Bericht Schätzung des Arbeitsaufwands – Zahlreiche Kunden sind bereits auf uns zugekommen, nachdem sie mitunter mehrmals vergeblich versucht hatten, Legacy Anwendungen von Hand zu modernisieren und dafür ganze Mannjahre an Arbeitsaufwand und gewaltige Budgets investiert hatten – um am Ende mit einem enttäuschenden Ergebnis dazustehen. Contact PITTS GmbH Magdalena Serban E-Mail: [email protected] 24 TIPS&TECHNIQUES Florin Serban, PITSS GmbH Implementierung von Web Services in Oracle-Datenbankanwendungen Datenbearbeitungsanwendungen existieren seit dem Anfang der IT und unterstützen heutzutage die meisten unserer Geschäftsprozesse. Während dieser Zeit wurden die Anwendungen weiterentwickelt, um sich den ständig ändernden Geschäftsanforderungen anzupassen. In der Bestrebung nach schneller Entwicklung, Anpassung, Bugfixing und Patching ist die typische OracleDatenbankanwendung grösser und grösser geworden mit den Abbildung 1: Oracle Datenbank Anwendung Jahren und besteht nun aus einer Mischung von alten wie neuen Komponenten, geschrieben in verschiedenen Programmiersprachen und ausgelegt mit unterschiedlichen Architekturen. Eine unserer grössten Herausforderungen wird es sein, das Beste aus all diesen Komponenten herauszuziehen, neu zu strukturieren und in modernen, modularen Anwendungen interagieren zu lassen, sodass die heutigen und zukünftigen Geschäftsanforderungen flexibel unterstützt werden. Der aktuelle Artikel versucht Möglichkeiten aufzuzeigen, wie eine in die Jahre gekommene Oracle Forms Anwendung zu einem Teil einer modernen WebEntwicklungswelt wird. Da die Serviceorientierten Architekturen zunehmend an Bedeutung gewinnen, möchten wir aufzeigen, mit welchen Mitteln externe Anwendungen durch Implementierung von Web Services integriert werden können. SOUG Newsletter 4/2011 Ein paar Worte über Oracle Forms Anwendungen Oracle Forms ist ein solides und ausgereiftes Framework und wohl die meist verwendete Umgebung für die Entwicklung von Oracle Datenbankanwendungen in den letzten 20 Jahren. Seine Architektur wurde speziell für die schnelle und einfache Entwicklung von komplexen Datenbankanwendungen konzipiert. Doch vor 25 Jahren, als die Forms Architektur entworfen wurde, war die Interoperabilität von Anwendungen und die Kommunikation über Web Services noch kein wirkliches Thema. Deshalb ist es keine leichte Aufgabe, alte Oracle Forms Applikationen so zu modernisieren, dass sie mit externen Anwendungen interagieren: Als Web-Services Verbraucher besitzen Forms-Anwendungen, im Gegensatz zu modernen ADF oder APEX Anwendungen keine eigenen Mechanismen, um direkte Verbindungen zu Web-Services herzustellen. Forms kann nur indirekt auf Web Services mit Hilfe von Proxy Diensten oder Datenbank Web Services zugreifen. Beide Lösungen werden wir im Detail betrachten und darstellen, was besser zu unseren Anforderungen passt. Als Web-Services Anbieter: Wenn wir jedoch Forms-Funktionalitäten (= Business-Logik) als Web-Services öffentlich anbieten wollen, müssen wir den entsprechenden Source-Code in die Oracle Datenbank migrieren, um ihn von dort als WebService zu verwenden. Forms kann alleine wegen seiner kompakten Architektur diese Rolle nicht übernehmen. Hier werden wir aufzeigen, wie man in diesem Fall vorgehen kann und warum die Migration von Business-Logik in der Datenbank die Wiederverwendbarkeit des Source-Code erhöht und damit die zukünftigen Migrations- und Modernisierungsschritte unserer FormsAnwendungen ganz erheblich vereinfacht. Web Services aufrufen Wie bereits angesprochen, haben wir zwei Möglichkeiten, um auf externe Web-Services von Oracle Forms Anwendungen aus zuzugreifen: direkt TIPS&TECHNIQUES von Forms mit Hilfe eines Web-Service Proxy-Servers oder von der Oracle-Datenbank aus unter Verwendung seiner Web Service Utilities. Aufrufen von Web Services vom Oracle Forms Wie kann Oracle Forms auf externe Web Services zugreifen? Nun, Forms ist von Natur aus nicht in der Lage, direkt mit Web Services zu kommunizieren, jedoch kann es Java-Klassen innerhalb eines Web-Services Proxy kommunizieren. Der Proxy dient hierbei als Vermittler, denn er ist in der Lage, eine Verbindung zum eigentlichen WebService zu etablieren, wie in Abbildung 2 dargestellt. Abbildung 2: Die Kommunikation zwischen Forms und Web Service über Proxy Um diesen Mechanismus zum Aufruf eines Web-Services in der FormsAnwendung zu verankern, müssen einige Schritte durch geführt werden: Generieren des Web Service Proxy Dieser kann unter Verwendung der Oracle JDeveloper leicht erstellt werden. Man muss lediglich die URL eingeben, wo die Definition des Web Services gefunden werden kann, die so genannte WSDL (Web Service Definition Language). Dies ist ein XML-Dokument, das alle Informationen über die Operationen, die Adresse des Web Services sowie das Message-Protokoll enthält. Wichtig ist hier die Wahl der richtigen Java-Version, die zur Kompilierung der Java-Dateien verwendet werden sollte und mit der Forms JRE Java-Version übereinstimmen muss. Einbringen des Web Service Proxy in eine Jar-Datei Dies kann ebenfalls mit dem Oracle JDeveloper erfolgen, indem man das Projekt mit dem generierten Web-Service-Proxy als JAR-Datei kennzeichnet. Einstellen der FORMS_BUILDER_ CLASSPATH Umgebungsvariable Im Registrierungs-Editor müssen 25 wir die FORMS_BUILDER_CLASSPATH Variable im Oracle-Home der aktuellen Forms-Version einstellen. Der Variablenwert sollte die Adresse beinhalten wo die erzeugte ProxyJAR-Datei zu finden ist. Auf diese Weise werden die Java Klassen des Web-Service-Proxy für den FormJava Importer sichtbar. Importieren der Java-Klassen in der Forms-Anwendung Hier verwenden wir den Forms Java Importer, um die Proxy JavaKlassen, die mit dem Webdienst kommunizieren sollen, in unsere Forms-Anwendung zu importieren. Diese Klassen werden in der Regel mit WebServiceNamePortClient benannt. Die Java-Importer kreieren in der Forms-Anwendung für die importierten Java-Klassen eine Package-Spezifikation und dessen Body als PL/SQL-Schnittstelle. Einstellen der CLASSPATH Umgebungsvariablen für die Laufzeit In der ENV-Datei, die von der FormsAnwendung zur Laufzeit verwendet wird, müssen wir der CLASSPATH Umgebungsvariablen die Adresse der Proxy-JAR-Datei hinzufügen. Diese Einstellung ist notwendig, um die Proxy-Java-Klassen während der Laufzeit im Zugriff zu haben. Sobald wir diesen Mechanismus in unserer Forms-Anwendung implementiert haben, sind wir in der Lage, die Funktionalitäten des neu generierten Package zu verwenden und den WebService aufzurufen. Abbildung 3: Forms-Code Beispiel für das Einlesen der Temperatur eines bestimmten Ortes durch den Aufruf des http://www.Webservicex.net/globalweather.asmx?wsdl Web-Service SOUG Newsletter 4/2011 26 TIPS&TECHNIQUES Das Synchronous/ Asynchronous Dilemma Der Code in Abbildung 3 ist ein Beispiel eines Web Service mit synchronem Aufruf. Hier empfängt der Proxy den Aufruf aus der Forms-Anwendung und sendet diesen weiter an den Webdienst. Kurz darauf erhält er die Antwort vom Web Service und leitet sie zurück zur Forms-Anwendung. Während dieser Abfolge sind die Forms Ressourcen blockiert (locked), die Code-Ausführung wird angehalten, bis die Forms Runtime eine Antwort vom Web Service empfängt. Zur optimalen Auslegung des neuen Web Service, ob synchron oder asynchron, sollten wir uns folgende Fragen stellen: Brauchen wir die Antwort des Web Service für die Fortsetzung der Programmlogik? Denn wenn nicht, können wir einen asynchronen Web Service benutzen. Wie lange dauert die Ausführung des Web Service? Können wir uns leisten, die Anwendung für diesen Zeitraum zu blockieren? Betrachtet man die Ressourcen, die während dem Web-Service blockiert werden: Werden sie auch für andere Prozesse verwendet? Die letzten beiden Fragen sind sehr wichtig: Denn ein verschachteltes Locken vieler Datenbank-Sessions, die versuchen auf die gleichen Ressourcen wie der Web Service zuzugreifen, sollte vermieden werden. Die Lösung wäre: Asynchrone Web Services. Eine mögliche Architektur für asynchrone Aufrufe würde das Einbinden eines Einweg-BPEL-Prozesses, der Advanced Queuing (AQ) DatenbankFunktionalität und das neue Forms 11g Event Objekt erlauben. Verwenden des Forms 11g Event Objekts In unserer neuen Architektur sollte der Proxy nicht die direkte Kommunikation zwischen Forms und einem WebService übernehmen, sondern zwischen Forms und einem BPEL-Prozess. Da dieser BPEL-Prozess ein Einweg Prozess ist («shut and forget»), wartet der Web Service Proxy nicht auf die Antwort des BPEL Prozesses. Nach Erhalt der Auftragsbestätigung durch den BPEL- 1 Prozess lässt der Proxy die Forms Logik weiterlaufen. Der BPEL-Prozess leitet den Anruf an den Webdienst und wartet auf dessen Antwort. Nach dem Empfang übergibt der BPEL-Prozess die Antwort, in diesem Fall als Mitteilung einer Queue, auf die ein Event-Objekt der Forms-Anwendung wartet. Wir haben hier mehrere Möglichkeiten, damit der BPEL Prozess die Antwort sendet: direkte Übertragung der Antwort durch einen AQ-Adapter indirekt über einen DB-Adapter: bevor wir die Antwort weiter an die Queue senden, können wir zusätzliche Aktionen in der Datenbank mittels eines Datenbank-Triggers, -Funktion oder -Prozedur ausführen. Sobald die Antwort in der Queue platziert wird, meldet das Advanced Queuing der Forms Runtime. Der When-Event-Raised Trigger liest beim nächsten Ping des Forms-Applets die Antwort ein1. Abbildung 4: Die Kommunikation zwischen Forms und Web-Service über Forms11g Event Empfehlung zu asynchronen Prozessen: Da die Ausführung des Webdienstes einige Zeit dauern kann und die Forms-Anwendung durchaus die Kontrolle über den gestarteten Prozessen verliert, sollte der BPEL-Prozess regelmässig Nachrichten über seinen Status an die Forms-Anwendung senden. Bei langläufigen Webdiensten bietet sich an, das der WebService den BPEL Prozess sofern möglich über seinen Status informiert und der wiederum die Forms-Anwendung benachrichtigt, so behält die führende Forms-Anwendung trotz asynchroner Abarbeitung die Kontrolle. Mehr Details über das Event-Objekt bei: http://www.oracle.com/technology/sample_code/products/forms/11g/aqinteg/lab1/index.htm#o SOUG Newsletter 4/2011 TIPS&TECHNIQUES Aufrufen von Web Services aus der Oracle Datenbank Nachdem wir gesehen haben, wie wir Web-Services aus Forms aufrufen, stellt sich die Frage, wie befähigen wir die Datenbank-Funktionalität, wie z.B. die Geschäftslogik, die aus der Forms Anwendung zur Datenbank migriert wurde, um sich vorhandener Web Services zu bedienen? Wie können wir den vorher diskutierten Proxy-Webdienst Aufruf ersetzen? Hier bietet Oracle einige Möglichkeiten an, wie: Java-Lösung – dieser Lösungsansatz stellt einen Java Web ServiceClient in der Datenbank bereit. Allerdings können der Java Web Service und dessen abhängige Klassen zu Inkompatibilitäten mit vorhandenen Java-Klassen der Datenbank führen, was dann die Datenbankstabilität beeinträchtigen2 könnte. UTL_HTTP – ist verfügbar ab Oracle 7.3.4 und bietet die Möglichkeit, HTTP-Aufrufe direkt aus der Datenbank durchzuführen. Es kann durchaus für die Kommunikation mit einem Webdienst verwendet werden, indem man eine HTTP-Anfrage sendet, die eine SOAP-Message für Web-Services enthält und als Antwort wiederum eine HTTP Antwort mit der SOAP-Message erwartet. UTL_DBWS – ist verfügbar ab Oracle 10g und kann direkt SOAPCalls verwenden. Im Vergleich zu UTL_HTTP ist es besser auf WebServices ausgelegt. Die Funktionen und Prozeduren, die in diesem Paket definiert sind, stellen Wrapper für die JAX-RPC dynamische Invocation Interface bereit. Ein Stub (Proxy) wird jedes Mal dynamisch erzeugt, sobald wir auf einen WebService über UTL_DBWS zugreifen. Anmerkung: Obwohl UTL_DBWS in einer Oracle 10g DB vorinstalliert ist, ist die dazugehörige Callout-Utility nicht sofort verfügbar und muss nachträglich installiert werden3. In Abbildung 5 sehen wir ein Beispiel zur Anwendung von UTL_DBWS, um einen externen Web Service aufzurufen, der wiederrum die Temperatur für einen bestimmten Ort abfragt: 2 3 27 Die letzten beiden dargestellten PL / SQL-Lösungen haben den grossen Vorteil, dass sie sich perfekt in eine Oracle-Datenbank-Anwendung integrieren lassen. UTL_DBWS ist neuer und damit auch empfohlen von Oracle. Es enthält viele neue Features, Bugfixes und Patches, die nur über DBWS Callout Utility verfügbar sind, sofern es um SOAPAufrufe geht. Abbildung 5: Aufruf eines Web Service mit UTL_DBWS Database Web Service Callout Utility 10.1.3.: http://www.oracle.com/technology/sample_code/tech/java/jsp/callout_users_guide.htm Details on installing Oracle Callout Utility: http://www.oracle-base.com/articles/10g/utl_dbws10g.php SOUG Newsletter 4/2011 28 TIPS&TECHNIQUES Bis zu diesem Zeitpunkt haben wir die Möglichkeiten diskutiert, wie eine Oracle Forms-Anwendung sowohl aus Forms als auch aus der darunterliegenden Datenbank externe Logik in Form von Web-Services konsumieren kann. zu erhöhen, ist die Geschäftslogik entweder neu zu schreiben oder sie vom Forms Programm zu trennen. Schliesslich sollten die Geschäftsprozesse nicht von der Benutzeroberfläche abhängig sein. Aber wie können wir von aussen Forms Funktionalität aufrufen? Bei der Migration der Geschäftslogik aus der Forms-Anwendung in die Datenbank ist es ratsam, den migrierten Code zu konsolidieren und ihn beispielsweise mit all dem funktionell-verwandten Code-Segmenten in einem DB Paketen4 bereitzustellen. Bereitstellung von Web Services Funktionalität für die Aussenwelt verfügbar machen Wir können Funktionalität, die innerhalb der Forms Module definiert ist, nicht direkt als Web Services bereitstellen, aber wir können Oracle DatenbankObjekte dazu anbieten. Was bedeuten würde, dass die Funktionalität, die wir als Web Service bereitstellen wollen, sich noch in dem Forms-Modul befindet. Damit sollten wir Logik erst einmal in die Datenbank migrieren, um sie anschliessend von dort zu verwenden. Lasst uns diese Idee der Migration unserer Geschäftslogik näher betrachten. Warum Forms BusinessLogik in die Datenbank migrieren? Die Forms Architektur macht keine klare Trennung zwischen seiner Datenbearbeitung- und den graphischen Komponenten. In ADF zum Beispiel, kann der Data Modeler (z.B. ADF Business Components (BC)) nicht auf die View Layer Objekte zugreifen oder verweisen. In Forms dagegen hat jede Programmunit oder Trigger vollen Zugriff auf den graphischen Komponenten. Die in Forms gebotene grössere Flexibilität in der Anwendungsentwicklung wird in der ADF Welt durch die nicht so flexible Struktur, aber mit einem höheren Grad der Wiederverwendung ausgeglichen: die ADF BC Funktionalität kann als Webdienste freigestellt und aus externen Anwendungen ausgerufen werde. Die einzige Möglichkeit, die wir in Forms-Anwendungen haben, um diesen Grad der Wiederverwendbarkeit Die Migration des PL/SQL Codes in Datenbank hat eine Reihe von Vorteilen: Auf der einen Seite, kann der so migrierte Datenbank-Code von anderen Anwendungen verwendet werden – entweder direkt oder durch Web-Services. Auf der anderen Seite wird die FormsAnwendung dadurch ganz erheblich vereinfacht und daher leichter migrierbar in anderen Technologien wie ADF5 oder APEX. 5 SOUG Newsletter 4/2011 Die Oracle-Datenbank als Web-Service Provider In einer Service-Orientierten Architektur kann eine Oracle-Datenbank nicht nur die Rolle des Web-Service-Clients übernehmen, wie wir bereits gesehen haben, sondern auch die Rolle als Web-Service Provider. Mit der neuesten Datenbank Version hat sich die Interoperabilität mit anderen Anwendungen drastisch erhöht, denn jetzt haben wir Zugriff auf Oracle Daten und Funktionalität via Web Services. Welche Objekte können wir bereitstellen? Aus der Liste der OracleKomponenten, die als Web Services bereitgestellt werden können, wie vordefinierte SQL-Befehle, XQuery oder DML-Anweisungen, PL/SQL und Java gespeicherte Programmblöcke oder Advanced Queues, richten wir unseren Blick auf PL/SQL Programmblö- Abbildung 6: Oracle Datenbank as Web Service Anbieter PITSS.CON Application Engineering AE, Konzeption und Umsetzung, A. Gaede, 2009, http://pitss.com/fileadmin/pitss/images/de/White_Papers/2009-07_PITSS_White_Paper_AE_-_DE.pdf Von Oracle Forms zu Oracle ADF und JEE, M. Serban, B. Us, 2010 http://www.pitss.de/fileadmin/pitss/images/de/White_Papers/2010-11_PITSS_White_Paper_ADF_DE.pdf 4 Datenbank Funktionalität bereitstellen cke. Die PL/SQL Programmblöcke wie Funktionen, Prozeduren oder Packages sind diejenigen, die den Kern unserer Geschäftslogik ausmachen und damit auch die Business-Logik, die wir aus den Forms-Anwendungen in die Datenbank migrieren können. Abbildung 6 zeigt drei Möglichkeiten auf, um die DB-seitige Business-Logik als WebService zu konsumieren: PL/SQL Web Services – sind die erste Wahl und vielleicht die am meisten verwendete Lösung, um DB Prozeduren und Funktionen als Web Services zu verwenden. Sie müssen auf einem TIPS&TECHNIQUES 29 Webserver wie dem WebLogic deployed werden. BPEL-Prozesse – werden in der Regel verwendet, um komplexe Prozesse darzustellen und zu orchestrieren. Sie können auch verwendet werden, um Prozeduren und Funktionen der Datenbank einzubinden. Auch sie müssen auf einem Webserver wie dem WebLogic deployed werden, da sie eine BPEL Laufzeitumgebung benötigen. Native XML DB Web Services – werden erst mit der Oracle 11g-Datenbank angeboten; es stellt die neueste Lösung dar, um Datenbank-Logik als Web Services zur Verfügung zu stellen. Vorteil hier: Diese Web-Services benötigen keine Codes oder Web-Server für ihre Bereitstellung. per-Beispiel, das einen gleichwertigen Datentyp für Interval year to month verwendet. PL/SQL Web Services Der PL/SQL Web Service besteht in der Regel aus einer oder mehrerer Java-Klassen, die über JDBC die Oracle Datenbank-Verbindung herstellen und so die Programmblöcke anrufen. Auch hier stellt sich die Frage: Welche Funktionalität kann als WebService angeboten werden? Dies sind allein stehende Prozeduren und Funktionen sowie Prozeduren und Funktionen, die in Datenbank-Package definiert sind. Hier gibt es jedoch einige Beschränkungen, die durch den Oracle-JDBC-Treiber gegeben sind: nicht alle SQL-und PL/SQLDatentypen, die die Oracle-Datenbank kennt, werden unterstützt. Wir können zum Beispiel keine Funktionen und Prozeduren, deren Argumente SQL-Datentypen sind, wie Interval day to second, Interval year to month, Timestamp with local time zone, Timestamp with time zone oder PL/SQL Datentypen wie PL/ SQL boolean, PL/SQL record oder PL/ SQL index by table. Jedoch lassen sich diese Einschränkungen durch alternative Lösungen umgehen: wie eine PL/SQL-Wrapper für solche Programmblöcke. Diese Wrapper werden so definieren, dass sie nur SQL-Datentypen benutzen, die von den JDBC-Treiber unterstützt werden bevor sie als Web-Services bereitgestellt werden. Abbildung 7 bietet ein Wrap- Abbildung 7: PL/SQL Wrapper für die GetDate Function Die untenstehende Tabelle veranschaulicht die eingeschränkten Datentypen sowie die dazu passenden Äquivalente. Hier können wir sehen, dass für den PL/SQL record oder PL/SQL index by table zusätzlich entsprechende Objekte oder Collection Datentypen erstellet werden müssen. Datentypen nicht von JDBC unterstützt Äquivalenten Strukturen (mit entsprechender Struktur) (mit entsprechender Struktur) Tabelle 1: Datentypzuordnung SOUG Newsletter 4/2011 30 TIPS&TECHNIQUES Die manuelle Erstellung eines PL/ SQL Web Service ist ein komplizierter Prozess, der eine breite Palette von Kenntnissen erfordert. Hier bietet es sich an, auf leistungsfähige WizardProgramme zurückzugreifen, die unsere Arbeit erleichtern können, wie die von JDeveloper 11g oder PITSS.CON. Sicherlich kann ein Wizard nicht alle Fälle abdecken, aber mit seiner Hilfe und einer nachgelagerten Anpassung ist man schneller und flexibler als die fehlerbehaftete, manuelle Entwicklung. Typische Einschränkungen sind: Überladene Programmblöcke Diese Einschränkung ist bereits durch das WSDL-Dokument gegeben, das verhindern möchte, dass verschiedene Operationen unter dem gleichen Namen veröffentlicht werden. Die Lösung ist die Erstellung eines weiteren Web-Service als weitere Schnittstelle für den überladenen Programmblock. Standalone Programmblöcke Der Assistent des JDeveloper erlaubt derzeit nicht die Verwendung einfacher Funktionen oder Prozeduren. PITSS.CON 8 bietet hier einen leistungsfähigen Assistenten, der solche Programmblöcke als WebService generiert. Nicht unterstützte Datentypen wie in Tabelle 1 und binary_float, binary_double, nclob – Die mögliche Lösung wären Wrapper. Der letzte Schritt zum lauffähigen PL/SQL WebService ist das Deployment auf einem Webserver. Hier können wir zwischen Oracle WebLogic, JBoss, Tomcat oder WebSphere-Server wählen. Der Deployment-Prozess kann in mehreren Arten durchgeführt werden: vom JDeveloper, mit einem Ant-Task oder, wenn wir uns für WebLogic Server entscheiden, von der WebLogicKonsole. SOUG Newsletter 4/2011 BPEL-Prozesse BPEL ist eine auf XML-basierte Sprache für das Erzeugen von komplexen Prozessen, die auch mehrere WebServices einbinden, man spricht hier auch vom Orchestrieren der Prozesse. Eingesetzt auf einem Webserver wie Oracle WebLogic oder jedem anderen Server, der eine BPEL Laufzeitumgebung besitzt, kann der generierte BPELProzess selbst auch als Web Service angeboten werden. Um einen BPEL Prozess zu konstruieren, können wir den im JDeveloper eingebundenen BPEL-Editor verwenden. Das Arbeiten mit BPEL-Editor ist ein einfaches Drag-and-Drop und benötigt keine Java-oder PL/SQL Kenntnisse. Um uns nicht im Detail zu verlieren, konzentrieren wir uns hier auf die BPEL Fähigkeit, die uns erlaubt die Oracle-Datenbank-Funktionalität als Web-Services bereitzustellen. Die Schlüsselkomponente, die dies möglich macht, ist der BPEL-DB-Adapter. Dieser Adapter ist von Oracle vordefiniert, um auf Standalone-Prozeduren oder -Funktionen zuzugreifen, um DML oder Selects- auszuführen oder nach neuen bzw. geänderten Datensätzen in einer Tabelle zu suchen. Zur besseren Einschätzung sind hier einige Fähigkeiten oder Einschränkungen des DB-Adapters aufgeführt: Überladene Programmblöcke Er ermöglicht die Bereitstellung von überladenen Funktionen oder Prozeduren. Abbildung 8: Beispiel eines synchronen BPEL-Prozesses, welcher in der Lage ist eine Funktion freizustellen TIPS&TECHNIQUES Datentypen Unterstützt keine Datentypen wie rowid, urowid, interval, timestamp with (local) time zone, bfile. Wie bei den PL/SQL Web Services kann der DB-Adapter für Funktionen oder Prozeduren Wrapper generieren und bereitstellen, indem die nicht unterstützten Datentypen mit varchar2 ersetzt werden. Für die PL/ SQL record, PL/SQL index by table und PL/SQL Boolean generiert und erstellt er Datenbank-Wrapper und zusätzliche Objekte oder Tabellentypen. Der DB-Adapter kann nur für alleinstehende Funktionen oder Prozeduren konfiguriert werden. Dies ist eine klare Einschränkung, wenn wir auf ganze Datenbank-Pakete zugreifen wollen. In einem solchen Fall müssen wir DB-Adapter für jede Funktion oder Prozedur im Paket erstellen. Wenn wir im Paket mehrere Programmblöcke haben, die nicht unterstützte Datentypen verwenden, dann wird jeder der entsprechenden DB Adapter separate Wrapper oder zusätzliche Objekte / Table-Typen generieren. Dies würde zu NamensKonflikten führen und wir müssten die erstellten Namen so ändern, um die Konflikte zu beseitigen. Native DB Web-Services 31 Web-Services einen Webdienst, der von der Web-Client-Anwendungen verwendet werden kann, um SQL-Anweisungen und XQuery-Ausdrücke dynamisch auszuführen. Die Aktivierung der nativen DB Web Services Feature Aus Sicherheitsgründen ist das native DB Web Service Feature in der Oracle-Datenbank nicht automatisch aktiviert. Um die Oracle XML DB zu konfigurieren und dieses Feature zu aktivieren, müssen wir die Oracle XML DB HTTP-Server aktivieren und die ‘orawsv’ Servlet im xdbconfig.xml Datei editieren. Die Aktivierung des XML DB HTTPServers wird abgeschlossen durch das Setzen der Port-Nummer auf einen Wert grösser als 0. Eine Überprüfung ist einfach, indem wir die Port-Nummer des XML-HTTP-Server DB mit Hilfe der DBMS_XDB.GetHttpPort oder .SetHttpPort Funktionalität einstellen, wie in der folgenden Befehlszeile: Das gleiche DBMS_XDB Paket kann benutzt werden, um die ‘orawsv’ Servlet-Konfiguration in der xdbconfig.xml Oracle-Konfigurationsdatei hinzufügen, siehe Skriptbeispiel in Abbildung 9. Das Feature der «Native Datenbank Web Services» ist eine Erweiterung der Oracle XML DB, verfügbar ab Oracle11g. Damit eliminiert Oracle den Aufwand einen Webdienst einzurichten. Mehr als das, dieses Feature eliminiert die Notwendigkeit einen Webserver überhaupt bereitzustellen. Die OracleDatenbank übernimmt hier die WebServer-Rolle, mit Hilfe ihrem integrierten HTTP-Server, Teil der Oracle XML DB Funktionalität. Durch Aktivierung der nativen Datenbank Web Services sind die Datenbank-Prozeduren und Funktionen, die entweder Standalone oder in einem Paket definiert wurden, automatisch als Webdienste bereitgestellt. Darüber hinaus enthalten die native Datenbank Abbildung 9: SQL Skript zum Hinzufügen der «orawsv» ServletKonfiguration zur XML DB-Konfigurationsdatei (laufen als SYS Datenbankbenutzer) SOUG Newsletter 4/2011 32 TIPS&TECHNIQUES Aktivieren der nativen DB Web Services für einen DB-Benutzer Obwohl das native Datenbank Web Services Feature jetzt aktiviert ist, brauchen die Datenbank-Benutzer zusätzliche Rechte, um in die Lage zu kommen, eigene Programmblöcke als native Web-Services bereitzustellen. Es gibt 3 Rollen, die den Zugriff auf die native Datenbank Web Services steuern: XDB_WEBSERVICES erforderliche Rolle, die die Verwendung von nativen Web Services über HTTPS ermöglicht XDB_WEBSERVICES_OVER_HTTP erlaubt die Verwendung von nativen Web Services über HTTP XDB_WEBSERVICES_WITH_PUBLIC ermöglicht den Zugriff auf PUBLIC Datenbank-Objekte. Finden und ausführen von Native DB Web Services Nach der Aktivierung des nativen Datenbank Web Services Feature und der Erteilung der entsprechenden Rollen für die Datenbankbenutzer folgt der nächste Schritt, das Identifizieren der Web-Services Adresse, d.h. die URLs des nativen Web Services WSDL-Dokumentes. Das WSDL-Dokument gibt uns nicht nur die Adresse des Web Service, sondern auch die enthaltenden Operationen samt Parameter. Es bleibt anzumerken, dass die Oracle XML DB SOAP1.1 unterstützt und der Web-Service-Client diese Version benötigt, um im HTTP POST Prozess die SOAP-Anfrage an die nativen Datenbank-Webdienste weiterzureichen. Das native Datenbank Web-Services-Feature bietet nur einen Webdienst, der verwendet werden kann, um SQL-Anweisungen oder XQueryAusdrücke in der Datenbank durchzuführen. Sein WSDL-Dokument URL verweist auf eine Adresse wie http:// host:port/orawsv?wsdl, wo der Host der Datenbank-Host und der Port die Port-Nummer ist, die von der XML DB HTTP-Server verwendet wird. Bei den PL/SQL-Programmblöcken haben wir eine andere Situation. Jede Prozedur oder Funktion, Standalone oder im Paket, hat ihren eigenen dynamischen Web Service. Die WSDLDokumente dieses Web-Services be- SOUG Newsletter 4/2011 finden sich für Standalone-Funktionen und Prozeduren: http://host:port/ orawsv/DBSCHEMA/FUNCTION_or_ PROCEDURE?wsdl, und bei Funktionen und Prozeduren aus Paketen: http://host:port/orawsv/ DBSCHEMA/PACKAGE/FUNCTION_ or_PROCEDURE?wsdl. Zusätzlich gibt es native Web-Services definiert für Datenbank-Pakete. Solch ein Webdienst stellt alle Prozeduren und Funktionen zur Verfügung, die im zugehörigen Paket definiert sind, sowie die URL des WSDL-Dokuments http://host:port/orawsv/DBSCHEMA/ PACKAGE?wsdl. Hier müssen wir darauf achten, dass die URLs Schema-, Paket-, Funktion- oder Prozedurnamen in Grossbuchstaben geschrieben werden, sonst bringt uns der Browser einen Fehler zurück. Nachdem wir bisher die Vorteile der nativen DB Web Services betrachtet haben, bleibt die Frage nach ihren Beschränkungen. Einige typische Probleme, auf die wir stossen können, sind: Überladene Funktionen oder Prozeduren können nur über die nativen Web-Services erreicht werden Unterstützte Datentypen: Die Prozeduren und Funktionen mit Parametern wie PL/SQL record, PL/SQL indexed tables oder database collection, lassen sich nicht als native Web-Services bereitstellten. Fazit Wir haben hier die Möglichkeiten einer besseren Integration von Oracle Forms-Anwendungen in die moderne Web-Welt betrachtet. Da wir und unsere Anwendungen ständig mit neuen, modernen Technologien für die Entwicklung von Datenbankanwendungen konfrontiert werden, ist alleine schon die Auswahl der Besten schwieriger als je zuvor. Werfen Sie einen Blick auf Oracle Konferenzen: die Agendas sind mit neuen Themen, wie ADF, APEX, BI Publisher und so weiter ausgefüllt und es ist richtig so, da eine neue Ära der Anwendungsentwicklung längst begonnen hat: die Ära der Web-Entwicklung. Doch während wir die Strategien bewerten, um den besten Weg zu wählen, sind wir mit einer sehr bodenständigen, wichtigen und dringenden Frage konfrontiert: Was passiert mit dem gegenwärtigen System, sodass es weiterhin die Geschäftsprozesse unterstützt mit Hilfe der aktuell verfügbaren Ressourcen? Viele Unternehmen, die Legacy Forms-Anwendungen besitzen, verharren noch in einem «Wait-and-See»Ansatz und machen erst einmal den Upgrade ihrer Forms-Anwendungen auf die zurzeit neue 11g-Version. Auf diese Weise erhalten sie die Vorteile, die die 11g-Version mit sich bringt, bleiben unter Support, während man Zeit gewinnt, um die neuen Technologien zu bewerten, zu verstehen, die modernen Entwicklungssprachen und -Architekturen zu erlernen und die neuen Technologien reifer werden. Aber, ob wir nun beschliessen, in die neuen Technologien zu migrieren, oder erst einmal bei Forms zu bleiben, bietet sich eine gute Strategie an, so viel wie möglich von der Business-Logik einer Forms-Anwendung in die Datenbank zu verschieben. Der Applikations-Code wird entrümpelt, der Code überarbeitet und als WebService anderen Anwendern und Kunden zugänglich gemacht. Der Hauptvorteil jedoch liegt darin, dass Sie, wann immer Sie wollen, viel einfacher in die neuen Technologien migrieren. Die Implementierung von Web Services und das Orchestrieren in einer modernen Architektur stellt alleine schon eine exzellente Verbesserung dar und kann mit minimalen Investitionen erreicht werden. Ebenfalls lässt sich der Kerngedanke der Serviceorientierten (SOA) Prinzipien erreichen – Wiederverwendung, Interoperabilität und Setzen von Standards – während unsere Datenbank-Anwendungen flexibler werden und schneller auf die sich ändernden Geschäftsanforderungen reagieren. Contact PITTS GmbH Andreas Gaede E-Mail: [email protected]