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:
Coloque archivos
.class
o.jar
en la ruta de clase de Java.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:
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
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 denominadaCLASSPATH
.
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