Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

© 2003, Rudolf Jansen Java in der Datenbank Rudolf Jansen Freiberuflicher Entwickler und Autor DOAG SIG Development, 6.3.2003.

Ähnliche Präsentationen


Präsentation zum Thema: "© 2003, Rudolf Jansen Java in der Datenbank Rudolf Jansen Freiberuflicher Entwickler und Autor DOAG SIG Development, 6.3.2003."—  Präsentation transkript:

1 © 2003, Rudolf Jansen Java in der Datenbank Rudolf Jansen Freiberuflicher Entwickler und Autor rudolfj@t-online.de DOAG SIG Development, 6.3.2003

2 © 2003, Rudolf Jansen Agenda á Motivation á Java in der DB - Historie á loadjava-Tool á Java Stored Procedures á Resolving á Administration á Besonderheiten á Vergleich Java - PL/SQL

3 © 2003, Rudolf Jansen Motivation - Java-Architekturen Oracle 9i Rel.2 -Datenbank Oracle JVM JDBC-Applikation SQLJ-Applikation SQL-Net- Zugriff

4 © 2003, Rudolf Jansen Motivation u Normalfall: Externe Java-Anwendung - DB-Anbindung über JDBC oder SQLJ - (Netzwerk-)Zugriff auf die DB ist häufig der Engpass u Datenintensive Anwendungen: PL/SQL - „Programm läuft da, wo die Daten liegen“ - Vorteil: Keine Typumwandlung erforderlich, da SQL-Datentypen verwendet werden - Nachteil: weniger APIs für Anbindung an externe Systeme (Mail, Dateizugriffe, XML-Parsing,...) u Gesucht: Goldener Mittelweg Ô Java in der Datenbank

5 © 2003, Rudolf Jansen Java in der Datenbank Oracle JVM-Übersicht: erstmals in Oracle 8.1.5 (JDK 1.1.6) JDK 1.2 ab Oracle 8.1.6 Oracle 9i Release 2: – JDK 1.3 – kein J2EE mehr Ô J2SE in der Datenbank Ô J2EE im Application Server nach Standard-Installation verfügbar sqlplus-Startmeldung: Verbunden mit: Oracle9i Enterprise Edition Release 9.2.0.1.0 – Production With the Partitioning, OLAP and Oracle Data Mining options JServer Release 9.2.0.1.0 – Production

6 © 2003, Rudolf Jansen loadjava -Tool Java-Source-Code (*.java) Java-Class-Dateien (*.class) JAR-Archive (*.jar) loadjava Oracle-DB Java- Compiler Java- Sourcen Java- Klassen Java- Ressourcen

7 © 2003, Rudolf Jansen loadjava -Tool Beispiel HelloWorld.java: public class HelloWorld { public static void main(String args[]) { System.out.println("Hello World from Main-Method"); } public static void test() { System.out.println("Hello World from Test-Method"); } } %ORACLE_HOME%\bin\loadjava -user test/test -resolve – verbose HelloWorld.java creating : source HelloWorld loading : source HelloWorld creating : HelloWorld resolving: source HelloWorld

8 © 2003, Rudolf Jansen Java in der Datenbank Ablage von Java-Sourcecode und Java-Klasse als Schemaobjekt im Schema des loadjava-Users select object_name, object_type, status from user_objects where object_type like '%JAVA%'; OBJECT_NAME OBJECT_TYPE STATUS ---------------------------------------------------------------- HelloWorld JAVA CLASS VALID HelloWorld JAVA SOURCE VALID 2 Zeilen ausgewählt.

9 © 2003, Rudolf Jansen Java in der Datenbank Alternative: Direktes Anlegen in der Datenbank create or replace and compile java source named HelloWorldInTheDatabase as public class HelloWorldInTheDatabase { public static void test() { System.out.println("Hello World from the DB-Version"); } } Java wurde erstellt.

