Visión General
Los plugins de aplicación web (fess-webapp-*) son plugins que amplían la aplicación web de Fess. A diferencia de otros tipos de plugins, no añaden directamente clases Action ni JSP, sino que amplían la funcionalidad añadiendo o sustituyendo componentes en el contenedor DI (Lasta Di). Los usos representativos son los siguientes:
Adición de nuevos componentes (helpers, servicios, etc.)
Sustitución de componentes del núcleo de Fess (mediante subclases)
Adición de endpoints de API REST (
WebApiManager)Ampliación del comportamiento de búsqueda (comandos de consulta, fusión de rangos, etc.)
Nota
Los plugins de aplicación web se distribuyen como JAR, y sus clases internas y archivos de configuración DI se cargan en el classpath de la aplicación web de Fess. No permiten añadir vistas JSP. Si desea personalizar el diseño de la pantalla de búsqueda, consulte Guía de Desarrollo de Temas.
Estructura Básica
Tomando como ejemplo fess-webapp-example, la plantilla de implementación de un plugin de aplicación web, un plugin se compone de una «clase de implementación» y un «archivo de registro DI»:
Nota
El paquete de las clases de implementación utiliza org.codelibs.fess.webapp.<nombre-del-plugin>. Los archivos de configuración DI se colocan en src/main/resources/. A diferencia de los plugins de almacén de datos, no incluyen src/main/webapp/ ni JSP.
pom.xml y el Manifiesto
Los plugins de aplicación web se construyen como jar con fess-parent como POM padre. Las bibliotecas fess y opensearch, que son proporcionadas en tiempo de ejecución por el propio Fess, se declaran con el ámbito provided, mientras que las bibliotecas necesarias en tiempo de ejecución, como lastaflute, dbflute-runtime y corelib, se declaran con el ámbito habitual.
Lo más importante en un plugin de aplicación web es añadir Fess-WebAppJar: true al manifiesto del JAR. Gracias a esta declaración, Fess monta las clases del plugin y sus archivos de configuración DI en el cargador de clases de la aplicación web. Esta configuración se realiza con maven-jar-plugin:
Advertencia
Si no se añade Fess-WebAppJar: true, las clases del plugin y los archivos de configuración DI no se cargarán en el classpath de la aplicación web, y la adición o sustitución de componentes no surtirá efecto.
Para conocer la configuración completa de pom.xml (el POM padre, la forma de declarar las dependencias, etc.), consulte Arquitectura de Plugins.
Patrones de Extensión
Adición de Componentes (app++.xml)
La forma más básica de extensión es añadir sus propios componentes. Lasta Di fusiona el archivo app++.xml presente en el classpath con el espacio de nombres app construido a partir del app.xml del propio Fess (el sufijo ++ es la convención para la fusión aditiva). Dado que los componentes añadidos utilizan nombres que no existen en el propio Fess, no se sobrescribe nada.
En la implementación del componente, utilice @PostConstruct para la inicialización, y reutilice los componentes del propio Fess obteniéndolos mediante ComponentUtil (no los copie ni los sobrescriba):
Truco
Considere primero esta opción de «adición de componentes». A menos que sea necesario modificar la funcionalidad del núcleo, es más segura y ofrece mejor mantenibilidad que la sustitución.
Sustitución de Componentes del Núcleo (fess+componentName.xml)
Si desea modificar el comportamiento de un componente del propio Fess, cree una subclase de la clase de destino y vuelva a registrarla con el mismo nombre de componente en un archivo de configuración DI denominado <baseDicon>+<componentName>.xml. Por ejemplo, dado que systemHelper está declarado en fess.xml del propio Fess, el archivo de sustitución será fess+systemHelper.xml (no app+systemHelper.xml).
Advertencia
La sustitución (con un único +) reemplaza por completo la definición del componente. Por ello, el archivo de sustitución debe incluir todos los elementos <postConstruct> que realiza la definición del núcleo. Por ejemplo, al sustituir systemHelper, es necesario copiar y describir todo el mapeo de nombres de JSP de diseño (addDesignJspFileName) desde el fess.xml del núcleo. Esto debe sincronizarse en cada versión de Fess, y cualquier omisión hará que algunas pantallas (como chat o login) no puedan resolverse. Este coste de mantenimiento es la razón por la que se recomienda la adición en lugar de la sustitución.
Adición de una API REST (fess_api++.xml)
Para añadir un nuevo endpoint de API REST, implemente WebApiManager. Herede de BaseApiManager y regístrese a sí mismo en WebApiManagerFactory mediante @PostConstruct. El gestor de API registrado es invocado por WebApiFilter en cada solicitud. Registre el componente en fess_api++.xml:
Como ejemplos de implementación, resultan útiles como referencia fess-webapp-v1-api, que proporciona /api/v1, y fess-webapp-classic-api, que proporciona /json y /suggest.
Personalización de la Pantalla de Búsqueda
Los plugins de aplicación web no pueden añadir vistas JSP. Esto se debe a que las vistas JSP se ubican en WEB-INF/view/ del WAR del propio Fess, mientras que el JAR del plugin se monta en el classpath (WEB-INF/classes). Si desea modificar el diseño de la pantalla de búsqueda, utilice una de las siguientes opciones:
Tema: personaliza el diseño de la pantalla de búsqueda (HTML/CSS/JavaScript). Consulte Guía de Desarrollo de Temas.
Sustitución de systemHelper: mediante la «sustitución de componentes del núcleo» descrita anteriormente, puede cambiar el mapeo de nombres de JSP de diseño (aunque los propios archivos JSP los proporciona el núcleo de Fess).
Construcción e Instalación
En el directorio target/ se generará un archivo JAR (por ejemplo, fess-webapp-example-15.8.0.jar). El JAR generado se puede instalar desde la consola de administración, o bien colocarlo en el directorio app/WEB-INF/plugin/ y reiniciar Fess. Para más detalles sobre el procedimiento de instalación, consulte Complemento.
Ejemplos de Plugins Públicos
En el proyecto Fess se publican los siguientes plugins de aplicación web. Se publican en GitHub como referencia para el desarrollo:
| Plugin | Descripción |
|---|---|
fess-webapp-example | Plantilla de implementación de plugins |
fess-webapp-v1-api | API REST /api/v1 |
fess-webapp-classic-api | API REST heredada /json / /suggest |
fess-webapp-mcp | Servidor MCP (Model Context Protocol) |
fess-webapp-semantic-search | Búsqueda neuronal/búsqueda vectorial (obsoleto; reemplazado por la integración en el núcleo en la 15.8) |
fess-webapp-multimodal | Búsqueda multimodal (imágenes y texto) |
Información de Referencia
Arquitectura de Plugins - Arquitectura de plugins
Guía de Desarrollo de Temas - Personalización de temas
Complemento - Instalación de plugins
Visión General de la Documentación para Desarrolladores - Visión general de documentación para desarrolladores