Пакет SDK Майкрософт для расширения возможностей Java в SQL Server

Область применения: SQL Server 2019 (15.x) и более поздних версий

Узнайте, как реализовать программу Java для SQL Server с помощью пакета Microsoft Extensibility SDK для Java. Пакет SDK — это интерфейс для расширения языка Java, который используется для обмена данными с SQL Server и выполнения кода Java из SQL Server.

Пакет 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 определяет набор требований, которые должны быть выполнены для того, чтобы SQL Server мог взаимодействовать со средой выполнения Java. Чтобы использовать пакет SDK, необходимо выполнить некоторые правила реализации в основном классе. После этого SQL Server сможет выполнять определенный метод в классе Java и обмениваться данными с помощью расширения языка Java.

Пример использования пакета SDK см. в руководстве по поиску строки с помощью регулярных выражений (regex) в Java.

Классы SDK

Пакет SDK состоит из трех классов.

Два абстрактных класса определяют интерфейс, который расширение Java использует для обмена данными с SQL Server:

  • AbstractSqlServerExtensionExecutor
  • AbstractSqlServerExtensionDataset

Третий класс является вспомогательным и содержит реализацию объекта набора данных. Это необязательный класс, который упрощает начало работы. Вместо него можно использовать собственную реализацию такого класса.

  • PrimitiveDataset

В следующем разделе описаны описания каждого класса в пакете SDK. Исходный код классов в пакете SDK доступен в репозитории расширений языка SQL Server в GitHub.

Класс: AbstractSqlServerExtensionExecutor

Абстрактный класс AbstractSqlServerExtensionExecutor содержит интерфейс, используемый для выполнения кода Java расширением языка Java для SQL Server.

Основной класс Java должен наследовать этому классу. Наследование этому классу означает наличие в классе определенных методов, которые должны быть реализованы в вашем собственном классе.

Для наследования этому абстрактному классу можно расширить имя этого абстрактного класса в объявлении класса:

public class <MyClass> extends AbstractSqlServerExtensionExecutor {}

Ваш основной класс должен, как минимум, реализовывать метод execute(...).

Метод execute

Метод execute — это метод, который вызывается из SQL Server через расширение языка Java для вызова кода Java из SQL Server. Это ключевой метод, в котором вы включаете основные операции, которые вы хотите выполнить из SQL Server.

Чтобы передать аргументы метода в Java из SQL Server, используйте параметр @param в sp_execute_external_script. Метод execute принимает его аргументы таким образом.

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

Метод init

Метод init выполняется после конструктора и перед методом выполнения . Все операции, которые необходимо выполнить перед execute(...) выполнением этого метода.

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

Класс: AbstractSqlServerExtensionDataset

Абстрактный класс AbstractSqlServerExtensionDataset содержит интерфейс для обработки входных и выходных данных, используемых расширением Java.

Класс: PrimitiveDataset

Класс PrimitiveDataset представляет собой реализацию AbstractSqlServerExtensionDataset , которая сохраняет простые типы как примитивы массивов.

PrimitiveDataset предоставляется в пакете SDK как дополнительный вспомогательный класс. Если этот класс не используется, необходимо реализовать собственный класс, наследующий от AbstractSqlServerExtensionDataset.