SQL Server 用の Microsoft Extensibility SDK for Java

適用対象: SQL Server 2019 (15.x) 以降のバージョン

Microsoft Extensibility SDK for Java を使用して、SQL Server 用の Java プログラムを実装する方法について説明します。 この SDK は、SQL Server とデータを交換し、SQL Server から Java コードを実行するために使用される Java 言語拡張のインターフェイスです。

SDK は、SQL Server 2019 (15.x) 以降のバージョンの一部として、Windows と Linux の両方にインストールされます。

  • Windows 上のデフォルのインストール パス: <instance installation home directory>\MSSQL\Binn\mssql-java-lang-extension.jar
  • Linux 上のデフォルのインストール パス: /opt/mssql/lib/mssql-java-lang-extension.jar

このコードはオープンソースであり、SQL Server 言語拡張の GitHub リポジトリに掲載されています。

実装の要件

この SDK のインターフェイスには、Java ランタイムと通信するために SQL Server に満たす必要がある一連の要件が定義されています。 この SDK を使用するには、メイン クラスのいくつかの実装ルールに従う必要があります。 SQL Server で Java 言語拡張を使用し、Java クラスの特定のメソッドを実行してデータを交換することができます。

SDK の使用方法の例については、「チュートリアル:Java で正規表現 (regex) を使用して文字列を検索する」を参照してください。

SDK のクラス

SDK は、3 つのクラスで構成されています。

SQL Server との間でデータを交換するために Java 拡張機能で使用されるインターフェイスを定義する 2 つの抽象クラス。

  • AbstractSqlServerExtensionExecutor
  • AbstractSqlServerExtensionDataset

3 つ目のクラスは、データ セット オブジェクトの実装を含むヘルパー クラスです。 これはオプションのクラスなので、簡単に始めることができます。 代わりに、このようなクラスの独自の実装を使用することもできます。

  • PrimitiveDataset

次のセクションでは、SDK の各クラスについて説明します。 SDK クラスのソース コードは、SQL Server 言語拡張の GitHub リポジトリで入手できます。

クラス:AbstractSqlServerExtensionExecutor

抽象クラス AbstractSqlServerExtensionExecutor には、SQL Server の Java 言語拡張機能によって Java コードを実行するために使用されるインターフェイスが含まれています。

メイン Java クラスは、このクラスを継承する必要があります。 このクラスから継承するということは、独自のクラスで実装する必要がある特定のメソッドがクラスにあることを意味します。

この抽象クラスから継承するには、クラス宣言で抽象クラス名を使用して拡張します。

public class <MyClass> extends AbstractSqlServerExtensionExecutor {}

少なくとも、メイン クラスは execute(...) メソッドを実装する必要があります。

メソッド execute

execute メソッドは、SQL Server から Java コードを呼び出すために、Java 言語拡張を介して SQL Server から呼び出されるメソッドです。 これは、SQL Server から実行する主な操作を含める重要なメソッドです。

メソッド引数を SQL Server から Java に渡すには、sp_execute_external_script@param パラメーターを使用します。 メソッド execute は引数をそのように受け取ります。

public AbstractSqlServerExtensionDataset execute(AbstractSqlServerExtensionDataset input, LinkedHashMap<String, Object> params)  {}

メソッド init

init メソッドは、コンストラクターの後、execute メソッドの前に実行されます。 execute(...) の前に実行する必要がある操作はすべてこのメソッドで実行できます。

public void init(String sessionId, int taskId, int numtask) {}

クラス:AbstractSqlServerExtensionDataset

抽象クラス AbstractSqlServerExtensionDataset には、Java 拡張機能によって使用される入出力データを処理するためのインターフェースが含まれています。

クラス:PrimitiveDataset

クラス PrimitiveDataset は、単純な型をプリミティブ配列として格納する AbstractSqlServerExtensionDataset の実装です。

PrimitiveDataset は、SDK でオプションのヘルパー クラスとして提供されます。 このクラスを使用しない場合は、AbstractSqlServerExtensionDataset を継承した独自のクラスを実装する必要があります。