PL/SQL y Java

    Otra de la virtudes de PL/SQL es que permite trabajar conjuntamente con Java.

    PL/SQL es un excelente lenguaje para la gestion de información pero en ocasiones, podemos necesitar de un lenguaje de programación más potente. Por ejemplo podríamos necesitar consumir un servicio Web, conectar a otro servidor, trabajar con Sockets .... Para estos casos podemos trabajar conjuntamente con PL/SQL y Java.

    Para poder trabajar con Java y PL/SQL debemos realizar los siguientes pasos:

  • Crear el programa Java y cargarlo en la base de datos.
  • Crear un program de recubrimiento (Wrapper) de PL/SQL.

Creacion de Objetos Java en la base de datos ORACLE.

    ORACLE incorpora su propia versión de la máquina virtual Java y del JRE. Esta versión de Java se instala conjuntamente con ORACLE.

    Para crear objetos Java en la base de datos podemos utilizar la uitlidad LoadJava de ORACLE desde linea de comandos o bien crear objetos JAVA SOURCE en la propia base de datos.

    La sintaxis para la creación de JAVA SOURCE en ORACLE es la siguiente.


CREATE [OR REPLACE] AND COMPILE
JAVA SOURCE
NAMED <JavaSourceName>
AS
public class <className>
{

<java code>
...
};

    El siguiente ejemplo crea y compila una clase Java OracleJavaClass en el interior de JAVA SOURCE FuentesJava. Un aspecto muy a tener en cuenta es que los métodos de la clase java que queramos invocar desde PL/SQL deben ser estaticos.


CREATE OR REPLACE AND COMPILE
JAVA SOURCE
NAMED FuentesJava
AS
public class OracleJavaClass
{
  public static String Saluda(String nombre)
  {
         return ("Hola desde Java" + nombre);
  }
}
;

    Un mismo JAVA SOURCE puede contener varias clases de Java.


CREATE OR REPLACE AND COMPILE
JAVA SOURCE
NAMED FuentesJava
AS
public class OracleJavaClass
{
  public static String Saluda(String nombre)
  {
         return ("Hola desde Java" + nombre);
  }
}
public class OracleJavaMejorada
{
  public static String SaludoMejorado(String nombre)
  {
         return ("Saludo mejorado desde Java para:" + nombre);
  }   
}
;

    La otra opción sería guardar nuestro codigo java en el archivo OracleJavaClass.java, compilarlo y cargarlo en ORACLE con LoadJava.

    A continuación se muestran ejemplos del uso de la utilidad LoadJava


loadJava
-help

loadJava -u usario/password -v -f -r OracleJavaClass.class

loadJava -u usario/password -v -f -r OracleJavaClass.java

Ejecución de programas Java con PL/SQL

    Una vez que tenemos listo el programa de Java debemos integrarlo con PL/SQL. Esto se realiza a través de subprogramas de recubrimiento llamados Wrappers.    

    No podemos crear un Wrapper en un bloque anonimo.

    La sintaxis general es la siguiente:


CREATE [OR REPLACE]
FUNCTION|PROCEDURE <name> [(<params>,...)]
[RETURN <tipo>]
IS|AS
LANGUAGE JAVA NAME
'<clase>.<metodo> [return <tipo>]' ;

    El siguiente ejemplo muestra el Wrapper para nuestra función Saludo.


CREATE OR REPLACE
FUNCTION Saluda_wrap (nombre VARCHAR2)
RETURN VARCHAR2
AS
LANGUAGE JAVA NAME
'OracleJavaClass.Saluda(java.lang.String) return java.lang.String';

    Una vez creado el wrapper, podremos ejecutarlo como cualquier otra funcion o procedure de PL/SQL. Debemos crear un wrapper por cada función java que queramos ejecutar desde PL/SQL.

    Cuando ejecutemos el wrapper, es decir, la función "Saluda_wrap", internamente se ejecutará la clase java y se invocará el método estático "OracleJavaClass.Saluda".
   
    Un aspecto a tener en cuenta es que es necesario proporcionar el nombre del tipo java completo, es decir, debemos especificar java.lang.String en lugar de únicamente String.


SELECT SALUDA_WRAP('DEVJOKER')
FROM DUAL;

    La ejecución de este ejemplo en SQL*Plus genera la siguiente salida:


SQL> SELECT SALUDA_WRAP('DEVJOKER') FROM DUAL;
SALUDA_WRAP('DEVJOKER')
----------------------------------------------
Hola desde JavaDEVJOKER

    Una recomendación de diseño sería agrupar todos los Wrapper en un mismo paquete.

    En el caso de que nuestro programa Java necesitase de packages Java adicionales, deberiamos cargarlos en la base de datos con la utilidad LoadJava.

Pedro  Herrarte  Sánchez
PL/SQL y Java
Pedro Herrarte Sánchez

Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación. Posee mas de diez años de experiencia trabajando para las principales empresas de España. Es especialista en tecnologías .NET, entornos Web (ASP.NET, ASP.NET MVC,jQuery, HTML5), bases de datos (SQL Server y ORACLE) e integración de sistemas. Es experto en desarrollo (C#, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE). Pedro es MCP y MAP 2012, es fundador, diseñador y programador de www.devjoker.com..
Fecha de alta:26/07/2006
Última actualizacion:26/07/2006
Visitas totales:119456
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com