Top Banner
Writing Java Stored Procedures with Oracle Database 12c Martin Toshev, BGOUG, 13.06.2015
29

Writing Stored Procedures in Oracle 12c

Aug 03, 2015

Download

Technology

Martin Toshev
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Writing Stored Procedures in Oracle 12c

Writing Java Stored Procedureswith Oracle Database 12c

Martin Toshev,BGOUG, 13.06.2015

Page 2: Writing Stored Procedures in Oracle 12c

Who am I

Software engineer @ EPAM Bulgaria

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

OpenJDK contributor

Page 3: Writing Stored Procedures in Oracle 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 in Oracle 12c

PL/SQL vs Java Stored Procedures

Page 5: Writing Stored Procedures in Oracle 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 in Oracle 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 in Oracle 12c

PL/SQL vs Java Stored Procedures

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

OracleDB

OracleDB

OracleRDBMSOracle

RDBMS PL/SQLPL/SQL JVMJVM

Java method

Java method

Page 8: Writing Stored Procedures in Oracle 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 in Oracle 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 in Oracle 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 in Oracle 12c

Writing Java Stored Procedures

Page 12: Writing Stored Procedures in Oracle 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 in Oracle 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 in Oracle 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 in Oracle 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 in Oracle 12c

Writing Java Stored Procedures

• Invoke the func function:

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

Page 17: Writing Stored Procedures in Oracle 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 in Oracle 12c

Writing Java Stored Proceduresdemo

Page 19: Writing Stored Procedures in Oracle 12c

Managing Java Stored Procedures

Page 20: Writing Stored Procedures in Oracle 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 in Oracle 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 in Oracle 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 in Oracle 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 in Oracle 12c

Managing Java Stored Proceduresdemo

Page 25: Writing Stored Procedures in Oracle 12c

New Features in Oracle Database 12c

Page 26: Writing Stored Procedures in Oracle 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 in Oracle 12c

New features in Oracle Database 12c

• Native Oracle JVM support for JNDI

• Customizing the default java.security resource

Page 28: Writing Stored Procedures in Oracle 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 in Oracle 12c

Thank you !

Q&A