Come chiamare il runtime Java nelle estensioni del linguaggio di SQL Server
Si applica a: SQL Server 2019 (15.x) e versioni successive
Le funzionalità estensioni del linguaggio di SQL Server usa la stored procedure di sistema sp_execute_external_script come interfaccia per chiamare il runtime Java.
Questo articolo illustra i dettagli di implementazione per le classi e i metodi Java eseguiti in SQL Server.
Dove inserire le classi Java
Esistono due metodi per chiamare le classi Java in SQL Server:
Inserire i file
.class
o.jar
nel classpath Java.Caricare le classi compilate in un file
.jar
e altre dipendenze nel database usando il file DDL della libreria esterna.
Nota
Come raccomandazione generale, usare file .jar
e non singoli file .class
. Si tratta di una pratica comune in Java che renderà più semplice l'esperienza complessiva. Vedere anche Creare un file .jar di Java dai file di classe.
Usare Classpath
Principi di base
Di seguito sono riportati alcuni principi di base per l'esecuzione di Java in SQL Server.
Le classi Java personalizzate compilate devono esistere nei file
.class
o.jar
nel classpath Java. Il parametro CLASSPATH fornisce il percorso dei file Java compilati.Il metodo Java che si sta chiamando deve essere specificato nel parametro
script
nella stored procedure.Se la classe appartiene a un pacchetto, è necessario specificare il
packageName
.params
viene usato per passare i parametri a una classe Java. La chiamata a un metodo che richiede argomenti non è supportata. Pertanto, i parametri sono l'unico modo per passare i valori degli argomenti al metodo.
Nota
Questa nota riporta le operazioni supportate e non supportate specifiche di Java in SQL Server 2019 (15.x) e versioni successive. Nella stored procedure sono supportati i parametri di input, mentre i parametri di output non sono supportati.
Chiamare la classe Java
La stored procedure di sistema sp_execute_external_script è l'interfaccia usata per chiamare il runtime Java. L'esempio seguente illustra un sp_execute_external_script
che usa l'estensione Java e i parametri per specificare il percorso, lo script e il codice personalizzato.
Nota
Non è necessario definire il metodo da chiamare. Per impostazione predefinita, viene chiamato un metodo denominato execute
. Ciò significa che è necessario seguire Microsoft Extensibility SDK per Java in SQL Server e implementare un metodo execute nella classe 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;
Impostare CLASSPATH
Dopo aver compilato la classe o le classi Java e aver creato un file .jar
nel classpath
Java, sono disponibili due opzioni per specificare il percorso per l'estensione Java di SQL Server:
Usare librerie esterne
L'opzione più semplice consiste nel far sì che SQL Server trovi automaticamente le classi creando librerie esterne e facendo puntare la libreria a un file con estensione jar. Usare librerie esterne per Java
Registrare una variabile di ambiente di sistema
È possibile creare una variabile di ambiente di sistema e specificare i percorsi del file
.jar
contenente le classi. Creare una variabile di ambiente di sistema denominataCLASSPATH
.
Usare una libreria esterna
In SQL Server 2019 (15.x) e versioni successive è possibile usare librerie esterne per il linguaggio Java in Windows e Linux. È possibile compilare le classi in un file .jar
e caricare il file .jar
e altre dipendenze nel database usando il DDL CREATE EXTERNAL LIBRARY.
Esempio di come caricare un file .jar
con la libreria esterna:
CREATE EXTERNAL LIBRARY myJar
FROM (CONTENT = '<local path to .jar file>')
WITH (LANGUAGE = 'Java');
GO
Creando una libreria esterna, SQL Server avrà automaticamente accesso alle classi Java e non sarà necessario impostare autorizzazioni di accesso speciali per il classpath.
Il codice seguente è un esempio di chiamata di un metodo in una classe da un pacchetto, caricato come libreria esterna:
EXEC sp_execute_external_script
@language = N'Java',
@script = N'MyPackage.MyCLass',
@input_data_1 = N'SELECT * FROM MYTABLE'
WITH RESULT SETS((column1 INT));
Per altre informazioni, vedere CREATE EXTERNAL LIBRARY.
Connessione loopback a SQL Server
Usare una connessione loopback per riconnettersi a SQL Server tramite JDBC per leggere o scrivere dati da Java in esecuzione da sp_execute_external_script
. È possibile usarlo quando non è possibile usare gli argomenti InputDataSet
e OutputDataSet
di sp_execute_external_script
.
Per stabilire una connessione loopback in Windows, usare l'esempio seguente:
jdbc:sqlserver://localhost:1433;databaseName=Adventureworks;integratedSecurity=true;
Per creare una connessione loopback in Linux, il driver JDBC richiede tre proprietà di connessione definite nel certificato seguente:
Autenticazione con certificato client