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
一般的な推奨事項として、個別の .class ファイルではなく、 .jar ファイルを使用してください。 これは Java での一般的な方法であり、全体的なエクスペリエンスが簡単になります。 クラス ファイルから jar ファイルを作成する方法に関する記事を参照してください。
クラスパスを使用する
基本原則
SQL Server で Java を実行する場合の基本的な原則を次に示します。
コンパイル済みのカスタムの Java クラスは、Java クラスパスの .class ファイルまたは .jar ファイルに存在する必要があります。 CLASSPATH パラメーターには、コンパイル済みの Java ファイルへのパスを指定します。
呼び出す Java メソッドは、ストアド プロシージャの script パラメーターに指定する必要があります。
クラスがパッケージに属している場合は、packageName を指定する必要があります。
params は、Java クラスにパラメーターを渡すために使用されます。 引数を必要とするメソッドの呼び出しはサポートされていません。 そのため、引数の値をメソッドに渡すには、パラメーターが唯一の方法です。
Note
この注意では、SQL Server 2019 リリース候補 1 の Java に固有のサポートされている操作とサポートされていない操作について説明します。
- ストアド プロシージャでは、入力パラメーターがサポートされています。 出力パラメーターはそうではありません。
Java クラスを呼び出す
sp_execute_external_script システム ストアド プロシージャは、Java ランタイムの呼び出しに使用されるインターフェイスです。 Java 拡張を使用する sp_execute_external_script
と、パス、スクリプト、およびカスタム コードを指定するパラメーターの例を次に示します。
Note
呼び出すメソッドを定義する必要がないことに注意してください。 既定では、execute というメソッドが呼び出されます。 つまり、SQL Server の拡張機能 SDK for Java に従い、Java クラスに execute メソッドを実装する必要があります。
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 を設定する
1 つまたは複数の Java クラスをコンパイルし、Java クラスパスに jar ファイルを作成した後に、SQL Server Java 拡張機能のクラスパスを指定する方法は 2 つあります。
外部ライブラリを使用する
最も簡単な方法は、外部ライブラリを作成し、ライブラリを jar にポイントして、SQL Server からクラスを自動的に見つけられるようにすることです。 Java 用外部ライブラリを使用する
システム環境変数を登録する
システム環境変数を作成し、クラスを含む jar ファイルのパスを指定することができます。 CLASSPATH というシステム環境変数を作成します。
外部ライブラリを使用する
SQL Server 2019 リリース候補 1 では、Windows および Linux 上で Java 言語用の外部ライブラリを使用できます。 クラスを .jar ファイルにコンパイルし、CREATE EXTERNAL LIBRARY DDL を使用して .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 に接続します。 この方法は、sp_execute_external_script
の InputDataSet 引数と OutputDataSet 引数を使用できない場合に使用できます。
Windows で Loopback 接続するには、次の例を使用します。
jdbc:sqlserver://localhost:1433;databaseName=Adventureworks;integratedSecurity=true;
Linux で Loopback 接続するには、JDBC ドライバーに、次の証明書に定義されている 3 つの接続プロパティが必要になります。
Client-Certificate-Authentication