EN · DE · RU · FR · ES

#134: org.projectforge.plugins.core.AbstractPlugin (ServiceLoader)

plugins/org.projectforge.plugins.ihk/src/main/resources/META-INF/services/org.projectforge.plugins.core.AbstractPlugin регистрация ServiceLoader, plugins/org.projectforge.plugins.ihk/src/main/resources/META-INF/services/org.projectforge.plugins.core.AbstractPlugin 1 строка · 1 код · 0 комментариев · 0 пустых
Файл конфигурации Java ServiceLoader, регистрирующий IHKPlugin как реализацию org.projectforge.plugins.core.AbstractPlugin. Этот однострочный файл является механизмом, с помощью которого плагин IHK обнаруживается и загружается во время выполнения.

Архитектура

Содержимое

org.projectforge.plugins.ihk.IHKPlugin

Этот файл находится по стандартному пути Java ServiceLoader META-INF/services/{полное-имя-интерфейса}. Когда сканер плагинов ProjectForge вызывает ServiceLoader.load(AbstractPlugin.class), JVM читает все такие файлы из classpath, создаёт экземпляры каждого перечисленного класса и вызывает initialize() для каждого экземпляра плагина.

Процесс обнаружения плагина

  1. Запускается контекст Spring-приложения.
  2. PFPluginService (или эквивалентный сканер плагинов) вызывает ServiceLoader.load(AbstractPlugin.class).
  3. JVM находит META-INF/services/org.projectforge.plugins.core.AbstractPlugin в каждом JAR-файле плагина или записи classpath.
  4. Для каждого полного имени класса в этих файлах класс загружается и создаётся через конструктор без аргументов.
  5. Конструктор базового класса AbstractPlugin регистрирует метаданные плагина (ID, имя, описание).
  6. Сканер плагинов вызывает initialize(), где IHKPlugin выполняет регистрацию DAO, веб-компонентов, меню, прав и i18n.

Проектные решения

Связанный шаблон: Каждый плагин ProjectForge имеет этот точный файл по тому же относительному пути. Плагин ToDo имеет org.projectforge.plugins.todo.ToDoPlugin (см. #287), плагин Memo имеет org.projectforge.plugins.memo.MemoPlugin и т.д.

История Git

50d5d8926 wip: META-INF/services необходимы для плагинов (Service loader)
07b80966b wip: PFPluginService (PluginConfig) -> PluginInfo
45cad02e9 IHK-Плагин добавлен (заменит плагин "Ihk-Export")