EN · DE · RU · FR · ES

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

plugins/org.projectforge.plugins.marketing/src/main/resources/META-INF/services/org.projectforge.plugins.core.AbstractPlugin ServiceLoader-Registrierung, plugins/org.projectforge.plugins.ihk/src/main/resources/META-INF/services/org.projectforge.plugins.core.AbstractPlugin 1 Zeile · 1 Code · 0 Kommentare · 0 leer
Java ServiceLoader-Konfigurationsdatei, die IHKPlugin als Implementierung von org.projectforge.plugins.core.AbstractPlugin registriert. Diese einzeilige Datei ist der Mechanismus, über den das IHK-Plugin zur Laufzeit erkannt und geladen wird.

Architektur

Inhalt

org.projectforge.plugins.ihk.IHKPlugin

Diese Datei befindet sich unter dem standardmäßigen Java ServiceLoader-Pfad META-INF/services/{vollqualifizierter-Schnittstellenname}. Wenn der Plugin-Scanner von ProjectForge ServiceLoader.load(AbstractPlugin.class) aufruft, liest die JVM alle derartigen Dateien aus dem Klassenpfad, instanziiert jede aufgeführte Klasse und ruft initialize() für jede Plugin-Instanz auf.

Plugin-Erkennungsablauf

  1. Der Spring-Anwendungskontext wird gestartet.
  2. PFPluginService (oder ein gleichwertiger Plugin-Scanner) ruft ServiceLoader.load(AbstractPlugin.class) auf.
  3. Die JVM findet META-INF/services/org.projectforge.plugins.core.AbstractPlugin in jedem Plugin-JAR oder Klassenpfadeintrag.
  4. Für jeden vollqualifizierten Klassennamen in diesen Dateien wird die Klasse geladen und über ihren parameterlosen Konstruktor instanziiert.
  5. Der Basisklassenkonstruktor von AbstractPlugin registriert die Metadaten des Plugins (ID, Name, Beschreibung).
  6. Der Plugin-Scanner ruft initialize() auf, wo IHKPlugin seine DAO-, Web-, Menü-, Rechte- und i18n-Registrierungen durchführt.

Entwurfsentscheidungen

Verwandtes Muster: Jedes ProjectForge-Plugin hat diese exakte Datei unter demselben relativen Pfad. Das ToDo-Plugin hat org.projectforge.plugins.todo.ToDoPlugin (siehe #287), das Memo-Plugin hat org.projectforge.plugins.memo.MemoPlugin usw.

Git-Verlauf

50d5d8926 wip: META-INF/services für Plugins benötigt (Service Loader)
07b80966b wip: PFPluginService (PluginConfig) -> PluginInfo
45cad02e9 IHK-Plugin hinzugefügt (wird "Ihk-Export"-Plugin ersetzen)