Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Java in der Oracle Datenbank intern einsetzen
ab 8i - getestet mit 12c
Auch in der Oracle Datenbank lässt sich Java als Programmiersprache einsetzen.
Architektur
In der Oracle Datenbank kann ab Oracle 8i (also seit wenigstens 1999) eine eigenen VM zum ausführen von Java Programmen gestartet werden.
Warum solle Java überhaupt in der DB eingesetzt werden?
- Verwaltung von Daten und Programmcode in einer Einheit
- Performance beim Zugriff auf die Daten
- Ersatz von PL/SQL
- Erweiterung der Datenbank mit neuen Funktionalitäten
- Plattformunabhängigkeit
Java versus PL/SQL
- PL/SQL nicht 100% Objektorientiert
- PL/SQL ist aber deutlich schneller
- PL/SQL erlaubt nur bedingte Interaktion mit der Umwelt
- PL/SQL ist nicht erweiterbar
- Java ist offen
- Java ist sehr populär
Der Oracle JServer (Aurora)- die Oracle Virtuelle Maschine in der Datenbank
- Multithreading durch Sessions
- Automatische Speicherverwaltung
- Session Footprint
- Performancesteigerung mit Native Compiler
- Dynamisches Laden von Klassen
- Embedded JDBC Driver
- Embedded SQLJ Translator
- Java ORB und IIOP connectivity
- Import und export Utilities zum Laden von Java
Multithreading
- Das Threading übernimmt die Datenbank
- Verwendung von Threads im Programm möglich aber nicht empfohlen
- Dead Locks werden von der VM automatisch erkannt
- Threads werden sequentiell abgearbeitet
- Alle Thread innerhalb eines Calls werden beendet, wenn der aufrufende Thread terminiert
- Threads werden cooperative abgearbeitet!(Hängt ein Thread, kein anderer Thread wird abgearbeitet!)
Welches JDK ist installiert
Überprüfen ob überhaupt Java zur Verfügung steht:
SELECT comp_id, comp_name, version,schema FROM dba_registry WHERE UPPER(COMP_NAME) LIKE '%JAVA%'; COMP_NAME STATUS VERSION SCHEMA ---------------------------------------- -------- ------------ ------------ JServer JAVA Virtual Machine VALID 12.1.0.2.0 SYS Oracle DATABASE Java Packages VALID 12.1.0.2.0 SYS
Welche Version von Java ist installiert:
-- create a wrapper function to call the java properties CREATE OR REPLACE FUNCTION getJavaProperty(myprop IN VARCHAR2) RETURN VARCHAR2 IS LANGUAGE JAVA name ‘java.lang.System.getProperty(java.lang.String) RETURN java.lang.String’; / -- read the propertie java.version SELECT getJavaProperty(‘java.version’) AS version FROM dual; Version --------- 1.6.0_81
Das sieht nicht sehr aktuell für eine Oracle 12c 12.1.0.2.0 aus ….
Und tatsächlich: „Oracle Database 12c Release 1 (12.1) supports JDK 6 and JDK 7, where JDK 6 is the default JDK version. So, if you do not set the JDK version explicitly, the JDK version in effect is JDK 6.“ siehe https://docs.oracle.com/database/121/JJDEV/chone.htm#JJDEV13628 Abschnitt über „Multiple JDK Support“
Auf Java 1.7 upgraden
siehe https://docs.oracle.com/database/121/JJDEV/chone.htm#CACDGBBI um die DB auf eine höhere Version zu heben.
Zuvor in das Oracle Home aber auch den aktuellsten CPU mit Java Update patchen!
Das erste Hello World Programm
Über SQL*Plus läßt sich Java direkt in der Datenbank anlegen, über ein PL/SQL Wrapper läßt sich der Code dann auch aufrufen:
sqlplus gpi/gpi --create Java Class CREATE OR REPLACE java SOURCE named "Hello" AS public class Hello { public static String world() { RETURN "Hallo, ich bin Java aus der DB"; } } / Java created. -- Create Wrapper CREATE OR REPLACE FUNCTION helloWorld RETURN varchar2 AS LANGUAGE java name 'Hello.world() return java.lang.String'; / -- Call SELECT HELLOWORLD FROM dual; HELLOWORLD ----- Hallo, ich bin Java aus der DB