Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  4/2007  Pfeil  Datenbanken
suche: 
Dieser Artikel wendet sich an Datenbankadministratoren und -entwickler, die einen Überblick über die Objekttypen von Oracle bekommen möchten.

Glossar

JVM
Die Java Virtual Machine ist ein Teil der Java-Laufzeitumgebung (JRE) für Java-Programme, in dem der Bytecode der Java-Programme ausgeführt wird. Dabei wird jedes gestartete Java-Programm in seiner eigenen virtuellen Maschine ausgeführt. Eine JVM ist vom Betriebssystem abhängig, während das Java-Programm selbst unabhängig vom Betriebssystem ist.
JAR
Ein Java Archiv im ZIP-Format zum Zusammenfassen von Java-Anwendungsdateien.
Java-Properties- Datei
Eine Java-Properties-Datei ist eine Textdatei, in der Regel mit der Dateiendung ".properties". Diese Art der Dateien wird in der Programmiersprache Java als einfacher Konfigurationsmechanismus verwendet.
JDBC
Java Database Connectivity (JDBC) ist eine Datenbankschnittstelle der Java-Plattform, die eine einheitliche Schnittstelle zu Datenbanken verschiedener Hersteller bietet und speziell auf relationale Datenbanken ausgerichtet ist.


Reihe Oracle Objekttypen von A - Z (Teil V):

"J" wie Java-Objekttypen

In diesem Teil der Reihe Objekttypen stellen wir mit dem Buchstaben "J" die Java-Objekttypen der Datenbank vor. Java-Objekttypen sind Datenbankobjekte, die unter anderem herkömmliche Java-Klassen aufnehmen können. Besonderes Augenmerk bei der Vorstellung legen wir auf die Umsetzung und zeigen Ihnen, wie Java-Klassen in eine Oracle Datenbank geladen und innerhalb einer Datenbank ausgeführt werden.

import java.util.Random;

public class Zufallszahl extends Object { public static int ziehen(int bis) { Random rnd = new Random(); return rnd.nextInt(bis); } }
Abb. 1: Java-Klasse Zufallszahl.java.

loadjava -user user1/user1@orcl -resolve -verbose c:\java\Zufallszahl.java
Abb. 2: Laden einer Java-Klasse in die Datenbank auf Betriebssystemebene.

exec dbms_java.loadjava(,-resolve -verbose c:\java\Zufallszahl.java´)
Abb. 3: Laden einer Java-Klasse in die Datenbank im SQL*Plus.

Abb. 4: Laden der Java-Klassen in die Datenbank.
 
exec dbms_java.grant_permission('USER1', 'java.io.FilePermission',
'C:\java\*','read')
Abb. 5: Voraussetzung für das Laden einer Java-Klasse in die Datenbank im SQL*Plus.

CREATE OR REPLACE FUNCTION zufallszahl(bis IN NUMBER) RETURN
NUMBER
AS LANGUAGE JAVA NAME 'Zufallszahl.ziehen(int) return int';
/
Abb. 6: PL/SQL-Wrapper für die Java-Klasse Zufallszahl.

SQL> SELECT zufallszahl(10) FROM dual;

ZUFALLSZAHL(10) --------------- 9

SQL> set serveroutput on SQL> BEGIN 2 DBMS_OUTPUT.PUT_LINE('Zufallszahl: '||zufallszahl(100)); 3 END; 4 / Zufallszahl: 83

PL/SQL-Prozedur wurde erfolgreich abgeschlossen.
Abb. 7: Aufrufmöglichkeiten von Java Stored Procedures.

Abb. 8: Verwendung von Java Stored Procedures.
 

Welche Java-Objekttypen gibt es?

Oracle stellt seit der Datenbankversion 8.1.5 folgende Java-Objekttypen zur Verfügung:

Mit den oben aufgeführten Objekttypen besteht die Möglichkeit, Java-Komponenten in der Datenbank abzulegen. JAVA SOURCE dient z. B. der Speicherung von Java-Sourcecode-Dateien (*.java) in einer Oracle Datenbank. In dem Objekttyp JAVA CLASS können bereits kompilierte Java-Klassen (*.class) abgelegt werden. Zusätzlich können mit Hilfe des Objekttyps JAVA RESOURCE Java-Ressource-Dateien, wie z. B. JAR- oder Java-Properties-Dateien, in der Datenbank abgelegt werden.

Für die interne Verwaltung von Java in der Datenbank verwendet Oracle zusätzlich den Objekttyp JAVA DATA, der vom Benutzer nicht explizit angelegt werden kann und ausschließlich von Oracle verwendet wird.

Warum Java in der Datenbank?

