Procedimiento para llamar al tiempo de ejecución de Java en las extensiones de lenguaje de SQL Server

Se aplica a: SQL Server 2019 (15.x) y versiones posteriores.

La función de extensiones del lenguaje de SQL Server usa el procedimiento almacenado del sistema sp_execute_external_script como interfaz para llamar al tiempo de ejecución de Java.

En este artículo de procedimientos se explican los detalles de implementación de las clases y los métodos de Java que se ejecutan en SQL Server.

Dónde se deben colocar las clases de Java

Hay dos métodos para llamar a las clases de Java en SQL Server:

  1. Coloque archivos .class o .jar en la ruta de clase de Java.

  2. Cargue clases compiladas en un archivo .jar y otras dependencias en la base de datos mediante el DDL de biblioteca externa.

Nota:

Como recomendación general, use archivos .jar en vez de archivos .class individuales. Se trata de una práctica común en Java que facilitará la experiencia global. Consulte también Creación de un archivo .jar de Java a partir de archivos de clase.

Usar Classpath

Principios básicos

A continuación se muestran algunos principios básicos a la hora de ejecutar Java en SQL Server.

  • Debe haber clases de Java personalizadas compiladas en los archivos .class o .jar de la ruta de clase de Java. El parámetro CLASSPATH proporciona la ruta de acceso a los archivos de Java compilados.

  • El método Java al que se está llamando se debe proporcionar en el parámetro script del procedimiento almacenado.

  • Si la clase pertenece a un paquete, se debe proporcionar packageName.

  • params sirve para pasar parámetros a una clase de Java. No se admiten las llamadas a un método que requiere argumentos. Por lo tanto, los parámetros son la única forma de pasar valores de argumento al método.

Nota:

Esta nota modifica las operaciones admitidas y no admitidas que son específicas de Java en SQL Server 2019 (15.x) y versiones posteriores. En el procedimiento almacenado, se admiten parámetros de entrada, pero no parámetros de salida.

Llamar a una clase de Java

El procedimiento almacenado del sistema sp_execute_external_script es la interfaz que se usa para llamar al tiempo de ejecución de Java. En el ejemplo siguiente se muestra un sp_execute_external_script que usa la extensión de Java, así como parámetros para especificar la ruta de acceso, el script y el código personalizado.

Nota:

No es necesario definir el método al que se va a llamar. De forma predeterminada, se llama a un método denominado execute. Esto significa que debe seguir el SDK de extensibilidad de Microsoft para Java en SQL Server e implementar un método execute en la clase Java.

DECLARE @param1 INT

SET @param1 = 3

EXEC sp_execute_external_script @language = N'Java',
    @script = N'<packageName>.<ClassName>',
    @input_data_1 = N'<Input Query>',
    @param1 = @param1;

Establecer CLASSPATH

Una vez compilada la clase o clases Java y creado un archivo .jar en la classpath de Java, tiene dos opciones para proporcionar la ruta a la extensión Java de SQL Server:

  1. Usar bibliotecas externas

    La opción más sencilla consiste en hacer que SQL Server busque automáticamente las clases creando bibliotecas externas y apuntando la biblioteca hacia un archivo jar. Usar bibliotecas externas para Java

  2. Registrar una variable de entorno del sistema

    Puede crear una variable de entorno del sistema y proporcionar las rutas de acceso al archivo .jar que contiene las clases. Cree una variable de entorno del sistema denominada CLASSPATH.

Usar una biblioteca externa

En SQL Server 2019 (15.x) y versiones posteriores, puede usar bibliotecas externas para el lenguaje Java en Windows y Linux. Puede compilar las clases en un archivo .jar y cargar el archivo .jar junto con otras dependencias en la base de datos mediante el DDL CREATE EXTERNAL LIBRARY.

Ejemplo de cómo cargar un archivo .jar con la biblioteca externa:

CREATE EXTERNAL LIBRARY myJar
FROM (CONTENT = '<local path to .jar file>')
WITH (LANGUAGE = 'Java');
GO

Al crear una biblioteca externa, SQL Server obtiene acceso automático a las clases de Java y no será necesario establecer ningún permiso especial en la ruta de clase.

El código que se muestra a continuación es un ejemplo de cómo llamar a un método en una clase desde un paquete cargado como biblioteca externa:

EXEC sp_execute_external_script
    @language = N'Java',
    @script = N'MyPackage.MyCLass',
    @input_data_1 = N'SELECT * FROM MYTABLE'
WITH RESULT SETS((column1 INT));

Para obtener más información, vea CREATE EXTERNAL LIBRARY.

Conexión de bucle invertido en SQL Server

Use una conexión de bucle invertido para volver a conectar con SQL Server a través de JDBC a fin de leer o escribir datos de Java ejecutado desde sp_execute_external_script. Esto se puede usar cuando no se pueden usar los argumentos InputDataSet y OutputDataSet de sp_execute_external_script . Para realizar una conexión de bucle invertido en Windows use el ejemplo siguiente:

jdbc:sqlserver://localhost:1433;databaseName=Adventureworks;integratedSecurity=true;

Para realizar una conexión de bucle invertido en Linux, el controlador JDBC requiere que se definan tres propiedades de conexión en el certificado siguiente:

Autenticación de certificados de clientes