LISE 3. Template pour les mails. Version 1.0 du 13/04/2010. Etat : Validé

Documents pareils
WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Programmer en JAVA. par Tama

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

TP1. Outils Java Eléments de correction

Création d une application JEE

Plateforme PAYZEN. Définition de Web-services

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Web Tier : déploiement de servlets

Serveur d'archivage 2007 Installation et utilisation de la BD exist

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Corrigé des exercices sur les références

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Auto-évaluation Aperçu de l architecture Java EE

Compte Rendu d intégration d application

1. Installation d'un serveur d'application JBoss:

Auto-évaluation Programmation en Java

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Initiation à JAVA et à la programmation objet.

Définition des Webservices Ordre de paiement par . Version 1.0

Java DataBaseConnectivity

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Applet pour visualiser les variables «automate» notifiées

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10

La base de données XML exist. A. Belaïd

JavaServer Pages (JSP)

Dis papa, c est quoi un bus logiciel réparti?

Tutoriel d installation de Hibernate avec Eclipse

Programmation par les Objets en Java

Alfstore workflow framework Spécification technique

Programmation en Java IUT GEII (MC-II1) 1

Projet de programmation (IK3) : TP n 1 Correction

les techniques d'extraction, les formulaires et intégration dans un site WEB

.NET - Classe de Log

Composants Logiciels. Le modèle de composant de CORBA. Plan

TP1 : Initiation à Java et Eclipse

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Une introduction à Java

Gestion du service des enseignements

Projet Java EE Approfondi

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Application de lecture de carte SESAM-Vitale Jeebop

Chapitre 10. Les interfaces Comparable et Comparator 1

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

La gestion de la persistance avec Hibernate. Hibernate et la gestion de persistance. La gestion de la persistance (1/2) Introduction

Design patterns. Design patterns - définition. Design patterns - avantages

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Classe Interne, Anonyme & Enumération

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Application web de gestion de comptes en banques

7 Développement d une application de MapReduce

as Architecture des Systèmes d Information

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

OCL - Object Constraint Language

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

CONFIGURATION DE LA LIBRAIRIE WEBUTIL (10g) Oracle Forms 10g

Langage Java. Classe de première SI

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Premiers Pas en Programmation Objet : les Classes et les Objets

Lier Erlang avec d autres langages de programmation

Paginer les données côté serveur, mettre en cache côté client

Cours 1: Java et les objets

Héritage presque multiple en Java (1/2)

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Environnements de développement (intégrés)

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Programmation Par Objets

RAPPORT DE STAGE GWT PRISE EN MAIN SERVLET - TEST DES DAO TELOSYS PLUGIN ECLIPSE WIZARD DATASET TELOSYS

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Utilisation de Jakarta Tomcat

Déploiement et monitoring

Installer et configurer Oracle Forms 11gR2 Windows 7 64 bits

Bases Java - Eclipse / Netbeans

Utiliser SQL Server 2008 R2 Reporting Services comme source de donne es pour Microsoft Excel

Formation Découverte du Web

Java Licence Professionnelle CISII,

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Serveur d Applications Web : WebObjects

Jahia. Guillaume Monnette École Ingénieurs 2000 Marne-La-Vallée IR3

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Groupe Eyrolles, 2005, ISBN :

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Tp 1 correction. Structures de données (IF2)

Java Naming and Directory Interface

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Introduction à MapReduce/Hadoop et Spark

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Module BD et sites WEB

10. Base de données et Web. OlivierCuré

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Transcription:

Template pour les mails Version 1.0 du 13/04/2010 Etat : Validé

SUIVI DES MODIFICATIONS Version Rédaction Description Vérification Date 1.0 A. Lesuffleur création du document 13/04/10 Document validé dans sa version xxx LISTE DE DIFFUSION Organisation Nom Info Commentaire Validation Version 1.0 du 13/04/2010 / Etat : Validé Page 2/14

SOMMAIRE SUIVI DES MODIFICATIONS... 2 LISTE DE DIFFUSION... 2 SOMMAIRE... 3 1 PRESENTATION... 4 1.1 Objectif... 4 1.2 Description... 4 1.3 Normes Acube-Velocity... 5 2 MISE EN ŒUVRE... 6 2.1 Pré requis :... 6 2.2 Configuration... 6 2.2.1 Configuration Spring... 6 2.2.2 Implémentation JAVA... 9 2.2.3 Template VTL... 11 3 PERSONNALISATION... 13 3.1 Créer son ResourceLoader... 13 4 PERFORMANCE... 14 4.1 Cache... 14 4.2 Fonctionnement et performance... 14 DOCUMENTS DE REFERENCE Version Titre Version 1.0 du 13/04/2010 / Etat : Validé Page 3/14

