Architecture des plugins

Vue d’ensemble

Le système de plugins de Fess permet d’étendre les fonctionnalités de base. Les plugins sont distribués sous forme de fichiers JAR et chargés dynamiquement.

Types de plugins

Fess supporte les types de plugins suivants:

Type Description
DataStore Récupération de contenu depuis de nouvelles sources de données (Box, Slack, etc.)
Script Engine Support de nouveaux langages de script
WebApp Extension de l’interface web
Ingest Traitement des données lors de l’indexation

Structure d’un plugin

Structure de base

fess-ds-example/
├── pom.xml
└── src/main/java/org/codelibs/fess/ds/example/
    ├── ExampleDataStore.java      # Implementation du DataStore
    └── ExampleDataStoreHandler.java # Handler (optionnel)

Exemple de pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.codelibs.fess</groupId>
    <artifactId>fess-ds-example</artifactId>
    <version>15.7.0</version>
    <packaging>jar</packaging>

    <name>fess-ds-example</name>
    <description>Example DataStore for Fess</description>

    <properties>
        <fess.version>15.7.0</fess.version>
        <java.version>21</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.codelibs.fess</groupId>
            <artifactId>fess</artifactId>
            <version>${fess.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

Enregistrement du plugin

Enregistrement dans le conteneur DI

Les plugins sont enregistrés dans des fichiers de configuration comme fess_ds.xml:

<component name="exampleDataStore" class="org.codelibs.fess.ds.example.ExampleDataStore">
    <postConstruct name="register"/>
</component>

Enregistrement automatique

De nombreux plugins s’enregistrent automatiquement avec l’annotation @PostConstruct:

@PostConstruct
public void register() {
    ComponentUtil.getDataStoreManager().add(this);
}

Cycle de vie du plugin

Initialisation

  1. Le fichier JAR est chargé

  2. Le conteneur DI initialise les composants

  3. Les méthodes @PostConstruct sont appelées

  4. Le plugin est enregistré dans le gestionnaire

Terminaison

  1. Les méthodes @PreDestroy sont appelées (si définies)

  2. Nettoyage des ressources

Dépendances

Dépendance avec Fess

<dependency>
    <groupId>org.codelibs.fess</groupId>
    <artifactId>fess</artifactId>
    <version>${fess.version}</version>
    <scope>provided</scope>
</dependency>

Bibliothèques externes

Les plugins peuvent inclure leurs propres dépendances:

<dependency>
    <groupId>com.example</groupId>
    <artifactId>example-sdk</artifactId>
    <version>1.0.0</version>
</dependency>

Les bibliothèques dépendantes peuvent être distribuées avec le JAR du plugin, ou vous pouvez créer un fat JAR avec Maven Shade Plugin.

Récupération de la configuration

Récupération depuis FessConfig

public class ExampleDataStore extends AbstractDataStore {

    @Override
    public String getName() {
        return "Example";
    }

    @Override
    protected void storeData(DataConfig dataConfig, IndexUpdateCallback callback,
            Map<String, String> paramMap, Map<String, String> scriptMap,
            Map<String, Object> defaultDataMap) {

        // Recuperation des parametres
        String apiKey = paramMap.get("api.key");
        String baseUrl = paramMap.get("base.url");

        // Recuperation de FessConfig
        FessConfig fessConfig = ComponentUtil.getFessConfig();
    }
}

Build et installation

Build

mvn clean package

Installation

  1. Depuis l’interface d’administration:

    • « Système » -> « Plugins » -> « Installer »

    • Entrer le nom du plugin et installer

  2. Ligne de commande:

    ./bin/fess-plugin install fess-ds-example
    
  3. Manuellement:

    • Copier le fichier JAR dans le répertoire plugins/

    • Redémarrer Fess

Débogage

Sortie de logs

private static final Logger logger = LogManager.getLogger(ExampleDataStore.class);

public void someMethod() {
    logger.debug("Debug message");
    logger.info("Info message");
}

Mode développement

En développement, vous pouvez lancer Fess depuis l’IDE pour déboguer:

  1. Exécuter la classe FessBoot en mode debug

  2. Inclure les sources du plugin dans le projet

  3. Définir des points d’arrêt

Liste des plugins publiés

Principaux plugins publiés par le projet Fess:

Plugin Description
fess-ds-box Connecteur Box.com
fess-ds-dropbox Connecteur Dropbox
fess-ds-slack Connecteur Slack
fess-ds-atlassian Connecteur Confluence/Jira
fess-ds-git Connecteur de dépôt Git
fess-theme-* Thèmes personnalisés

Ces plugins sont publiés sur GitHub comme référence de développement.

Informations complémentaires