Identica
Архитектура

Функции

Как встроенные функции собираются, запускаются, настраиваются и обновляются.

Все функции скомпилированы в плагин. Их модули исходного кода в identica-feature/ разделяют зоны ответственности и границы API, но не являются отдельными плагинами. Что провайдеры объявляют о функциях, описано на странице Гарантии и функции провайдеров.

Ответственность за реализацию

identica-feature явно собирает встроенные реализации через BuiltinFeatures. Нет ни сканера каталога функций, ни отдельной установки функций, ни выбора функций во время сборки. jar-файлы модулей функций — это зависимости сборки, которые компилируются в итоговый плагин.

IdenticaFeature отвечает за общие модули, инициализацию, завершение работы и необязательные вклады на уровне отдельных провайдеров. Внутренние объявления зависимостей определяют порядок связывания. configurationPath() указывает поддерево настроек провайдера, а enabledByDefault(context) читает общее значение по умолчанию, которым владеет функция. Глобальные сервисы инициализируются один раз; провайдеры добавляют только свои интеграции.

Держите слушатели, команды, расширения конвейера, модели, хранение данных и конфигурацию в той подсистеме, которая ими владеет. Регистрируйте ресурсы жизненного цикла при инициализации и удаляйте их при завершении работы, в том числе после частично неудавшейся инициализации. Обязательные подсистемы используют RuntimeLifecycle и указывают StartupPhase, в которой запускаются; в реестре функций они не появляются. Identica запускает фазы по порядку и останавливает их в обратном, а создание жизненного цикла не выполняет ввода-вывода: документы, база данных и другие хранилища читаются, когда он запускается.

Ответственность за ники

Работа с никами — это поведение ядра, а не функция, и она никогда не указывается в supportedFeatures(). Её контракты находятся в identica-api: UsernameAssigner в me.whereareiam.identica.identity.username, модели в me.whereareiam.identica.model.identity.username, закрытые типы в me.whereareiam.identica.type.identity.username, UsernameChangedEvent в me.whereareiam.identica.event.identity и сервисы хранения данных в me.whereareiam.identica.persistence.username. Сопоставление правил и документы ников находятся в identica-common, фазы обработки ников — в identica-engine, а таблицы ников — в identica-adapter-database/database-common. См. Ники и конфликты.

Обновление конфигурации

Функция сама обновляет свои документы собственным потоком миграций Strata identica/feature/<id>/config: ConfiguraTarget на папке данных, который хранит версию в settings функции, и пронумерованные миграции. Модуль функции добавляет поток в набор MigrationStream<ConfigContext>, например методом с @ProvidesIntoSet, и до чтения любого документа Identica за один запуск Strata выполняет поток ядра, а затем потоки всех функций. Значение, которое функция забирает из документа ядра, например connection.sentinels из настроек 2.2.1, переносит и удаляет миграция функции; ядро такие разделы не трогает. Пишите переносы так, чтобы они заполняли только пустые места и ничего не делали, если значения уже нет: миграция определяет, что делать, по имеющимся разделам.

Проверка

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

На этой странице