Fabienne Boyer Laboratoire LIG (INRIA-UJF-INPG) 2009-2010 Projet SARDES, INRIA Rhône-Alpes APACHE/VELOCITY.

Slides:



Advertisements
Présentations similaires
« Hello World! » Diapositive no.1. Ajout de la logique daffaire (« Business Logic ») Dans lentité « Employee » : /// /// Age as of today /// public int.
Advertisements

PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
DOM Document Object Model. Généralités Standard du W3C Parseur XML – Génération dun arbre dobjet – Construction totale de larbre DOM est spécifié en IDL.
SAX Simple API for XML. Généralités API non standard développé par les membres du forum XML-DEV Parseur XML – Orienté événement – Parsing dynamique SAX.
Introspection et Réflexion Manipulation dynamique de code Java.
Au programme du jour …. Ce que vous navez pas encore vu Constantes et variables de classe Main et Tests Utilisation de lAPI Existence des packages Existence.
Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages.
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Séparation des préoccupations (c) 2004, Audrey Occello, LF8 MOC Seconde partie Un exemple de programmation orientée Aspect avec AspectJ.
Java et la réflexivité.
Java et la réflexivité. Java reflection is useful because it supports dynamic retrieval of information about classes and data structures by name, and.
Java et la réflexivité. Java reflection is useful because it supports dynamic retrieval of information about classes and data structures by name, and.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Programmation Web Les JSP.
(Classes prédéfinies – API Java)
INTRODUCTION A JAVA Chapitre 1 : Introduction
Toolkit Web Framework Java pour les IHMs Cédric Dumas mars 2008 contrat Creative Commons Paternité-Pas d'Utilisation Commerciale- Partage.
TP2 ... MVC ? JList JLabel JSlider ImageLibrary Contrôleur Vue Modèle
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
JAV - TD 6 Structures de données JAVA
PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Les entrées /sorties en Java François Bonneville
Connexion base de données
Chapitre IV Object, interfaces, classes imbriquées.
Injection de dépendances
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
Outils de tests, logs et documentation Frédéric Moalannée 2010/2011 POO.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
1 Cours JAVA / Y.Laborde Java : Les types génériques ( ) LES TYPES GENERIQUES : Introduction (diapo 2) Déclaration dun type générique (3) 1re déclaration.
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
Cours du 19 octobre. POO-L3 H. Fauconnier2 E) Constructeurs et héritage Le constructeurs ne sont pas des méthodes comme les autres: le redéfinition na.
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
Langages du Web Sémantique
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Master 1 SIGLIS java Lecteur Stéphane Tallard Chapitre 4 – Structures de contrôle.
Quelques notes sur CORBA F. Boyer, Oct Principes Programmation distribuée Multi-plateformes Notion de client et de serveur Notion de stub et de.
Le patron de conception « Strategy » Simon Durocher ( )
Programmation par Objets et Java
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
JUnit Présentation complète de JUnit et « guide d’utilisation » en 13 transparents.
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke JavaCC.
Design Pattern Memento. Principe : Enregistrer les changements d'états d'un objet Objectif : Pouvoir restituer les états précédents d'un objet.
Faculté I&C, Claude Petitpierre, André Maurer 1 Concepts dhéritage Héritage dimplémentation hasA Héritage de spécialisation isA.
Multi-Thread Jian-Yun Nie
IFT 6800 Atelier en Technologies d’information
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Badr Benmammar Programmation concurrente et temps réel en Java Badr Benmammar
Servlets. 2 H. Fauconnier M2-Internet Contenu dynamique Perl/cgi indépendant de la plateforme Extensions du serveur exemple ASP M2-Internet 3 H. Fauconnier.
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels Chapter 8: Gestion des exceptions.
Java, les objets : tout de suite ! Rassembler, grouper les objets
Fabienne Boyer Laboratoire LIG (INRIA-UJF-INPG) Projet SARDES, INRIA Rhône-Alpes Usage.
Branche Développement Le présent document contient des informations qui sont la propriété de France Télécom. L'acceptation de ce document par son destinataire.
Intention Séparer et extraire les traitements appliquées à différents type de nœuds d’une structure.
Projet de semestre Responsable :Prof. Claude Petitpierre Superviseur :Duy Vo Duc.
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
Cours 7 Classes locales Clonage Divers: tableaux.
Tutorat en bio-informatique
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 3 – Classes et objets en Java Master 1 SIGLIS1 Java Lecteur - Chapitre 3 Classes et objets en Java.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Généricité.
Transcription de la présentation:

Fabienne Boyer Laboratoire LIG (INRIA-UJF-INPG) Projet SARDES, INRIA Rhône-Alpes APACHE/VELOCITY : un outil libre de génération de code Détails pour le projet Javanaise

