SDK плагинов
SberMobile Server и SberMobile IIoT Platform Client поддерживают несколько видов плагинов для связи с разными Devices, добавляя новые контексты в серверное дерево контекстов, создавая пользовательские запросы, локализуя и индивидуализируя текстуальные и графические ресурсы и прочее. Основная информация доступна в разделе Плагины, при этом данная часть документации рассказывает о разработке новых плагинов.
Документация, представленная в этом разделе, применима только к локальным экземплярам серверов SberMobile. Пользователи облачных серверов получают SberMobile в качестве управляемой услуги, поэтому функциональность пользовательских плагинов отключена для обеспечения надежности и бесперебойной работы сервера. |
Архитектура плагина
Архитектура плагина основывается на библиотеке Модульной архитектуры Java (JPF). JPF выбран из-за архитектуры наподобие OSGi, так как занимает мало места. Это позволяет серверу оперировать в среде с небольшой памятью, наподобие одноплатных компьютеров, шлюзов IoT, сенсорных панелей и программируемых логических контроллеров Linux (PLC).
Большинство серверных модулей реализуются как плагины, поэтому являются опциональными.
Точки расширения
Все плагины, за исключением так называемого корневого плагина, расширяют многие другие плагины путем соединения с точкой расширения. Точка расширения должна быть обозначена в дескрипторе плагина.
Типы плагинов
Доступно несколько типов плагинов.
Типы плагинов SberMobile Server отмечены в таблице ниже:
Тип плагина | ID точки расширения | Путь к архиву плагина |
device | /plugins/device | |
context | /plugins/context | |
persistence | /plugins/persistence | |
component | /plugins/component | |
auth | /plugins/auth | |
Плагин сервера устройства (устаревший) | ds | /plugins/ds |
Структура плагина
У плагина SberMobile Server есть два основных компонента:
Plugin Java class, который реализует интерфейс
ContextPlugin
. Большинство реализаций расширяют дочерний класс классаBasePlugin
, чтобы избежать реализации ненужных методов и сохранить функциональность по умолчанию.Дескриптор плагина, который определяет свойства плагина и его место в иерархии плагинов SberMobile Server.
Эти компоненты могут быть упакованы в Java Archive (JAR). Дескриптор плагина (plugin.xml
) должен располагаться в корневой папке архива.
ID плагина
У каждого плагина есть уникальный ID, к примеру, com.tibbo.linkserver.plugin.context.uniqueid
. В некоторых местах такой ID может быть заменен коротким ID, который является последним сегментом полного ID плагина, например, uniqueid
.
Создание нового плагина SberMobile Server
Чтобы создать с нуля новый плагин SberMobile Server, необходимо создать новый класс Java, наследуемый из дочерних классов BasePlugin
(таких как AbstractDeviceDriver
, AbstractContextPlugin
или AbstractAuthPlugin
). Вам придется переписать по крайней мере некоторые из методов, чтобы обеспечить фукциональность плагина.
Процесс создания плагина включает в себя следующие основные стадии:
Реализация конфигурации плагина
Подготовка дескриптора плагина
Создание и внедрение архива плагина
Базовые методы плагина
У каждого плагина SberMobile есть следующие методы (заявленные в интерфейсе AggreGatePlugin
):
getId()
,getShortId()
,getDescription()
иgetSortIndex()
вызываются ядром, чтобы собрать основную информацию о плагине. Обычно не запрашивается переписывание этих методов с момента, когда классы абстрактного плагина предоставляют верные реализации.globalInit()
,globalDeinit()
,userInit()
иuserDeinit()
должны быть переписаны, чтобы выполнить базовую инициализацию/деинициализаю плагина. Эти методы вызываются в период загрузки/выгрузки процессов включения и выключения сервера. Методы реализации должны вызыватьcreateGlobalConfigContext()
иcreateUserConfigContext()
, чтобы установить конфигурацию плагина.globalStart()
иglobalStop()
должны быть переписаны, чтобы реализовать логику включения и выключения. Эти методы вызываются в период запуска/остановки дерева контекстов, в процессе включения и выключения сервера.
Загрузчики классов плагинов
У каждого плагина есть собственный загрузчик класса (реализация java ClassLoader
), отделенный от первичного загрузчика класса сервера.
Доступ к загрузчику класса отдельного плагина возможен путем передачи ID плагина в метод getPluginClassLoader(String)
PluginDirector
, который, в свою очередь, может быть получен посредством метода getPluginDirector() ContextManager
.