AGENDA Description des composants de Lutece Page/Portlet, XPage, AdminFeature,Daemon, LinkService, PageInclude, Filter/Servlet Description de l architecture et des Frameworks Architecture : couches, packages, Framework : Freemarker, Spring, MVC Lutece Les fichiers importants PluginWizard Démo
COMPOSANTS DE LUTECE LUTECE fournis dans le CORE des API permettant de développer dans les plugins différents types de composants applicatifs. Un PLUGIN Lutèce peut implémenter un nombre illimité de ces composants. Les principaux composants sont : les rubriques de page (Portlets) les pages spéciales (XPages) les fonctionnalités d administration (AdminFeature) les daemons les linkservices les pages Includes les filtres de Servlet
PORTLETS Les pages de Lutèce sont composées de portlets. Les portlets sont des blocs de contenus positionnés dans une page du site. Essentiellement utilisé pour la partie éditoriale, un portlet peut présenter du contenu du site ou provenant d une application métier distante Portlet 1 Portlet 3 Portlet 2 Portlet 4
XPAGES Les Pages Spéciales (XPage) sont des Content Service qui permettent de publier en front-office des pages du site qui n appartiennent pas à l arborescence éditoriale du CMS. Elles servent à présenter du contenu de type applicatif L url d accès au front doit utiliser le paramètre page=<xpage-name> : http://alaffiche.apps.paris.mdp/billetterie/jsp/site/portal.jsp?page=billetterie&action=fiche-spectacle&product_id=198
ADMIN FEATURE Les fonctionnalités d'administration correspondent à l'ensemble des fonctions disponibles dans le module. Pour chaque fonctionnalité correspond un droit qui peut être attribué à un utilisateur. Lorsque l'utilisateur est autorisé, la fonctionnalité s'affiche dans le menu du back-office Lutèce.
DAEMONS Toute sorte de traitements automatiques peuvent être lancés en arrièreplan de manière asynchrone à travers des Daemons applicatifs : envoi de mails, indexation, purge de données, mise à jour du cache..
LINKSERVICES Il est possible d insérer via un bouton placé dans l éditeur riche du back-office des ressources Lutèce sous forme d inclusions HTML
PAGES INCLUDES Des ressources du sites peuvent être insérées dans les pages du site grâce à des marqueurs freemarkers. Il est ainsi possible d insérer autour du contenu standard d une page ou d une Xpage du contenu complémentaire <span class="accessibility-link"> <a href="jsp/site/portal.jsp?#menu" target="_top">menu de navigation principale</a> <a href="jsp/site/portal.jsp?#menu_rubrique" target="_top">menu de navigation de la rubrique</a> <a href="jsp/site/portal.jsp?#page" target="_top">contenus de cette page</a> <a href="jsp/site/portal.jsp?#infos_mairie«target="_top">mairie, coordonnées et horaires</a> </span>
SERVLETS ET FILTRES DE SERVLETS Chaque plugin LUTECE peut ajouter des filtres de servlet et des servlet sans modification du fichier web.xml Cela permet le déploiement unitaire du plugin sans modification des fichiers du composant core EX : FILTRES du plugin SEO pour la réécriture d URL
ARCHITECTURE LOGICIELLE
PRINCIPES D ARCHITECTURE Règles de nommage et formatage strictes Arborescences basées sur la notions de plugins et modules : Classes Java, images, JSP, templates, Formatage (jalopy:format) Code minimal dans les JSP Choix basé sur une approche «Moteur de templates» JSPBean + Templates Freemarker Code Java structuré en couches Présentation (package web), Service (service), Métier + persistance (business) Modularité, Généricité et injection des dépendances Accès aux données DAO SQL ou JPA Objectifs : Simplicité, lisibilité, homogénéité, modularité, extensibilité bref MAINTENABILITE!
FREEMARKER Le moteur de template Freemarker est utilisé pour toute la production des pages HTML des AdminFeatures (Back Office) et des XPages (Front) JAVA HTML // Use constants for templates and markers private static final String TEMPLATE = «template.html»; private static final String MARK_PERSON = «person»; <b>first name : </b> ${person.firstname} <br/> <b>last name : </b> ${person.lastname} <br/> Map<String,String> model = new HashMap<String,String>(); Person person = new Person(); Person.setFirstName( «John» ); Person.setLastName( «Doe» ); Model.put( MARK_PERSON, person ); HtmlTemplate t = AppTemplateService.getTemplate( TEMPLATE, locale, model ); t.gethtml();
SPRING Le framework Spring est utilisé très largement pour l injection de dépendances (IoC). Chaque plugin dispose d un fichier de contexte pour déclarer ses beans. Tous les DAO sont par défaut «injectés» via Spring. La récupération des beans se fait par les méthodes suivantes : MyInterface bean = SpringContextService.getBean( «BEAN_NAME ); (Possibilité d utiliser l annotation @Inject) List<MyInterface> beans = SpringContextService.getBeansOfType(MyInterface.class );
FRAMEWORK MVC Intégré au noyau (core) depuis la version 4,1 Basé sur des annotations (@Controller, @View, @Action) Identique pour le Back et Front (AdminFeature et XPage)
LES PRINCIPAUX FICHIERS Les fichiers de configuration : db.properties config.properties Les fichiers des plugins : les fichiers de description en XML les fichiers de contexte (Spring) les fichiers de propriétés les fichiers de ressources i18n
LE FICHIER DB.PROPERTIES Le fichier db.properties se trouve dans le répertoire WEB-INF/conf. Il contient les paramètres de connexion à la(les) base(s) de données. Voici sa version par défaut pour MySQL les paramètres du pool «portal» (d autres configurations sont expliquées dans le Wiki) # db.properties portal.poolservice=fr.paris.lutece.util.pool.service.lutececonnectionservice portal.driver=org.gjt.mm.mysql.driver portal.url=jdbc:mysql://localhost/lutece?autoreconnect=true&useunicode=yes&characterencoding=utf8 portal.user=user portal.password=pwd Nom de la base portal.initconns=2 Nom du serveur portal.maxconns=50 portal.logintimeout=2 Identifiant de connexion portal.checkvalidconnectionsql=select 1
LE FICHIER CONFIG.PROPERTIES Le fichier config.properties se trouve dans le répertoire WEB-INF/conf. Il contient des paramètres d environnement concernant l instance de Lutece : - Chemin des fichiers de logs - Niveau de logs (DEBUG, INFO, WARNING, ERROR) - Adresse du serveur mail - Etc
LES FICHIERS XML DE DESCRIPTION DES PLUGINS Ces fichiers sont situés dans le répertoire WEB-INF/plugins Ces fichiers décrivent pour chaque plugin : - ses informations (nom, description, auteur, ) - les contraintes de base de données et de version du core - ses composants (portlets, adminfeatures, daemons, ) <?xml version="1.0" encoding="iso-8859-1" standalone="no"?> <plug-in> <!-- Plugin Informations --> <name>directory-angular</name> <class>fr.paris.lutece.portal.service.plugin.plugindefaultimplementation</class> <version>1.0.0</version> <description>module.directory.angular.module.description</description>... <core-version-dependency> <min-core-version>3.1.2</min-core-version> <max-core-version/> </core-version-dependency> <db-pool-required>0</db-pool-required> <!-- Xpage configuration --> <applications> <application> <application-id>directory-angular</application-id> <applicationclass>fr.paris.lutece.plugins.directory.modules.angular.web.directoryangularapp</applicationclass> </application> </applications> </plug-in>
LE FICHIER PLUGINS.DAT Ce fichier est situé dans WEB-INF/plugins Il contient : l état des plugins (installé/non installé) le pool de connexions à utiliser A partir de la version 4.1, ce fichier ne sert que pour l initialisation. Les données vivantes sont stockées dans le Datastore. # plugins.dat file appstore.installed=1 appstore.pool=portal document-ckan.installed=1 document.installed=1 document.pool=portal html.installed=1 jmx.installed=1 jmxtrans.installed=1 lucene.installed=1 pluginwizard.installed=1 pluginwizard.pool=portal rest.installed=1 theme.installed=1 theme.pool=portal
LES FICHIERS DE CONTEXTE (SPRING) DES PLUGINS Ces fichiers sont situés dans le répertoire WEB-INF/conf/plugins. Ils contiennent la déclaration des beans fournis par le plugin et à charger dans le contexte global. Les noms des beans doivent être préfixés par le nom du plugin suivi d un point. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="appstore.categorydao" class="fr.paris.lutece.plugins.appstore.business.categorydao" /> <bean id="appstore.applicationdao" class="fr.paris.lutece.plugins.appstore.business.applicationdao" /> <bean id="appstore.componentdao" class="fr.paris.lutece.plugins.appstore.business.componentdao" /> <bean id="appstore.icondao" class="fr.paris.lutece.plugins.appstore.business.icondao" /> </beans>
LES FICHIERS DE PROPRIETES DES PLUGINS Ces fichiers sont situés dans le répertoire WEB-INF/conf/plugins. Ils contiennent la déclaration des propriétés fournies par le plugin. Les noms des propriétés doivent être préfixés par le nom du plugin suivi d un point. # myplugin.properties myplugin.property1=value1 myplugin.property2=value2 En java, les propriétés sont accessibles via la classe AppPropertiesService private static final String PROPERTY_1 = «myplugin.property1»; String strproperty1 = AppPropertiesService.getProperty( PROPERTY_1 );
LES FICHIERS RESOURCES ET L I18N Les messages de l application et autres ressources de type chaînes de caractères doivent être rassemblées dans des fichiers de ressources. Ces fichiers sont stockés dans le répertoire fr.paris.lutece.plugins.<nom_plugin>.resources. Ces fichiers sont internationalisables (i18n) en suffixant le nom du fichier par la locale. Exemple : <nom_plugin>_messages_fr.properties <nom_plugin>_messages_en.properties Les clés i18n sont codifiées de la manière suivante : Référence de la clé Fichier Localisation portal.<nom_sous_système>.<clé> <sous_système>_messages_*.properties Noyau (core) <nom_plugin>.<clé> <nom_plugin>_messages_*.properties Plugin module. <nom_plugin>. <nom_module>.clé <nom_module>_messages_*.properties Plugin/Module
UTILISATION DES CLES I18N DANS LES TEMPLATES Les clés i18n sont à utiliser dans les templates en utilisant la forme #i18n{ référence_clé } Dont voici un exemple dans un template : <b>#i18n{myplugin.mytemplate.labelfirstname}</b> : ${person.firstname} <b>#i18n{myplugin.mytemplate.labellastname}</b> : ${person.lastname} Le fichier myplugin_messages_fr.properties contiendra les valeurs des clés : mytemplate.labelfirstname=prénom mytemplate.labellastname=nom
PLUGIN WIZARD Assistant de génération de code permettant de générer : - Le fichier projet pom.xml - Les fichiers de configuration (xml, context, properties) - Les classes Java (Métier + DAO (crud), Admin Features, Xpages, Portlets) - Les templates HTML (Bootstrap v2) - Les fichiers resources i18n - Les scripts SQL - Le squelette de documentation xdoc (site projet généré par Maven)
PLUGIN WIZARD Les profils de générations, les générateurs et les templates de générations sont injectés en Spring. Il est donc possible de se fabriquer ses propres configurations pour personnaliser la génération. Il est possible de tester chaque générateur de manière unitaire grâce à des données de test (plugin de référence) et de classes Junit.
DEMO Un exemple de petite médiathèque 3 médias : Livres, CD et DVD Edition des fiches en Back Office Visualisation du catalogue en Front Office (lecture seule) Création du plugin avec PluginWizard Déploiement Modification simple de code Redéploiement
DOCUMENTATION & RESOURCES Official Web Site http://fr.lutece.paris.fr Demo Site (Nightly builds + Data reseted every 3hours) http://dev.lutece.paris.fr/site-demo Developer Site http://dev.lutece.paris.fr Wiki https://dev.lutece.paris.fr/confluence
THANK YOU KEEP IN TOUCH @LuteceNews