Guide pratique pour appeler le runtime Java dans les extensions de langage SQL Server
S’applique à : SQL Server 2019 (15.x) et versions ultérieures
Les extensions de langage SQL Server utilisent la procédure stockée système sp_execute_external_script comme interface pour appeler le runtime Java.
Cet article décrit de manière pratique les détails relatifs à l’implémentation des classes et méthodes Java qui s’exécutent sur SQL Server.
Où placer les classes Java
Il existe deux méthodes pour appeler des classes Java dans SQL Server :
Placez les fichiers
.class
ou.jar
dans votre classpath Java.Chargez les classes compilées dans un fichier
.jar
et les autres dépendances dans la base de données à l’aide de l’instruction DDL relative à la bibliothèque externe.
Remarque
En règle générale, utilisez de préférence des fichiers .jar
et non des fichiers .class
individuels. Il s’agit d’une pratique courante en Java, qui rend l’expérience globale plus facile. Consultez également Créer un fichier .jar Java à partir de fichiers de classe.
Utiliser Classpath
Principes de base
Voici quelques principes de base liés à l’exécution de Java sur SQL Server.
Les classes Java personnalisées et compilées doivent exister dans les fichiers
.class
ou.jar
de votre classpath Java. Le paramètre CLASSPATH fournit le chemin des fichiers Java compilés.La méthode Java que vous appelez doit être indiquée dans le paramètre
script
de la procédure stockée.Si la classe appartient à un package, le
packageName
doit être fourni.params
permet de passer des paramètres à une classe Java. L’appel d’une méthode qui nécessite des arguments n’est pas pris en charge. Les paramètres sont donc le seul moyen de passer des valeurs d’argument à votre méthode.
Remarque
Cette remarque rappelle les opérations prises en charge et non prises en charge spécifiques à Java dans SQL Server 2019 (15.x) et versions ultérieures. Dans la procédure stockée, les paramètres d’entrée sont pris en charge, tandis que les paramètres de sortie ne sont pas pris en charge.
Appeler la classe Java
La procédure stockée système sp_execute_external_script est l’interface utilisée pour appeler le runtime Java. L’exemple suivant montre une procédure stockée système sp_execute_external_script
qui utilise l’extension Java, et des paramètres qui permettent de spécifier le chemin, le script et votre code personnalisé.
Remarque
Vous n’avez pas besoin de définir la méthode à appeler. Par défaut, une méthode nommée execute
est appelée. Cette appellation signifie que vous devez suivre le kit SDK d’extensibilité Microsoft pour Java pour SQL Server, et implémenter une méthode execute dans votre 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;
Définir CLASSPATH
Une fois que vous avez compilé votre classe ou vos classes Java, et créé un fichier .jar
dans votre classpath
Java, vous avez deux options pour fournir le chemin d’accès à l’extension Java de SQL Server :
Utiliser des bibliothèques externes
L’option la plus simple consiste à permettre à SQL Server de trouver automatiquement vos classes, en créant des bibliothèques externes et en les faisant pointer vers un fichier jar. Utiliser des bibliothèques externes pour Java
Inscrire une variable d’environnement système
Vous pouvez créer une variable d’environnement système, et fournir les chemins vers votre fichier
.jar
qui contient les classes. Créez une variable d’environnement système appeléeCLASSPATH
.
Utiliser une bibliothèque externe
Dans SQL Server 2019 (15.x) et versions ultérieures, vous pouvez utiliser des bibliothèques externes pour le langage Java sur Windows et Linux. Vous pouvez compiler vos classes dans un fichier .jar
et charger le fichier .jar
ainsi que d’autres dépendances dans la base de données à l’aide de l’instruction DDL CRÉER UNE BIBLIOTHÈQUE EXTERNE.
Exemple de chargement d’un fichier .jar
avec une bibliothèque externe :
CREATE EXTERNAL LIBRARY myJar
FROM (CONTENT = '<local path to .jar file>')
WITH (LANGUAGE = 'Java');
GO
Lorsque SQL Server crée une bibliothèque externe, il a automatiquement accès aux classes Java. De plus, il n’est pas nécessaire de définir des autorisations spéciales pour le chemin d’accès aux classes.
Le code suivant est un exemple d’appel d’une méthode dans une classe à partir d’un package, téléchargé comme bibliothèque externe :
EXEC sp_execute_external_script
@language = N'Java',
@script = N'MyPackage.MyCLass',
@input_data_1 = N'SELECT * FROM MYTABLE'
WITH RESULT SETS((column1 INT));
Pour plus d’informations, consultez CREATE EXTERNAL LIBRARY.
Connexion de bouclage à SQL Server
Utilisez une connexion de bouclage pour vous reconnecter à SQL Server sur JDBC afin de lire ou d’écrire des données à partir de code Java exécuté dans sp_execute_external_script
. Vous pouvez l’utiliser lorsque les arguments InputDataSet
et OutputDataSet
de sp_execute_external_script
ne sont pas possibles.
Pour établir une connexion de bouclage sur Windows, utilisez l’exemple suivant :
jdbc:sqlserver://localhost:1433;databaseName=Adventureworks;integratedSecurity=true;
Pour établir une connexion de bouclage sur Linux, il est nécessaire de définir trois propriétés de connexion dans le certificat suivant pour le pilote JDBC :
Authentification par certificat client