Der Grund, warum sich Oracle für Java als Programmiersprache in der Datenbank entschieden hat, kann auf die Eigenschaften der Programmiersprache Java zurückgeführt werden. Java-Programme gelten als sicher und robust, da es in Java z. B. keine Zeiger und keinen direkten Zugriff auf Adressen im Speicherbereich gibt, wie es z. B. in der Programmiersprache C der Fall ist. Zusätzlich kann hier auch noch auf die sehr umfangreichen Java-Funktionsbibliotheken (API) verwiesen werden. Diese können von Java-Klassen innerhalb einer Oracle Datenbank ebenfalls verwendet werden.

Wo wird Java ausgeführt?

Die Laufzeitumgebung für Java in einer Oracle Datenbank wird als OracleJVM bezeichnet. OracleJVM ist eine in den Kernel von Oracle implementierte Java Virtual Machine (JVM). Die Oracle Datenbankversion 11g, Release 1, unterstützt JDK 5 und den Datenbanktreiber JDBC 4.0.

Laden der Java-Klassen in die Datenbank

Soll eine Java-Klasse (siehe Abbildung 1) in einer OracleJVM-Umgebung ausgeführt werden, so kann diese entweder mit dem Kommando loadjava oder mit dem PL/SQL-Package DBMS_JAVA in die Datenbank geladen werden (siehe Abbildungen 2 und 3). Dabei ist zu beachten, dass jede Java-Sourcecode-Datei, die in ein Datenbankschema geladen wird, implizit mit dem in der Datenbank verfügbaren Java-Compiler in eine Java-Class-Datei übersetzt wird (siehe Abbildung 4)

Wird das PL/SQL-Package DBMS_JAVA verwendet, dann wird ein Leserecht des Datenbankbenutzers auf die zu ladende Datei benötigt. Mit dem Kommando in Abbildung 5 wird dem Benutzer USER1 ein Leserecht auf alle Dateien im Verzeichnis C:\java erteilt.

PL/SQL-Wrapper erstellen

Nachdem die Java-Klassen in die Datenbank geladen wurden, müssen die Signaturen der Java-Klassen im Data Dictionary veröffentlicht werden. Dazu werden so genannte PL/SQL-Wrapper erstellt (siehe Abbildung 6). Mit Hilfe von PL/SQL-Wrappern werden die Signaturen der Java-Methoden auf die Signaturen der Stored Procedures der Datenbankprogrammiersprache PL/SQL abgebildet.

Aufruf der Java Stored Procedures

Java Stored Procedures können über den zuvor besprochenen PL/SQL-Wrapper sowohl aus SQL als auch aus PL/SQL heraus aufgerufen werden (siehe Abbildung 7). Außerdem können Java Stored Procedures von externen Client-Anwendungen verwendet werden (siehe Abbildung 8).

Gibt es in der Datenbank das CLASSPATH-Konzept?

Mit Hilfe der Umgebungsvariable CLASSPATH werden bei einer herkömmlichen JVM-Umgebung alle abhängigen Java-Klassen in Verzeichnissen oder JAR-Dateien ermittelt. Da in einer OracleJVM-Umgebung alle Klassen, die mit dem loadjava-Kommando in die Datenbank geladen wurden, als Datenbankobjekte innerhalb eines Datenbankschemas abgelegt werden, verfügt die OracleJVM-Umgebung über ein so genanntes Resolving-Konzept.

Als eine Alternative zum CLASSPATH-Konzept kann das Resolving verstanden werden. Es dient dem Auffinden aller von einer Klasse benötigten Klassen innerhalb der Datenbank. Bei dem Resolving-Konzept wird standardmäßig im Schema des Datenbankbenutzers nach den abhängigen Klassen gesucht. War die Recherche erfolglos, so wird zusätzlich noch das Schema SYS durchsucht.

Resümee

Bei Datenbankanwendungen finden Java-Programme immer häufiger Verwendung. Dank der vorgestellten Java-Objekttypen kann Java nun auch innerhalb einer Oracle Datenbank verwendet werden. Der Anwendungsentwickler hat somit die freie Wahl, ob er zu der traditionellen Datenbankprogrammiersprache PL/SQL für die serverseitige Datenbankprogrammierung greift oder ob er lieber Java nutzen möchte. Dass die Handhabung von Java auch für Datenbankadministratoren ohne Java-Kenntnisse sehr einfach ist, zeigt diese kurze Einführung in die Verwendung der Java-Objekttypen.

Im nächsten Teil dieser Artikelreihe geht es weiter mit dem Buchstaben "J" wie JOB, JOB CLASS und weiteren Objekttypen.

Markus Fiegler (info@ordix.de).