1 PRESENTATION 1.1 OBJECTIF Les Template de mail permettent de modifier le contenu d un courriel en incorporant des données métiers sans avoir à modifier le code de l application. Avantages : A partir du moment où un champ est dans le modèle métier, il peut être affiché dans le Mail via la Template Pas d impact lors d évolution : si un champ est ajouté, il sera automatiquement disponible dans les modèles Possibilité de générer du HTML ou du texte brut ou autre format Ne nécessite pas de nouvelles librairies (à partir de.2.0) 1.2 DESCRIPTION La solution repose sur l intégration du moteur de Template JAVA Velocity. Ce moteur prend en entrée un fichier Template VTL (Velocity Template Language) et un ensemble de variable en JAVA (Contexte). Un fichier Template VTL permet de définir la mise en page et le contenu statique désirés. Le contexte permet lors de chaque génération de prendre en compte des données métiers différentes. Le moteur de Template Velocity récupère le fichier VTL grâce à un «resource loader» et fusionne le fichier VTL avec les données métiers (objets JAVA). Schéma de fonctionnement de Velocity Version 1.0 du 13/04/2010 / Etat : Validé Page 4/14

1.3 NORMES ACUBE-VELOCITY Le moteur de Template Velocity est réservé à la génération de mails personnalisés. Le moteur Velocity ne doit pas être utilisé pour un autre but : générateur de code, remplacement des JSP ou feuilles XSL. Le serveur de mail doit être déclaré dans le fichier context.xml comme une ressource JEE JNDI, les propriétés doivent être tagguées pour la livraison avec les tâches ANT. Dans la documentation du projet, un fichier référencera toutes les données métiers disponibles pour les Template Exemple : Code ${personne.nom ${personne.prenom ${personne.adresse.codepostal ${personne.adresse.ville ${correspondant Description Nom du destinataire Prénom du destinataire Code postal de l adresse du destinataire Ville de l adresse du destinataire Prénom + nom du correspondant Version 1.0 du 13/04/2010 / Etat : Validé Page 5/14

2 MISE EN ŒUVRE 2.1 PRE REQUIS : Pour mettre en place le moteur de template, la bibliothèque Velocity est requise ainsi que les dépendances cidessous : Dépendance Requis Condition commonscollections Oui Nécessaire au fonctionnement de Velocity commons-lang Oui Nécessaire au fonctionnement de Velocity commons-logging Non Seulement si les logs sont configurés pour utiliser le logger CommonsLogLogChute. oro Non Seulement si les instructions VTL #include et #parse sont utilisées. log4j Non Seulement si log4j est utilisé comme logger. Ces bibliothèques sont incluses dans le Framework LISE V3 à partir de la version 3.2.0. 2.2 CONFIGURATION 2.2.1 CONFIGURATION SPRING 2.2.1.1 CONFIGURATION MINIMALE Créer un fichier nommé «spring-appcontext-mail.xml» avec au minimum le contenu suivant : <?xml version="1.0" encoding="iso-8859-1"?> <!-- Configuration de Spring Mail --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemalocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- Connexion à la ressource JNDI --> <bean id="mailsession" class="org.springframework.jndi.jndiobjectfactorybean"> <property name="jndiname"><value>java:comp/env/mail/session</value></property> </bean> Version 1.0 du 13/04/2010 / Etat : Validé Page 6/14

<!-- Déclaration du bean JavaMail qui envoie les mails --> <bean id="mailsender" class="org.springframework.mail.javamail.javamailsenderimpl"> <property name="session"><ref bean="mailsession"/></property> </bean> <!-- Instanciation du moteur de template avec un ressource loader de type classpath --> <bean id="velocityengine" class="org.springframework.ui.velocity.velocityenginefactorybean"> <property name="velocityproperties"> <props> <prop key="resource.loader">class</prop> <prop key="class.resource.loader.class"> org.apache.velocity.runtime.resource.loader.classpathresourceloader </prop> </props> </property> </bean> <!-- Instanciation du service applicatif contenant l algorithme d envoi des mails --> <bean id="mailservice" class="acube.projet.business.service.mailserviceimpl"> <property name="mailsender" ref="mailsender" /> <property name="velocityengine" ref="velocityengine" /> </bean> </beans> Avec cette configuration ci-dessus, le projet disposera d un service «MailService» contenant : un moteur de Template Velocity instancié avec un chargeur de ressources capable de récupérer les fichiers VTL dans le classpath JAVA. un objet MailSender, contenant les classes JavaMail instanciées avec les paramètres JNDI (contenu dans le fichier context.xml). 2.2.1.2 CONFIGURATION DU LOADER Un «ressource loader» permet de récupérer un fichier VTL à partir d une clé, ou un chemin. Ci-dessous la liste des loaders disponibles avec leurs paramètres : Loader spécificité paramètres ClasspathResourceLoader chargement des fichiers VTL dans le classpath -file.resource.loader.cache = true/false -file.resource.loader.modificationcheckinterval = Intervalle en seconde pour vérifier les modifications DataSourceResourceLoader chargement des fichiers VTL dans une table d une base de données -ds.resource.loader.resource.datasource = datasource JNDI -ds.resource.loader.resource.table = nom de la table -ds.resource.loader.resource.keycolumn = nom de la colonne contenant la clé -ds.resource.loader.resource.templatecolumn = nom de la colonne contenant le VTL -ds.resource.loader.resource.timestampcolumn = nom de la colonne contenant la date du VTL Version 1.0 du 13/04/2010 / Etat : Validé Page 7/14

FileResourceLoader chargement des fichiers VTL sur le système de fichier local -ds.resource.loader.cache = false/true -ds.resource.loader.modificationcheckinterval = intervalle en seconde -file.resource.loader.path = chemin vers les fichiers VTL -file.resource.loader.cache = true/false -file.resource.loader.modificationcheckinterval = Interval en seconde pour vérifier les modifications JarResourceLoader chargement des fichiers VTL contenu dans une archive JAR StringResourceLoader chargement d une Template VTL à partir d une clé et d une chaine de caractère au format VTL en paramètre URLResourceLoader -jar.resource.loader.path= chemin du jar contenant les VTL jar:file:/test2.jar -url.resource.loader.root = URL vers les fichiers VTL -url.resource.loader.cache = true/false -url.resource.loader.modificationcheckinterval = Intervalle en seconde pour vérifier les modifications Chacun de ces loaders peut être déclarés dans le fichier Spring. Exemple de configuration Spring pour DataSourceResourceLoader <!-- Déclaration du datasourceresourceloader avec la datasource JNDI (SQL) --> <bean id="templateloader" class="org.apache.velocity.runtime.resource.loader.datasourceresourceloader"> <property name="datasource"> <ref local="datasource" /> </property> </bean> <!-- Instanciation du moteur avec les paramètres nécessaires au loader --> <bean id="velocityengineds" class="org.springframework.ui.velocity.velocityenginefactorybean"> <property name="velocitypropertiesmap"> <map> <entry key="resource.loader"> <value>ds</value> </entry> <entry key="ds.resource.loader.instance"> <ref bean="templateloader" /> </entry> <entry key="ds.resource.loader.resource.table"> <value>template</value> </entry> <entry key="ds.resource.loader.resource.keycolumn"> <value>name</value> </entry> <entry key="ds.resource.loader.resource.templatecolumn"> <value>content</value> </entry> Version 1.0 du 13/04/2010 / Etat : Validé Page 8/14

<entry key="ds.resource.loader.resource.timestampcolumn"> <value>last_modified</value> </entry> </map> </property> </bean> 2.2.2 IMPLEMENTATION JAVA Coté Java, il faut créer le service qui doit envoyer des mails. Ci-dessous l interface correspondant à la configuration Spring avec une méthode métier «sendalertemail» : public interface MailService { * @param velocityengine * the velocityengine to set public abstract void setvelocityengine( VelocityEngine velocityengine); * @param mailsender * the mailsender to set public abstract void setmailsender( MailSender mailsender); * Envoi du mail public abstract void sendalertemail(); Pour l implémentation, la seule méthode a exécuté pour fusionner la template VTL avec les données métiers est : String VelocityEngineUtils.mergeTemplateIntoString (VelocityEngine, String VTL,Map<String,Object> model); Cette méthode prend trois paramètres : - Le moteur de template instancié par Spring, - La clé permettant d identifier le fichier VTL à récupérer, - Une Map<String,Object> contenant les objets JAVA métier Exemple d implémentation de l interface ci-dessus : public class MailServiceImpl implements MailService { * Template engine private VelocityEngine velocityengine; Version 1.0 du 13/04/2010 / Etat : Validé Page 9/14

* mailsender private MailSender mailsender; * public MailServiceImpl() { * @param velocityengine * VelocityEngine * @param mailsender * MailSender public MailServiceImpl( VelocityEngine velocityengine, MailSender mailsender) { this.velocityengine = velocityengine; this.mailsender = mailsender; * @param velocityengine * the velocityengine to set public void setvelocityengine( VelocityEngine velocityengine) { this.velocityengine = velocityengine; * @param mailsender * the mailsender to set public void setmailsender( MailSender mailsender) { this.mailsender = mailsender; * Envoi du mail public void sendalertemail() { //Model Map<String, Object> model = new HashMap<String, Object>(); model.put("user", "Mon Utilisateur"); model.put("destinataire", "M. Destin"); Version 1.0 du 13/04/2010 / Etat : Validé Page 10/14

//Transform String text = VelocityEngineUtils.mergeTemplateIntoString( this.velocityengine, "mailtemplate.vm", model); //Send mail SimpleMailMessage msg = new SimpleMailMessage(); String tos[] = {"M. Destin<m.destin@maee.com>", "D2 <d2@maee.com>"; msg.setto(tos); msg.setfrom("expediteur" + "<Expedit@acube.com>"); msg.settext(text); this.mailsender.send(msg); 2.2.3 TEMPLATE VTL 2.2.3.1 SYNTAXE Une Template VTL est un fichier texte sans en-tête particulier, avec l extension.vm. Pour faire référence à une variable, il faut utilise la syntaxe suivante : ${clévariable.sousclé Pour faire référence à une méthode d une variable, il faut utilise la syntaxe suivante : ${clévariable.nomméthode() Toutes les autres instructions utiliser le caractère #, exemple : #foreach( $criterion in $criteria ) #end #set( $result = $query.criteria($criterion) ) #if( $result ) Query was successful #end Pour en savoir plus sur la syntaxe, consulter le guide d utilisation disponible en français sur le site de Velocity : http://velocity.apache.org/engine/releases/velocity-1.6.2/translations/user-guide_fr.html Version 1.0 du 13/04/2010 / Etat : Validé Page 11/14

2.2.3.2 EXEMPLE HTML DE TEMPLATE <html> <body> <h3>bonjour ${user.username,et bienvenue sur le site ${site!</h3> <div> L application utilisera désormais l adresse mail suivantes<a href="mailto:${user.emailaddress">${user.emailaddress</a>. </div> </body> </html> Version 1.0 du 13/04/2010 / Etat : Validé Page 12/14

3 PERSONNALISATION 3.1 CREER SON RESOURCELOADER Il est possible de créer son propre Resource Loader. Pour se faire, il suffit d implémenter la classe abstraite ResourceLoader. Les méthodes à surcharger sont les suivantes : Signatures des méthodes public void init(extendedproperties configuration); public InputStream getresourcestream (String source ) public boolean issourcemodified (Resource resource) public long getlastmodified (Resource resource) Description Méthode d initialisation permettant de récupérer des paramètres propres au loader Méthode qui va récupérer le fichier VTL selon le paramètre source Méthode permettant de savoir si une source a été modifiée, (nécessaire pour la gestion d un cache) Méthode permettant de savoir depuis quand la ressource a été modifiée Exemple d un resourceloader basique qui charge une seule template VTL sous forme de chaine de caractères, sans gérer de cache : public class OneStringResourceLoader extends ResourceLoader { @Override public long getlastmodified( Resource arg0) { return 0; @Override public InputStream getresourcestream( String arg0) throws ResourceNotFoundException { return new ByteArrayInputStream(arg0.getBytes()); @Override public void init( ExtendedProperties arg0) { @Override public boolean issourcemodified( Resource arg0) { return false; Version 1.0 du 13/04/2010 / Etat : Validé Page 13/14

4 PERFORMANCE 4.1 CACHE Certains Resource Loader permettent d activer un gestionnaire de cache. Ce cache peut améliorer les performances lors de traitement de masse faisant appel à la même template un nombre de fois important. Lors de l utilisation du cache, il faut veiller à bien paramétrer l intervalle de synchronisation du cache (paramètre : resource.loader.cache) 4.2 FONCTIONNEMENT ET PERFORMANCE Les Template VTL sont interprétées, il n y a pas de phase de compilation, la vitesse d exécuter est linéaire. Le moteur pour accéder aux variables utilise les getters n fois le nombre d occurrences trouvé dans le fichier VTL. Pour éviter de dégrader les performances, il est préférable de rendre disponibles aux Template des objets métiers de type POJO sans algorithmes lourd et éviter les accès aux ressources extérieures (bases de données, web services ). Version 1.0 du 13/04/2010 / Etat : Validé Page 14/14