Datenbanken 18. Übung JPublisher und Java Stored Procedures JPublisher Oracle bietet über den Java Object Type Publisher (JPublisher) einen sehr konfortablen Weg, um Objekte und Pakete aus einer Datenbank in Java-Klassen umzuwandeln. Dabei müssen diese Objekte als benutzerdefinierter Typ in der Datenbank erstellte werden. Typen in Oracle. Ein benutzerdefinierter Typ studentenTyp wird angelegt Typen mit JPublisher in Java-Objekte konvertieren. Oracle liefert das Kommandoprogramm jpub mit seiner Client-Distribution. Dieses Tool wandelt deklarierte Benutzertypen (user defined types) aus der Datenbank in entsprechende Java-Klassen um. Das Tool startet man auf der Kommandozeile mit dem Befehl jpub: (vgl. Abb.1 auf der folgende Seite). -user: Der Parameter user definiert den Benutzer, der in der DB bekannt ist -url: Die JDBC-URL an der sich JPublisher anmeldet. -builtintypes: entweder oracle oder jdbc. Ist der Parameter oracle werden die original Oracle-Datentypen aus dem Paket oracle.sql verwendet. Sonst gelten die normalen JDBCDatentypen. -sql: Liste der Typen, die als Java-Klassen verfügbar gemacht werden sollen. Die Liste wird einfach durch Komma getrennt, z.B. –sql=a,b,c würde die Typen a, b, c aus der DB in Java-Klassen umwandeln. Mit einem Doppelpunkt dahinter kann angegeben werden, wie die Klasse heißen soll, z.B. –sql=a:b generiert eine Java-Klasse b auf der Basis des Datentyps a. Beim Ausführen des Befehls liegen im aktuellen Verzeichnis zwei neue Quelldateien: JPublisher erzeugt zu jedem Typ immer 2 Java Klassen. Eine der Klassen wird dabei mit einem zusätzlichen angehängten REF im Namen generiert. 1 Datenbanken Abb.1: 2 Datenbanken Referenzen und transiente Objekte. Einsatz der generierten Klassen. Die generierten Klassen können wie normale Datentypen in einem SQLJ-Block eingesetzt werden. Bei der Abfrage von Objekten muß die gewünschte Art des Objekts (transientes Objekt oder referenziertes Objekt) betrachtet werden. Falls echte Referenzen von der DB abgefragt werden sollen, dann muß das in der SELECT-Anweisung explizit mit der Funktion REF verlangt werden. Will man nur die Werte von der DB erhalten (Abfrage transienter Objekte), dann erfolgt das über das Schlüsselwort VALUE in der SELECT-Klausel der SQL-Anweisung. Der folgende Quelltext faßt das zusammen. 3 Datenbanken Java Stored Procedures 4