2© 2008, F. Boyer, UJF Projet JAVANAISE, UE Etude et Projet dintergiciels, M2PGI Principes Apache / Jakarta project Utilisé pour générer du code Java, des documents HTML ou texte, etc Séparation claire entre patron de génération (template) et code Java Un langage (Velocity Template Language - VTL) permet de décrire les patrons de génération

3© 2008, F. Boyer, UJF Projet JAVANAISE, UE Etude et Projet dintergiciels, M2PGI Contextes dutilisation Web applications A la place ou en conjonction avec les JSP Le template est du code HTML contenant des directives Velocity Java Code generation XML processing & transformation Text processing

4© 2008, F. Boyer, UJF Projet JAVANAISE, UE Etude et Projet dintergiciels, M2PGI Principe dutilisation de Velocity dans Javanaise Velocity est utilisé pour générer des classes dinterception spécifiques aux objets métiers Ces classes implantent les mêmes méthodes / Interfaces que les objets métier

5© 2008, F. Boyer, UJF Projet JAVANAISE, UE Etude et Projet dintergiciels, M2PGI Principe dutilisation de Velocity template contexte Nom ref. Objet Java Hello $name, Welcome to Velocity name "World" Result (Writer) Hello World, Welcome to Velocity Velocity Engine

6© 2008, F. Boyer, UJF Projet JAVANAISE, UE Etude et Projet dintergiciels, M2PGI HelloWorld avec Velocity (exemple tiré de Hello $name, Welcome to Velocity import …; public class Helloworld { public static void main (String args[]) { // get & initialize the velocity engine VelocityEngine ve = new VelocityEngine().init(); // get the template Template t = ve.getTemplate("helloworld.vm"); // create a context & add data VelocityContext context = new VelocityContext(); context.put("name", "World"); // perform generation StringWriter writer = new StringWriter(); t.merge(context, writer); System.out.println(writer.toString()); HelloWorld.java HelloWorld.vm

7© 2008, F. Boyer, UJF Projet JAVANAISE, UE Etude et Projet dintergiciels, M2PGI Utilisation de Velocity dans Javanaise Template Contexte Nom ref. Objet Java package jvnGenerated; public class Jvn$className { … #foreach ($meth in $methods) #if ($util.isNotNull($ret))... #set ($needWriteLock = ($methodName.indexOf("W_") == 0)) #if ($needWriteLock) obj.jvnLockWrite(); #elseif ($needReadLock) obj.jvnLockRead(); #end … #end } util … Result (Writer) … public class JvnSentence extends JvnObjectImpl implements Serializable { … public SentenceJvn() {…} public void write(String text) {…} public String read() {…} } Velocity Engine className Sentence methods arrayList of Method objects (see java.lang.reflect)

8© 2008, F. Boyer, UJF Projet JAVANAISE, UE Etude et Projet dintergiciels, M2PGI Principes d'implémentation dune classe dinterception // Remarque : différents principes d'implémentation peuvent être adoptés public class JvnSentence { … // appel d'une méthode applicative public void write(String s) { jvnLockWrite(); // appelle la méthode write sur l'objet métier... jvnUnLock(); }

9© 2008, F. Boyer, UJF Projet JAVANAISE, UE Etude et Projet dintergiciels, M2PGI Principes d'implémentation de JVN2 Comment savoir si une méthode accède un objet en écriture ou en lecture ? u Le nom de la méthode suit une convention particulière (préfixe ou suffixe particulier) u La méthode lève des exceptions prédéfinies par Jvn (JvnReadException, JvnWriteException) u On utilise des annotations Java

10© 2008, F. Boyer, UJF Projet JAVANAISE, UE Etude et Projet dintergiciels, M2PGI Suppléments dinformation : extrait de la Javadoc / java.lang.Method ClassClass[] getExceptionTypes() Returns an array of Class objects that represent the types of the exceptions declared to be thrown by the underlying method represented by this Method object.getExceptionTypes Int getModifiers() Returns the Java language modifiers for the method represented by this Method object, as an integer. getModifiers StringString getName() Returns the name of the method represented by this Method object, as a String. getName Class[] getParameterTypes() Returns an array of Class objects that represent the formal parameter types, in declaration order, of the method represented by this Method object. ClassgetParameterTypes ClassClass getReturnType() Returns a Class object that represents the formal return type of the method represented by this Method object. getReturnType

11© 2008, F. Boyer, UJF Projet JAVANAISE, UE Etude et Projet dintergiciels, M2PGI Suppléments dinformation : VTL - Affecter une valeur (chaîne) à une variable: #set ($a = "Velocity") - Commentaire ## Ceci est un commentaire - Notation formelle Class $className $foo $foo.getBar() ## est équivalent à $foo.Bar $data.setUser("jon") ## est équivalent à #set( $data.User = "jon" ) $data.getRequest().getServerName() ## est équivalent à $data.Request.ServerName ## est équivalent à ${data.Request.ServerName}

12© 2008, F. Boyer, UJF Projet JAVANAISE, UE Etude et Projet dintergiciels, M2PGI Références