10 © 2003, Rudolf Jansen Java in der Datenbank Administration über Oracle Enterprise Manager

11 © 2003, Rudolf Jansen Java Stored Procedures Aufruf über Java Stored Procedure „PL/SQL mit Java-Aufrufen“ create or replace procedure start_helloworld as language java name 'HelloWorld.test()';. Aufruf dieser Wrapper-Funktion execute start_helloworld; Hello World from Test-Method PL/SQL-Prozedur wurde erfolgreich abgeschlossen. Voraussetzung (da sonst nur Ausgabe in das Tracefile) SQL> call dbms_java.set_output(buffersize)

12 © 2003, Rudolf Jansen Resolving kein Dateisystem in der Datenbank Ô kein CLASSPATH stattdessen Suche nach den Javaklassen in den folgenden Datenbankschemata ¬ Schema des aufrufenden Users ­ über PUBLIC-Synonyme u.a. im SYS-Schema (enthält die J2SE-Klassen) Reihenfolge kann über RESOLVE-Klausel beim Laden der Klasse überschrieben werden

13 © 2003, Rudolf Jansen Resolving Beispiel: Laden einer geänderten HelloWorld.java-Datei in das Schema SCOTT public class HelloWorld { public static void main(String args[]) { System.out.println("Hello World from Scott"); } public static void test() { System.out.println("Hello World from Scott-test"); } } %ORACLE_HOME%\bin\loadjava -user scott/tiger -resolve -verbose HelloWorld.java

14 © 2003, Rudolf Jansen Resolving select object_name, owner, object_type, status from all_objects where object_type = 'JAVA CLASS' and object_name = 'HelloWorld'; OBJECT_NAME OWNER OBJECT_TYPE STATUS ---------------------------------------------------------------------------- HelloWorld SCOTT JAVA CLASS VALID HelloWorld TEST JAVA CLASS VALID 2 Zeilen ausgewählt.

15 © 2003, Rudolf Jansen Resolving create or replace and compile java source named HelloWorldResolver resolver ((*SCOTT) (*TEST) (*PUBLIC)) as public class HelloWorldResolver { public static void test() { HelloWorld.test(); } } alternativ auch Angabe über die -resolve-Option des loadjava-Tools

16 © 2003, Rudolf Jansen Resolving create or replace procedure start_helloworld_resolver as language java name 'HelloWorldResolver.test()'; Prozedur wurde angelegt. execute start_helloworld_resolver; Hello World from Scott-test PL/SQL-Prozedur wurde erfolgreich abgeschlossen.

17 © 2003, Rudolf Jansen Administration Init-Parameter: SHARED_POOL_SIZE - Default: 50 MB - Laden und Resolven von Java-Klassen JAVA_POOL_SIZE Default: 20 MB jeder Java-Aufruf erfolgt in eigener JVM und eigener DB-Session Java_Pool enthält von mehreren Cleints gemeinsam genutzen Code und Read-Only-Daten  Speicherbedarf pro JVM : ca. 40 KB

18 © 2003, Rudolf Jansen Administration Init-Parameter: JAVA_SOFT_SESSIONSPACE_LIMIT JAVA_MAX_SESSIONSPACE_LIMIT - Überwachung des Speicherbedarfs einer Java-Anwendung - ähnlich: ulimit (UNIX) - Überschreitung der JAVA_SOFT_SESSIONSPACE_LIMIT-Grenze:  Warnmeldung ins Trace-File - Überschreitung der JAVA_MAX_SESSIONSPACE_LIMIT-Grenze:  Out-Of-Memory-Fehler  „Notbremse“ gegen übermäßige Belegung des Java-Pools

19 © 2003, Rudolf Jansen Administration Rechtevergabe: Sicherheitskonzept der Oracle 9i JVM basiert auf dem Java 2 Security-Konzept Rechtevergabe und Verwaltung über PolicyTable insbesondere Zugriffsrechte auf Betriebssystem-Ressourcen - Dateien - Sockets -...

