Betrifft: PL/SQL Web-Services und der JDeveloper – Teil 4 Autor: Christine Hansen, Fabrizio Fresco, Patrick Malcherek Art der Info: Technische Background Info (Oktober 2002) Quellen: http://otn.oracle.com Einleitung Nachdem in den ersten beiden Teilen der Web-Service Serie die Theorie vermittelt wurde, folgte in Teil drei die Erstellung eines Services mittels Tomcat und Java. In diesem Teil möchten wir zeigen, welche Vorteile der JDeveloper dem Entwickler bei der Erstellung eines Web-Services bietet. Es sollte die neue Version des JDeveloper 9.0.3 installiert sein. In dem folgenden Beispiel geht es darum ein PL/SQL-Package zu erstellen, aus dem der JDeveloper dann Java Klassen generiert, diese zu einem Service zusammenstellt und im OC4J implementiert. WebService PL/SQL Package mit WSDL - File JDeveloper generiert JDeveloper platziert den Service Funktionen Java Klassen Procedures Methoden OC4J 1. Vorbereitung Für das nachfolgende Beispiel benötigen Sie folgende Software: Java SDK 1.4 Oracle 9i Release 2 JDeveloper 9.0.3 http://java.sun.com http://otn.oracle.com http://otn.oracle.com Das Beispiel zeigt wie ein PL/SQL Package als Web-Service veröffentlicht wird. Dazu ist es notwendig, dass die neue Version des JDeveloper installiert ist, sowie der dazugehörige OC4J. Bitte <JDev_Home>\jdev\bin\jdevw.exe und <Dev_Home>\jdev\bin\start_oc4j.bat starten. 2. Einrichte der Verbindungen Wir werden mit der Verbindung für den Applikationserver anfangen. Hierzu komplette Oracle9iAS installiert werden. Es genügt den mitgelieferten OC4J zu wählen bei Connections->Application-server „New Connection“ im JDeveloper Wizard. Bei Schritt 1/4 wird der Name vergeben sowie der dazugehörige (Abbildung 2.1). Tragen Sie dann das Passwort ein (Schritt 2/4). muss nicht der verwenden. Wir und folgen dem Verbindungstyp Abbildung 2.1 Abbildung 2.2 Tragen Sie als URL die Host-IP ein. In diesem Fall 127.0.0.1 (Abbildung 2.2). Im „Schritt 4/4“ haben Sie die Möglichkeit die Verbindung zu testen. Jetzt fehlt noch die Anbindung an die Datenbank als User Scott (Abbildung 2.3- 2.6). Abbildung 2.3 Abbildung 2.4 Abbildung 2.5 Abbildung 2.6 3. Erstellen des Packages Zuerst wird ein neuer Workspace und ein neues Projekt mit dem Namen PLSQL angelegt. Nachfolgend, durch einen Klick mit rechts auf das Projekt, NEW ausgewählt. Dort erstellen wir unter Database Tier->Database File einen SQL-File und nennen ihn z.B. create.sql. Er soll den Code des zu erstellenden PL/SQL-Packages enthalten. Fügen Sie der Datei dann bitte folgenden Code hinzu: DROP package p_emp_ws; DROP table emp_ws; DROP type t_employee; /* create the necessary types and tables */ CREATE type t_employee AS object (empno int, ename varchar(30), job varchar2(9), sal int, deptno int); / CREATE table emp_ws ( empno int, employee t_employee); /* create the package header */ CREATE package p_emp_ws as /* add a new employee */ PROCEDURE addemp (employee IN t_employee); /* get employee */ FUNCTION getemp (i_empno IN int) RETURN t_employee; /* remove an employee */ PROCEDURE removeemp (i_empno IN int); END p_emp_ws; / CREATE package body p_emp_ws AS /* add a new employee */ PROCEDURE addemp (employee IN t_employee) IS BEGIN INSERT INTO emp_ws VALUES (employee.empno, employee); COMMIT; END addemp; /* get employee */ FUNCTION getemp (i_empno IN int) RETURN t_employee IS out t_employee; BEGIN SELECT employee INTO out FROM emp_ws WHERE empno = i_empno; RETURN out; END getemp; /* remove employee */ PROCEDURE removeemp (i_empno IN int) IS BEGIN DELETE FROM emp_ws WHERE empno = i_empno; COMMIT; END removeemp; END p_emp_ws; / Um das Package p_emp_ws mit dem JDeveloper zu erstellen, muss noch im Menü Tools>Preferences der Datenbank Anbindung, das ausführende Programm, die sqlplus.exe, mitgeteilt werden (Abbildung 3.1). Danach ist per Rechtsklick auf die create.sql, ein Ausführen der Datei möglich. Dort erscheint der Menüpunkt Run in SQL*PLUS, bei dem dann die gewünschte Datenbank-Anbindung zu wählen ist (Abbildung 3.2). Natürlich kann man die create.sql auch auf der Kommandoebene ausführen. Abbildung 3.1 Abbildung 3.2 4. Die Java-Klassen Alle zum Web-Service notwendigen Klassen generiert uns der JDeveloper. Bitte machen Sie einen Rechtsklick auf PLSQL.jpr und wählen dort New aus. Bei General->Web Services ist der, in unserem Fall, gewünschte PL/SQL Web Service zu markieren und danach mit OK zu bestätigen (Abbildung 4.1). Abbildung 4.1 Abbildung 4.2 Es folgt ein Wizard. Beim ersten Schritt ist die Datenbank Anbindung auszuwählen, sowie das zuvor erstellte Package p_emp_ws (Abbildung 4.2). Schritt 2/3 zeigt die dort zur Verfügung stehenden Funktionen (Abbildung 4.3). Abbildung 4.3 Abbildung 4.4 Erkennbar ist der Web-Services Endpunkt, welcher später noch gebraucht wird: http://127.0.0.1:8888/PLSQL-PLSQL-context-root/scott.P_emp_wsWebService (Abbildung 4.4) Abbildung 4.5 Abbildung 4.6 Entstanden sind hier mehrere Java Dateien in die der JDeveloper unsere Funktionen und Prozeduren als Methoden implementiert hat. Wichtig ist nach diesem Schritt, dass ein Rebuild des Projekts PLSQL.jpr durchgeführt wird (Abbildung 4.5). Wenn man sich die entstanden Dateien anschaut, entdeckt man alle notwendigen Files, wie z.B. web.xml und WSDL zum platzieren des Services (Abbildung 4.6). In den Java Klassen finden wir auch unsere Methoden des Services wieder. 5. Plazieren des Services und erstellen eines Clients Das Platzieren des Services erfolgt mittels eines Rechtsklicks auf den WebServices.deploy File. Darin eingeschlossen sind sowohl das SOAP Servlet als auch die Java Klassen des Packages. Dort ist der OC4J auszuwählen (Abbildung 5.1). Abbildung 5.1 Abbildung 5.2 Durch die Eingabe des Endpunktes im Browser, kann die Platzierung des Services überprüft werden (Abbildung 5.2). Die hier ersichtlichen Methoden können angewählt werden und liefern als Rückgabewert eine SOAP Message. Zu beachten ist, dass momentan noch keine Daten in unserer Tabelle zur Verfügung stehen und somit die SOAP Message die entsprechende Fehlermeldung enthält. Was noch fehlt ist also ein entsprechender Client zum abrufen des Web-Services. Nur mit ihm ist es möglich Daten in den Objekt-Typ einzufügen und diese wieder abzurufen. Auch hier unterstützt uns der JDeveloper. Er erstellt uns das Gerüst des Clients, in dem dann nur noch die entsprechende Main-Methode ergänzt werden muss. Abbildung 5.3 Abbildung 5.4 Abbildung 5.5 Mit NEW->WebServices->Web_Service_Stub/Skeleton unter PLSQL.jpr wird der Wizard gestartet (Abbildung 5.3). Wählen Sie in der drop down List-Box den WSDL Pfad aus. Weiter ist ein Haken zu setzen unter Generate_Main_Method_into_Stub (Abbildung 5.4). Im letzten Schritt sind nochmals die Methoden des Services zu erkennen (Abbildung 5.5). Öffnen Sie die Datei P_emp_wsStub.java und gehen, in der Main Methode des Clients, an die Stelle: // Add your own code here Dort ist folgendes einzutragen: // Create a new Employee TEmployee emp = new TEmployee(); emp.setEmpno(new Integer(7839)); emp.setEname("KING"); emp.setJob("President"); emp.setSal(new Integer(1500)); emp.setDeptno(new Integer(10)); // Delete the employee (if already added it) stub.removeemp(new Integer(7839)); // Add the employee over SOAP stub.addemp(emp); // Retrieve the employee over SOAP System.out.println(stub.getemp(new Integer(7839)).getEname()); // Remove the employee (so this code snippet can be re-run // multiple times) // stub.removeemp(new Integer(7839)); Danach ist wieder ein Rebuild des Projektes durchzuführen. Der Service ist nun platziert und der Client dafür erstellt. Somit kann der Web-Service getestet werden. Nach einem Rechtsklick auf die P_emp_wsStub.java kann diese Datei dann mit „Run P_emp_wsStub.java“ ausgeführt werden (Abbildung 5.6 – 5.7). Abbildung 5.6 Abbildung 5.7 Als Ergebnis bekommt man den Wert „KING“ (Abbildung 5.7). Die entsprechenden SOAP Messages können mit dem Tool „TCP-Packet Monitor“ sichtbar gemacht werden (Abbildung 5.8). Er kann in der Version 9.0.3 direkt im Menü Tools->TCP Packet Monitor ausgewählt werden. Abbildung 5.8 Jetzt ist es auch über die zuvor aufgerufene Seite des Endpunktes möglich Daten abzurufen (Abbildung 5.9.1-5.9.2). Abbildung 5.9.1 Abbildung 5.9.2 Nach der Bestätigung durch Invoke erhält man als Ergebnis einen XML-File, welcher die SOAP Message enthält (Abbildung 5.10). Wurde z.B. ein falscher Wert eingetragen, so bekommt man als Rückgabe die entsprechende SOAP Message mit Fehlermeldung. Abbildung 5.10 Fazit Der JDeveloper bietet gute Features zum erstellen und platzieren eines Web-Services. Er unterstützt nicht nur den Java-Entwickler, sondern auch dem PL/SQL-Entwickler ist er sehr hilfreich. Grundkenntnisse in Java reichen hierzu aus. Oracle hat sich bei der Integration der neuen Funktionen zur Erstellung eines Web-Services einiges einfallen lassen. Dies ist nicht nur komfortabler geworden sondern bietet jetzt auch die Option aus einem PL/SQL-Package Java-Klassen zu generieren. Daran ist zu erkennen das Web-Services in Zukunft immer mehr eine Rolle spielen werden. Wir hoffen, dass die Artikel Serie Ihnen einen guten Einblick in diese neue Technologie gegeben hat. Christine Hansen, Fabrizio Fresco und Patrick Malcherek Trivadis GmbH Cityforum im Eichsfeld Ferdinand-Stuttmann-Str. 13 D-65428 Rüsselsheim Internet: http://www.trivadis.com Mail: Tel : Fax: [email protected] [email protected] [email protected] +49 6142 210 18 0 +49 6142 210 18 29