SQL Server 言語拡張で Java ランタイムを呼び出す方法

適用対象: SQL Server 2019 (15.x)

SQL Server 言語拡張には、Java ランタイムを呼び出すインターフェイスとして sp_execute_external_script システム ストアド プロシージャが使用されます。

このハウツー記事では、SQL Server 上で実行される Java クラスとメソッドの実装について詳しく説明します。

Java クラスの配置場所

SQL Server で Java クラスを呼び出すには、次の 2 つの方法があります。

  1. .class または .jar ファイルを Java クラスパスに配置します。

  2. 外部ライブラリ 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 つあります。

  1. 外部ライブラリを使用する

    最も簡単な方法は、外部ライブラリを作成し、ライブラリを jar にポイントして、SQL Server からクラスを自動的に見つけられるようにすることです。 Java 用外部ライブラリを使用する

  2. システム環境変数を登録する

    システム環境変数を作成し、クラスを含む 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_scriptInputDataSet 引数と OutputDataSet 引数を使用できない場合に使用できます。 Windows で Loopback 接続するには、次の例を使用します。

jdbc:sqlserver://localhost:1433;databaseName=Adventureworks;integratedSecurity=true;

Linux で Loopback 接続するには、JDBC ドライバーに、次の証明書に定義されている 3 つの接続プロパティが必要になります。

Client-Certificate-Authentication

次のステップ