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:

  1. Inserire i file .class o .jar nel classpath Java.

  2. 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:

  1. 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

  2. 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 denominata CLASSPATH.

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