Les plugins sont des macro-composants que l'on peut ajouter à Lutèce pour étendre ses fonctionnalités. Ils ont pour vocation d'intégrer différents types de fonctionnalités en respectant un mode d'installation standard.
Les composants pouvant être ajoutés par les plugins sont les suivants :
Un plugin nécessitant le stockage de données accède aux informations contenues dans son modèle de données à travers un pool de connexions.
Par défaut le pool de connexions utilisé est celui du coeur, mais il est possible d'en déclarer un spécifiquement pour un plugin.
Cette déclaration se fait dans le fichier db.properties
présent dans le répertoire/WEB-INF/conf/ .
L'association entre le plugin et le pool de connexions est initialisée à partir du plugin.dat
et peut par la suite être modifiée dans le back office de l'application.
Les plugins sont chargés au démarrage de la webapp par le service PluginService
qui recherche tous les fichiers XML se trouvant dans le répertoire /WEB-INF/plugins
.
Les informations sur le statut local des plugins (état installé/non-installé, pool de connection spécifique, ...) sont initialisées à partir du fichier plugins.dat
situé dans le même répertoire.Lorsque ces informations sont mises à jour en back office, les modifications apportées sont persistées en base de données.
Si un plugin dispose d'un fichier properties, celui doit se trouver dans le répertoire /WEB-INF/conf/plugins
. Les propriétés de ce plugin seront automatiquement chargées et ajoutées à l'ensemble des propriétés de l'application. Elles seront alors accessibles par le biais de la classe AppPropertiesService
. Toutes les propriétés d'un plugin doivent être préfixées par le nom du plugin pour éviter tout conflit de clés.
Important : Un mécanisme de surcharge (override) est disponible depuis la version 4 de Lutece. Il est possible de surchager une partie ou la totalité des valeurs d'un fichier properties en plaçant ces valeurs dans un fichier situé dans le répertoire /WEB-INF/conf/override/plugins.
Un plugin peut contenir un ensemble assez important et divers de fichiers. C'est pourquoi il est nécessaire de les organiser de manière arborescente.
Type de fichier | Répertoire |
---|---|
Les JSP des fonctions d'administration | /jsp/admin/plugins/<plugin_name>/*.jsp |
Les JSP accessibles du portail | /jsp/site/plugins/<plugin_name>/*.jsp |
Les images des fonctions d'administration | /images/admin/skin/plugins/<plugin_name>/*.* |
Les images de présentation de l'application | /images/local/skin/<plugin_name>/*.* |
Les images gérées comme des données du plugin | /images/local/data/<plugin_name>/*.* |
Le fichier properties du plugin | /WEB-INF/conf/plugins/<plugin_name>.properties |
Le fichier de définition du plugin | /WEB-INF/plugins/<plugin_name>.xml |
Les templates des fonctions d'administration | /WEB-INF/templates/admin/plugins/<plugin_name>.properties |
Les templates de l'application accessibles en front office | /WEB-INF/templates/skin/plugins/<plugin_name>.properties |
Le fichier jar contenant les classes du plugin(fichier généré lors du build) | /WEB-INF/lib/plugin_<plugin_name>_<version>.jar |
Les scripts SQL d'installation et d'initialisation des tables du plugin (distribution binaires) | /WEB-INF/sql/plugins/<plugin_name>/*.sql |
L'organisation des fichiers sources est par ailleurs la suivante
Type de fichier | Répertoire |
---|---|
Les fichiers sources java de la couche métier | /src/java/fr/lutece/plugins/<plugin_name>/business/*.java |
Les fichiers sources java de la couche service | /src/java/fr/lutece/plugins/<plugin_name>/service/*.java |
Les fichiers sources java de la couche présentation | /src/java/fr/lutece/plugins/<plugin_name>/web/*.java |
Les ressources de type messages dans les différentes langues | /src/java/fr/lutece/plugins/<plugin_name>/resources/*.properties |
Les scripts SQL d'installation et d'initialisation des tables du plugin (distribution sources) | /src/sql/plugins/<plugin_name>/*.sql |
Les documentations au format XML pour Maven | /src/site/xdoc/[fr/]/xdoc/plugins/<plugin_name>/*.xml |
Le fichier de configuration d'un plugin est un fichier XML se présentant sous la forme suivante :
<?xml version=1.0 encoding=ISO-8859-1?>
<plug-in>
<name>myplugin</name>
<class>fr.paris.lutece.portal.service.PluginDefaultImplementation</class>
<version>1.0</version>
<description>Description of the plugin</description>
<provider>Mairie de Paris</provider>
<provider-url>http://lutece.paris.fr</provider-url>
<icon-url>../../images/admin/skin/plugins/myplugin/myplugin.gif</icon-url>
<copyright>Copyright (c) 2001-2015 Mairie de Paris</copyright>
<!-- Le plugin requiert-il un pool de connexions : 1 - oui, 0 - non -->
<db-pool-required>1</db-pool-required>
<!-- Feuilles de style CSS spécifiques éventuelles -->
<css-stylesheets>
<css-stylesheet>myplugin/myplugin.css</css-stylesheet>
</css-stylesheets>
<!-- Scripts eventuels -->
<javascript-files>
<javascript-file>myplugin/myplugin.css</javascript-file>
</javascript-files>
<!-- Listes des fonctionnalités d'administration éventuellement introduites par le plugin-->
<admin-features>
<admin-feature>
<feature-id>MYFEATURE_MANAGEMENT</feature-id>
<feature-title>My Feature</feature-title>
<feature-description>Description of my feature</feature-description>
<feature-level>3</feature-level>
<feature-url>plugins/myplugin/ManageMyFeature.jsp</feature-url>
</admin-feature>
...
</admin-features>
<!-- Listes des portlets éventuellement introduits par le plugin-->
<portlets>
<portlet>
<portlet-class>fr.paris.lutece.plugins.myportlet.business.portlet.MyPortletHome</portlet-class>
<portlet-type-name>MyNew Portlet</portlet-type-name>
<portlet-creation-url>plugins/article/CreatePortletMyPortlet.jsp</portlet-creation-url>
<portlet-update-url>plugins/article/ModifyPortletMyPortlet.jsp</portlet-update-url>
</portlet>
...
</portlets>
<!-- Application à base de pages spéciales introduite éventuellement par le plugin -->
<applications>
<application>
<application-id>app_page_name</application-id>
<application-class>fr.paris.lutece.plugins.myplugin.web.MyPluginApp</application-class>
<application-roles>role1,role2</application-roles>
</application>
</applications>
<!-- Content Service -->
<content-service>
<content-service-class>fr.paris.lutece.plugins.myplugin.service.MyContentService</content-service-class>
</content-service>
<!-- Links Service -->
<link-service>
<link-service-id>mylinkservice</link-service-id>
<link-service-class>fr.paris.lutece.plugins.mylinkservice.service.MyLinkService</link-service-class>
<link-service-bean-class>fr.paris.lutece.plugins.mylinkservice.web.MyLinkServiceJspBean</link-service-bean-class>
<link-service-label>Link to my URIs</link-service-label>
</link-service>
<!-- Servlets-->
<servlets>
<servlet>
<servlet-name>myServlet1</servlet-name>
<url-pattern>/servlet/plugins/myplugin/myServlet1</url-pattern>
<servlet-class>fr.paris.lutece.plugins.myplugin.web.MyFirstServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>myServlet2</servlet-name>
<url-pattern>/servlet/plugins/myplugin/myServlet2</url-pattern>
<servlet-class>fr.paris.lutece.plugins.myplugin.web.MySecondServlet</servlet-class>
</servlet>
</servlets>
<!-- filters -->
<filters>
<filter>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
<filter-class>fr.paris.lutece.plugins.myplugin.web.MyFilter</filter-class>
<init-param>
<param-name>param1</param-name>
<param-value>value of param1</param-value>
</init-param>
</filter>
</filters>
</plug-in>
Une DTD des plugins est disponible dans le répertoire /WEB-INF/plugins de la Webapp de Lutece.
Certains plugins peuvent avoir leurs propres plugins. Ceux-ci sont appelés modules. Les plugins tels que mylutece, formengine, codewizard disposent de modules.
Les règles concernant les modules sont les suivantes :
Type de fichier | Répertoire |
---|---|
Packages des fichiers sources java | /src/java/fr/lutece/plugins/<plugin_name>/modules/<module_name>//*.java |
Localisation des fichiers templates HTML | /plugins/<plugin_name>/modules/<module_name>//*.html |
Nom et emplacement du fichier XML du plugin | /WEB-INF/plugins/<plugin_name>-<module_name>.xml |
Nom et emplacement du fichier de configuration | /WEB-INF/conf/plugins/<plugin_name>-<module_name>.properties |
Il est possible d'ajouter un plugin à un site existant sans utiliser le système d'assemblage de Lutece décrit plus loin dans le livre. Contrairement à un site utilisant ce système, cette méthode présente le gros inconvenient de ne pas pouvoir reconstruire le site à l'identique facilement. Néanmoins, cette méthode peut être utile pour une mise à jour rapide.
La démarche d'installation d'un plugin est alors la suivante :
Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.
Vous devriez rafraîchir la page.