EN · DE · RU · FR · ES

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

plugins/org.projectforge.plugins.memo/src/main/resources/META-INF/services/org.projectforge.plugins.core.AbstractPlugin registro de ServiceLoader, plugins/org.projectforge.plugins.ihk/src/main/resources/META-INF/services/org.projectforge.plugins.core.AbstractPlugin 1 línea · 1 código · 0 comentarios · 0 en blanco
Archivo de configuración de Java ServiceLoader que registra IHKPlugin como una implementación de org.projectforge.plugins.core.AbstractPlugin. Este archivo de una sola línea es el mecanismo mediante el cual el plugin IHK se descubre y carga en tiempo de ejecución.

Arquitectura

Contenido

org.projectforge.plugins.ihk.IHKPlugin

Este archivo se encuentra en la ruta estándar de Java ServiceLoader META-INF/services/{nombre-completamente-calificado-de-la-interfaz}. Cuando el escáner de plugins de ProjectForge invoca ServiceLoader.load(AbstractPlugin.class), la JVM lee todos estos archivos del classpath, instancia cada clase listada y llama a initialize() en cada instancia de plugin.

Flujo de descubrimiento de plugins

  1. Se inicia el contexto de la aplicación Spring.
  2. PFPluginService (o el escáner de plugins equivalente) llama a ServiceLoader.load(AbstractPlugin.class).
  3. La JVM encuentra META-INF/services/org.projectforge.plugins.core.AbstractPlugin en cada JAR de plugin o entrada de classpath.
  4. Para cada nombre de clase completamente calificado en esos archivos, la clase se carga y se instancia mediante su constructor sin argumentos.
  5. El constructor de la clase base AbstractPlugin registra los metadatos del plugin (ID, nombre, descripción).
  6. El escáner de plugins llama a initialize(), donde IHKPlugin realiza sus registros de DAO, web, menú, derechos e i18n.

Decisiones de diseño

Patrón relacionado: Cada plugin de ProjectForge tiene este mismo archivo en la misma ruta relativa. El plugin ToDo tiene org.projectforge.plugins.todo.ToDoPlugin (ver #287), el plugin Memo tiene org.projectforge.plugins.memo.MemoPlugin, etc.

Historial de Git

50d5d8926 wip: META-INF/services necesarios para plugins (Service loader)
07b80966b wip: PFPluginService (PluginConfig) -> PluginInfo
45cad02e9 Plugin IHK añadido (Reemplazará el plugin "Ihk-Export")