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 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-de-interfaz-completamente-cualificado}. Cuando el escáner de plugins de ProjectForge invoca ServiceLoader.load(AbstractPlugin.class), la JVM lee todos esos archivos del classpath, instancia cada clase listada y llama a initialize() en cada instancia del 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 del classpath.
  4. Para cada nombre de clase completamente cualificado 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 archivo exacto 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 necesario para plugins (cargador de servicios)
07b80966b wip: PFPluginService (PluginConfig) -> PluginInfo
45cad02e9 Plugin IHK añadido (reemplazará al plugin "Ihk-Export")