Writing Stored Procedures with Oracle Database 12c

29
Writing Java Stored Procedures with Oracle Database 12c Martin Toshev

Transcript of Writing Stored Procedures with Oracle Database 12c

Page 1: Writing Stored Procedures with Oracle Database 12c

Writing Java Stored Procedureswith Oracle Database 12c

Martin Toshev

Page 2: Writing Stored Procedures with Oracle Database 12c

Who am I

Software consultant (self-employed)

BG JUG governance board member (http://jug.bg)

OpenJDK contributor

Page 3: Writing Stored Procedures with Oracle Database 12c

Agenda

• PL/SQL vs Java Stored Procedures

• Writing Java Stored Procedures

• Managing Java Stored Procedures

• New features in Oracle Database 12c

Page 4: Writing Stored Procedures with Oracle Database 12c

PL/SQL vs Java Stored Procedures

Page 5: Writing Stored Procedures with Oracle Database 12c

PL/SQL vs Java Stored Procedures

• Both PL/SQL and Java stored procedures are executed directly on the RDBMS

• Both PL/SQL and Java stored procedures can be recompiled dynamically when source code changes

• Easier migration of Java stored procedures to/from the application tier

Page 6: Writing Stored Procedures with Oracle Database 12c

PL/SQL vs Java Stored Procedures

• The PL/SQL Virtual Machine (PVM) is the database component that executes the PL/SQL bytecode (lower lever representation of the PL/SQL code that is generated from the PL/SQL compiler)

• PVM is written in C

Page 7: Writing Stored Procedures with Oracle Database 12c

PL/SQL vs Java Stored Procedures

• Java procedures are executed from a JVM (Java Virtual Machine) process running inside the Oracle RDBMS:

OracleDB

OracleRDBMS PL/SQL JVM

Java method

Page 8: Writing Stored Procedures with Oracle Database 12c

PL/SQL vs Java Stored Procedures

• Since the Oracle JVM is embedded in the database this introduces a number of new concepts:

– Oracle JVM process that runs within an Oracle database session

– classloader that loads classes from the database

– no notion of main() method

– loading of system classes from the SYS schema (where they are stored)

Page 9: Writing Stored Procedures with Oracle Database 12c

PL/SQL vs Java Stored Procedures

• Since the Oracle JVM is embedded in the database this introduces a number of new concepts:

– oracle.aurora.rdbms.DbmsJava.classForNameAndSchema() for loading a class from a database schema

– The Oracle JVM uses the database memory structures to store data

– The garbage collector makes use of the call and session memory on a per-user basis

Page 10: Writing Stored Procedures with Oracle Database 12c

PL/SQL vs Java Stored Procedures

• Since the Oracle JVM is embedded in the database this introduces a number of new concepts:

– no support for JNI

– server-side JDBC driver providing access to Oracle data (using the "jdbc:default:connection:“ connection URL)

– server-side SQLJ translator – allows embedding of SQL statements in Java stored procedures

Page 11: Writing Stored Procedures with Oracle Database 12c

Writing Java Stored Procedures

Page 12: Writing Stored Procedures with Oracle Database 12c

Writing Java Stored Procedures

• In order to create a Java stored procedure:

o write the Java class that contains the Java procedure(s) (static method(s) in the class)

o load the compiled Java procedure in the Oracle database using the loadjava utility or the CREATE JAVA command

o map a PL/SQL function/procedure to the Java procedure using the CREATE FUNCTION/PROCEDURE command

Page 13: Writing Stored Procedures with Oracle Database 12c

Writing Java Stored Procedures

• The loadjava utility uses the CREATE JAVA {SOURCE | CLASS | RESOURCE} command to load source/class/resource files

Page 14: Writing Stored Procedures with Oracle Database 12c

Writing Java Stored Procedures

• Example: loading the Sample.java source file using the orcl user:

• Example: loading the Sample.java source file using the orcl user and compiling it:

loadjava -u orcl Sample.java

loadjava -u orcl –resolve Sample.java

Page 15: Writing Stored Procedures with Oracle Database 12c

Writing Java Stored Procedures

• Map the Java static function func() from the Sample class:

CREATE OR REPLACE FUNCTION func RETURN VARCHAR2 AS LANGUAGE JAVA NAME ‘Sample.func() return java.lang.String';

Page 16: Writing Stored Procedures with Oracle Database 12c

Writing Java Stored Procedures

• Invoke the func function:

VARIABLE result VARCHAR2(20); CALL func() INTO :resultPRINT result;

Page 17: Writing Stored Procedures with Oracle Database 12c

Writing Java Stored Procedures

• You can provide privileges for other users to invoke your class(es) using the loadjava utility or the GRANT command:loadjava -grant usr –u orcl Sample.java

GRANT EXECUTE ON Sample TO usr;

Page 18: Writing Stored Procedures with Oracle Database 12c

Writing Java Stored Proceduresdemo

Page 19: Writing Stored Procedures with Oracle Database 12c

Managing Java Stored Procedures

Page 20: Writing Stored Procedures with Oracle Database 12c

Managing Java Stored Procedures

• USER_OBJECTS table (OBJECT_TYPE columns is any of JAVA SOURCE, JAVA CLASS or JAVA RESOURCE in a valid/invalid state)

Page 21: Writing Stored Procedures with Oracle Database 12c

Managing Java Stored Procedures

• JMX can be used to monitor the Oracle JVM

• The current user must be granted the JMXSERVER role

• The dbms_java.start_jmx_agent can be used to start the JMX server for the session

Page 22: Writing Stored Procedures with Oracle Database 12c

Managing Java Stored Procedures

• Java stored procedures can be debugged be debugged by a JWDP-compliant debugger

• Such as a debugger is provided by jdb and the JDeveloper IDE

exec DBMS_DEBUG_JDWP.CONNECT_TCP('localhost', 6666);

Page 23: Writing Stored Procedures with Oracle Database 12c

Managing Java Stored Procedures

• Compiler options can be specified:

– in the JAVA$OPTIONS table– via the loadjava utility – via the DBMS_JAVA package (that

creates/modifies the JAVA$OPTIONS table)

Page 24: Writing Stored Procedures with Oracle Database 12c

Managing Java Stored Proceduresdemo

Page 25: Writing Stored Procedures with Oracle Database 12c

New Features in Oracle Database 12c

Page 26: Writing Stored Procedures with Oracle Database 12c

New features in Oracle Database 12c

• Support for multiple JDK versions (JDK 6 by default but JDK 7 or earlier can be specified)

• Considering multitenant databases introduced in 12c: PDBs (pluggable databases) share the same JDK version specified over the CDB (container database)

Page 27: Writing Stored Procedures with Oracle Database 12c

New features in Oracle Database 12c

• Native Oracle JVM support for JNDI

• Customizing the default java.security resource

Page 28: Writing Stored Procedures with Oracle Database 12c

New features in Oracle Database 12c

• Enhanced support for logging properties lookup

• Secure use of Runtime.exec

• Improved debugging support for Java Stored Procedures (watchpoints/breakpoints)

Page 29: Writing Stored Procedures with Oracle Database 12c

Thank you !

Q&A