Übersicht
Webanwendungs-Plugins (fess-webapp-*) sind Plugins, die die Webanwendung von Fess erweitern. Anders als andere Plugin-Typen fügen sie nicht direkt Action-Klassen oder JSPs hinzu, sondern erweitern die Funktionalität, indem sie dem DI-Container (Lasta Di) Komponenten hinzufügen oder ersetzen. Typische Anwendungsfälle sind:
Hinzufügen neuer Komponenten (z. B. Helper, Services)
Ersetzen von Komponenten des Fess-Kerns (durch Unterklassenbildung)
Hinzufügen von REST-API-Endpunkten (
WebApiManager)Erweiterung des Suchverhaltens (Query-Commands, Rank-Fusion usw.)
Bemerkung
Webanwendungs-Plugins werden als JAR-Datei ausgeliefert; ihre Klassen und DI-Konfigurationsdateien werden in den Klassenpfad der Webanwendung von Fess geladen. Sie fügen keine JSP-Views hinzu. Wenn Sie das Design der Suchoberfläche anpassen möchten, lesen Sie Theme-Entwicklungsleitfaden.
Grundstruktur
Am Beispiel von fess-webapp-example, der Implementierungsvorlage für Webanwendungs-Plugins, besteht ein Plugin aus einer „Implementierungsklasse“ und einer „DI-Registrierungsdatei“:
Bemerkung
Das Paket der Implementierungsklasse folgt dem Schema org.codelibs.fess.webapp.<Plugin-Name>. Die DI-Konfigurationsdateien werden unter src/main/resources/ abgelegt. Anders als bei DataStore-Plugins enthält das Projekt kein src/main/webapp/ und keine JSPs.
pom.xml und Manifest
Webanwendungs-Plugins werden als jar mit fess-parent als übergeordnetem POM gebaut. Bibliotheken wie fess und opensearch, die zur Laufzeit vom Fess-Kern bereitgestellt werden, werden mit dem Scope provided deklariert. Zur Laufzeit benötigte Bibliotheken wie lastaflute, dbflute-runtime und corelib werden mit dem normalen Scope deklariert.
Das Wichtigste bei einem Webanwendungs-Plugin ist, dem JAR-Manifest den Eintrag Fess-WebAppJar: true hinzuzufügen. Durch diese Deklaration mountet Fess die Klassen und DI-Konfigurationsdateien des Plugins in den Klassenlader der Webanwendung. Diese Einstellung wird über maven-jar-plugin vorgenommen:
Warnung
Wird Fess-WebAppJar: true nicht gesetzt, werden die Klassen und DI-Konfigurationsdateien des Plugins nicht in den Klassenpfad der Webanwendung geladen, und das Hinzufügen bzw. Ersetzen von Komponenten wird nicht wirksam.
Den vollständigen Aufbau der pom.xml (übergeordnetes POM, Deklaration von Abhängigkeiten usw.) finden Sie unter Plugin-Architektur.
Erweiterungsmuster
Hinzufügen von Komponenten (app++.xml)
Die grundlegendste Erweiterungsmethode besteht darin, eigene Komponenten hinzuzufügen. Lasta Di merged die app++.xml im Klassenpfad in den app-Namensraum, der aus der app.xml des Fess-Kerns aufgebaut wird (das ++ am Ende ist die Konvention für ein zusammenführendes Merge). Da die hinzuzufügenden Komponenten Namen verwenden, die im Fess-Kern nicht existieren, wird nichts überschrieben.
Bei der Implementierung der Komponente wird für die Initialisierung @PostConstruct verwendet; Komponenten des Fess-Kerns werden über ComponentUtil abgerufen und wiederverwendet (nicht kopiert oder überschrieben):
Tipp
Ziehen Sie zunächst dieses „Hinzufügen von Komponenten“ in Betracht. Solange keine Kernfunktionen geändert werden müssen, ist dies sicherer und besser wartbar als ein Ersetzen.
Ersetzen von Kernkomponenten (fess+componentName.xml)
Wenn Sie das Verhalten einer Komponente des Fess-Kerns ändern möchten, bilden Sie eine Unterklasse der Zielklasse und registrieren diese in einer DI-Konfigurationsdatei mit dem Namen <baseDicon>+<componentName>.xml erneut unter demselben Komponentennamen. Da systemHelper beispielsweise in der fess.xml des Fess-Kerns deklariert ist, lautet die Ersetzungsdatei fess+systemHelper.xml (nicht app+systemHelper.xml).
Warnung
Das Ersetzen (einzelnes +) ersetzt die Komponentendefinition vollständig. Aus diesem Grund müssen in der Ersetzungsdatei alle <postConstruct>-Einträge, die in der Kerndefinition vorhanden sind, erneut angegeben werden. Wenn Sie beispielsweise systemHelper ersetzen, müssen Sie die Zuordnung der Design-JSP-Namen (addDesignJspFileName) vollständig aus der fess.xml des Kerns kopieren und übernehmen. Diese müssen mit jedem Fess-Release synchronisiert werden; fehlt ein Eintrag, können bestimmte Bildschirme (z. B. chat / login) nicht mehr aufgelöst werden. Dieser Wartungsaufwand ist der Grund, warum das Hinzufügen dem Ersetzen vorgezogen werden sollte.
Hinzufügen einer REST-API (fess_api++.xml)
Um einen neuen REST-API-Endpunkt hinzuzufügen, implementieren Sie WebApiManager. Erben Sie von BaseApiManager und registrieren Sie sich selbst in @PostConstruct bei der WebApiManagerFactory. Der registrierte API-Manager wird bei jeder Anfrage von WebApiFilter aufgerufen. Registrieren Sie die Komponente in fess_api++.xml:
Als Implementierungsbeispiele bieten sich fess-webapp-v1-api, das /api/v1 bereitstellt, sowie fess-webapp-classic-api, das /json / /suggest bereitstellt, als Referenz an.
Anpassung der Suchoberfläche
Webanwendungs-Plugins können keine JSP-Views hinzufügen. JSP-Views befinden sich unter WEB-INF/view/ im WAR des Fess-Kerns, während das Plugin-JAR in den Klassenpfad (WEB-INF/classes) gemountet wird. Wenn Sie das Design der Suchoberfläche ändern möchten, nutzen Sie eine der folgenden Möglichkeiten:
Theme: Passt das Design der Suchoberfläche (HTML/CSS/JavaScript) an. Siehe Theme-Entwicklungsleitfaden.
Ersetzen von systemHelper: Über das oben beschriebene „Ersetzen von Kernkomponenten“ lässt sich die Zuordnung der Design-JSP-Namen ändern (die JSP-Dateien selbst werden jedoch weiterhin vom Fess-Kern bereitgestellt).
Build und Installation
Im Verzeichnis target/ wird eine JAR-Datei erzeugt (z. B. fess-webapp-example-15.8.0.jar). Installieren Sie das erzeugte JAR entweder über die Administrationsoberfläche, oder legen Sie es im Verzeichnis app/WEB-INF/plugin/ ab und starten Sie Fess neu. Details zum Installationsvorgang finden Sie unter Plug-ins.
Beispiele veröffentlichter Plugins
Im Fess-Projekt sind die folgenden Webanwendungs-Plugins veröffentlicht. Sie sind als Referenz für die Entwicklung auf GitHub verfügbar:
| Plugin | Beschreibung |
|---|---|
fess-webapp-example | Implementierungsvorlage für Plugins |
fess-webapp-v1-api | /api/v1 REST-API |
fess-webapp-classic-api | /json / /suggest Legacy-REST-API |
fess-webapp-mcp | MCP-Server (Model Context Protocol) |
fess-webapp-semantic-search | Neuronale Suche/Vektorsuche (veraltet; abgelöst durch die Kernintegration in 15.8) |
fess-webapp-multimodal | Multimodale Suche (Bild und Text) |
Referenzinformationen
Plugin-Architektur - Plugin-Architektur
Theme-Entwicklungsleitfaden - Theme-Anpassung
Plug-ins - Plugin-Installation
Entwicklerdokumentation Übersicht - Entwicklerdokumentation Übersicht