SQL Server 言語拡張で Java ランタイムを呼び出す方法
適用対象: SQL Server 2019 (15.x) 以降のバージョン
SQL Server 言語拡張機能は、Java ランタイムを呼び出すインターフェイスとして sp_execute_external_script システム ストアド プロシージャを使用します。
このハウツー記事では、SQL Server 上で実行される Java クラスとメソッドの実装について詳しく説明します。
Java クラスの配置場所
SQL Server で Java クラスを呼び出すには、次の 2 つの方法があります。
.class
または.jar
ファイルを Java クラスパスに配置します。外部ライブラリ DDL を使用して、
.jar
ファイル内のコンパイル済みクラスとその他の依存関係をデータベースにアップロードします。
Note
一般的な推奨事項として、個別の .jar
ファイルではなく、.class
ファイルを使用します。 これは Java での一般的な方法であり、全体的なエクスペリエンスが簡単になります。 「クラス ファイルから Java .jar ファイルを作成する」も参照してください。
クラスパスを使用する
基本原則
SQL Server で Java を実行する場合の基本的な原則を次に示します。
コンパイルされたカスタム Java クラスは、Java クラスパスの
.class
ファイルまたは.jar
ファイルに存在する必要があります。 CLASSPATH パラメーターには、コンパイル済みの Java ファイルへのパスを指定します。呼び出している Java メソッドは、ストアド プロシージャの
script
パラメータで指定する必要があります。クラスがパッケージに属している場合は、
packageName
を提供する必要があります。params
は、Java クラスにパラメータを渡すために使用されます。 引数を必要とするメソッドの呼び出しはサポートされていません。 そのため、引数の値をメソッドに渡すには、パラメーターが唯一の方法です。
Note
このメモでは、SQL Server 2019 (15.x) 以降のバージョンの Java に固有のサポートされている操作とサポートされていない操作について改めて説明します。 ストアド プロシージャでは、入力パラメーターがサポートされていますが、出力パラメーターはサポートされていません。
Java クラスを呼び出す
sp_execute_external_script システム ストアド プロシージャは、Java ランタイムの呼び出しに使用されるインターフェイスです。 Java 拡張を使用する sp_execute_external_script
と、パス、スクリプト、およびカスタム コードを指定するパラメーターの例を次に示します。
Note
どのメソッドを呼び出すかを定義する必要はありません。 デフォルトでは、execute
というメソッドが呼び出されます。 これは、Microsoft Extensibility SDK for Java for SQL Server に従い、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;
CLASSPATH を設定する
Java クラスをコンパイルし、Java .jar
に classpath
ファイルを作成したら、SQL Server Java 拡張機能へのパスを指定するための 2 つのオプションがあります。
外部ライブラリを使用する
最も簡単な方法は、外部ライブラリを作成し、ライブラリを jar にポイントして、SQL Server からクラスを自動的に見つけられるようにすることです。 Java 用外部ライブラリを使用する
システム環境変数を登録する
システム環境変数を作成し、クラスを含む
.jar
ファイルのパスを指定することができます。CLASSPATH
というシステム環境変数を作成します。
外部ライブラリを使用する
SQL Server 2019 (15.x) 以降のバージョンでは、Windows および Linux 上の Java 言語の外部ライブラリを使用できます。 CREATE EXTERNAL LIBRARY DDL を使用して、クラスを .jar
ファイルにコンパイルし、.jar
ファイルとその他の依存関係をデータベースにアップロードできます。
外部ライブラリを使用して .jar
ファイルをアップロードする方法の例:
CREATE EXTERNAL LIBRARY myJar
FROM (CONTENT = '<local path to .jar file>')
WITH (LANGUAGE = 'Java');
GO
外部ライブラリを作成すると、SQL Server は自動的に Java クラスにアクセスできるようになり、クラスパスに特別なアクセス許可を設定する必要はありません。
次のコードは、外部ライブラリとしてアップロードされたパッケージからクラス内のメソッドを呼び出す例です。
EXEC sp_execute_external_script
@language = N'Java',
@script = N'MyPackage.MyCLass',
@input_data_1 = N'SELECT * FROM MYTABLE'
WITH RESULT SETS((column1 INT));
詳細については、「CREATE EXTERNAL LIBRARY」を参照してください。
SQL Server への Loopback 接続
sp_execute_external_script
から実行される Java からデータの読み取りまたは書き込みを行うために、Loopback 接続を使用して JDBC 経由で SQL Server に接続します。 InputDataSet
の OutputDataSet
および sp_execute_external_script
引数を使用できない場合にこれを使用できます。
Windows で Loopback 接続するには、次の例を使用します。
jdbc:sqlserver://localhost:1433;databaseName=Adventureworks;integratedSecurity=true;
Linux で Loopback 接続するには、JDBC ドライバーに、次の証明書に定義されている 3 つの接続プロパティが必要になります。
Client-Certificate-Authentication