Mittwoch, 24. Juli 2013

JDBC 12c: Reimplementierung von Forms nach ADF unter der Verwendung von PL/SQL Typen ?

Viele deutsche Oracle Kunden, die seit Jahren die bewerten Produkte einsetzen, definieren dieser Tage langsam und zielstrebig die nächsten Schritte Ihrer Strategie im Umgang mit den genutzten Oracle Technologien. Viele dieser Kunden verwenden die klassischen Produkte Forms und PL/SQL in umfangreichen Ausmass.

Ein sehr weit verbreitetes Design Pattern in größeren Applikationen, die mit Oracle Forms realisiert sind, ist die Verwendung von PL/SQL Typen (type mytyp of employees%rowtype, type mytbl table of mytyp) als Schnittstelle zwischen User Interface mit Forms und Business Logik in der Datenbank.

Vor Database 12cR1 war es nicht möglich PL/SQL Typen mit dem Oracle JDBC Treiber anzusprechen. Dies hat sich jetzt ab JDBC 12.1.0.x und Einsatz der 12cR1 Datenbank geändert.

Die bisherige Lösung bestand darin für jeden PL/SQL Type einen entsprechenden SQL Objekt Type anzulegen und zwischen diesen Datentypen beim jeweiligen Zugriff zu wandeln.

Sehr häufig wurde in der Vergangenheit dieser Wrapper - Code durch den JPublisher erzeugt bzw. generiert.

Verwendung von PL/SQL Typen mit dem JDBC Treiber 12c


Environment 
- JDeveloper 12cR1
- Oracle Database 12cR1
- JDBC Driver 12cR1
- HR Schema

1.) Database Code mit PL/SQL Type 



JDeveloper 12c
Der JDeveloper 12c verwendet Out-Of-The-Box nicht den neuen Treiber. Aus diesem Grund muss dieser erst von Hand selbst in den Classpath gebracht werden. Ein über schreiben der vorhanden Java 6 Treiber in den entsprechenden Verzeichnissen ist nicht zu empfehlen.

Download: http://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.html

Benötigt wird: ojdbc7dms.jar and orai18n.jar (7 für JDK7 / 6 für JDK6)

Weitere Info's bzgl. der Konfiguration JDBC 12c mit WLS 12c und WLS 10.3.6 findet man im MOS Artikel: 1564509.1

1.) JDBC 12c mit JDeveloper 12c




Um sicher zu gehen, dass der JDBC 12c Treiber wirklich genutzt wird ist eine entsprechende Position im Classpath zu wählen.

2.) Java Sample Code



3.) Output



Zusammenfassung

Beim ausführen des gleichen Samples gegen eine Database 11gR2 Express Edition wird folgende Exception geworfen:

SQLException invalid name pattern: ….

Dies entspricht dem erwarteten Verhalten eines 11gRx Releases. Die PL/SQL Typen in den Packages können im Schema der Datenbank nicht aufgelöst werden. Dies geht nur mit SQL Objekt Typen.

Wer also sehr viel PL/SQL Typen in der Business Logik verwendet und diese weiterhin als Schnittstelle zu einem modernen User Interface nutzen möchte, sollte zweimal überlegen ob nicht die Datenbank 12c früher als vielleicht vorgesehen berücksichtig werden sollte. Sparen würde man auf jeden Fall eine Menge PL/SQL Wrapper Code.

Weitere Informationen
Oracle® Database JDBC Developer's Guide - 12c Release 1 (12.1) http://docs.oracle.com/cd/E16655_01/java.121/e17657/apxref.htm#JJDBC29032

Keine Kommentare:

Kommentar veröffentlichen