20 © 2003, Rudolf Jansen Administration desc user_java_policy KIND VARCHAR2(8) GRANTEE_NAME NOT NULL VARCHAR2(30) TYPE_SCHEMA NOT NULL VARCHAR2(30) TYPE_NAME VARCHAR2(4000) NAME VARCHAR2(4000) ACTION VARCHAR2(4000) ENABLED VARCHAR2(8) SEQ NUMBER Package DBMS_JAVA:  grant_permission (Vergabe eines positiven Rechts)  restrict_permission (Vergabe eines negativen Rechts)  revoke_permission (Rücknahme eines Rechts)  disable_permission (Ausschalten eines Eintrages der PolicyTable)

21 © 2003, Rudolf Jansen Administration Beispiel: Leserechte auf C:\tmp für alle, Schreibrechte nur für den User TEST: call dbms_java.grant_permission('PUBLIC', 'java.io.FilePermission', 'C:\tmp\*', 'read'); call dbms_java.grant_permission('TEST', 'java.io.FilePermission', 'C:\tmp\*', 'read,write');

22 © 2003, Rudolf Jansen Administration select * from user_java_policy where type_name='java.io.FilePermission' and name like '%C:%' KIND GRA... TY... TYPE_NAME NAME ACTION ENABLED SEQ --------------------------------------------------------------------------------------------------------------- GRANT PUBLIC SYS java.io.FilePermission C:\tmp\* read ENABLED 124 GRANT TEST SYS java.io.FilePermission C:\tmp\* read,write ENABLED 125 2 Zeilen ausgewählt.

23 © 2003, Rudolf Jansen Besonderheiten Besonderheiten bei serverseitigen Java-Anwendungen: GUI-Komponenten machen keinen Sinn und werden daher nicht unterstützt (J2SE-)Javasourcecode kann von Java-Client-Applikationen übernommen werden Aufrufstelle ist nicht nur die main-Methode, sondern jede statische Methode kein Connect()-Befehl erforderlich, da Aufruf und Ausführung innerhalb einer Datenbanksession native Compilierung kein Multithreading

24 © 2003, Rudolf Jansen Threading alle Java-Threads laufen innerhalb eines Betriebssystem- Threads - Multithreaded Java-Code kann übernommen werden - Aber: kein Performancegewinn zu erwarten Empfehlung: - DB-interne Anwendungen mit einem Thread implementieren - falls Parallelverarbeitung in x Threads gewünscht ist:  x Java-Aufrufe in x verschiedenen JVMs starten (pro JVM ca. 40 KB Speicherbedarf)  Koordination der x JVMs übernimmt die DB

25 © 2003, Rudolf Jansen Wann Java, wann PL/SQL PL/SQL: + datenintensive Anwendungen + Verwendung von SQL-Datentypen Ô keine Typumwandlung + keine zusätzliche JDBC-Schicht Java: + Einsatz von (J2SE-)API-Schnittstellen (Filehandling, Mailversand,...) + Kombination mit XML in der Datenbank Allgemeine Kriterien: - Know-How-Trennung in der Entwicklergruppe - zentrale Administration von DB- und Java-Komponenten - Performance-Tests mit realen Projekt-Daten(mengen)

26 © 2003, Rudolf Jansen Literatur OTN-Webseiten http://otn.oracle.com – Dokumentation – Sourcecode-Beispiele „Oracle, Java, XML. Integration in Oracle 9i“ Rudolf Jansen Software&Support Verlag ca. 360 Seiten ISBN 3-935042-33-7 erscheint März 2003


Herunterladen ppt "© 2003, Rudolf Jansen Java in der Datenbank Rudolf Jansen Freiberuflicher Entwickler und Autor DOAG SIG Development, 6.3.2003."

Ähnliche Präsentationen


Google-Anzeigen