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 Enregistrement ServiceLoader, plugins/org.projectforge.plugins.ihk/src/main/resources/META-INF/services/org.projectforge.plugins.core.AbstractPlugin 1 ligne · 1 code · 0 commentaires · 0 vide
Fichier de configuration Java ServiceLoader enregistrant IHKPlugin comme implémentation de org.projectforge.plugins.core.AbstractPlugin. Ce fichier d'une seule ligne est le mécanisme par lequel le plugin IHK est découvert et chargé à l'exécution.

Architecture

Contenu

org.projectforge.plugins.ihk.IHKPlugin

Ce fichier se trouve au chemin standard Java ServiceLoader META-INF/services/{nom-d-interface-entièrement-qualifié}. Lorsque le scanner de plugins de ProjectForge invoque ServiceLoader.load(AbstractPlugin.class), la JVM lit tous ces fichiers depuis le classpath, instancie chaque classe listée et appelle initialize() sur chaque instance de plugin.

Flux de découverte des plugins

  1. Le contexte de l'application Spring démarre.
  2. PFPluginService (ou un scanner de plugins équivalent) appelle ServiceLoader.load(AbstractPlugin.class).
  3. La JVM trouve META-INF/services/org.projectforge.plugins.core.AbstractPlugin dans chaque JAR de plugin ou entrée de classpath.
  4. Pour chaque nom de classe entièrement qualifié dans ces fichiers, la classe est chargée et instanciée via son constructeur sans argument.
  5. Le constructeur de la classe de base AbstractPlugin enregistre les métadonnées du plugin (ID, nom, description).
  6. Le scanner de plugins appelle initialize(), où IHKPlugin effectue ses enregistrements DAO, web, menu, droits et i18n.

Décisions de conception

Modèle associé : Chaque plugin ProjectForge possède ce fichier exact au même chemin relatif. Le plugin ToDo a org.projectforge.plugins.todo.ToDoPlugin (voir #287), le plugin Memo a org.projectforge.plugins.memo.MemoPlugin, etc.

Historique Git

50d5d8926 wip : META-INF/services nécessaire pour les plugins (chargeur de services)
07b80966b wip : PFPluginService (PluginConfig) -> PluginInfo
45cad02e9 Plugin IHK ajouté (remplacera le plugin "Ihk-Export")