AOP Tools Comparison



Documents pareils
Java Aspect Components (JAC)

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

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

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

RMI le langage Java XII-1 JMF

Programmer en JAVA. par Tama

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

JOnAS Day 5.1. Outils de développements

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

Instrumentation de code Java

TP1 : Initiation à Java et Eclipse

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

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Bases Java - Eclipse / Netbeans

LOG4430 : Architecture logicielle et conception avancée

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

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

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

Le moteur de workflow JBPM

as Architecture des Systèmes d Information

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

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

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

Java 7 Les fondamentaux du langage Java

Générer du code à partir d une description de haut niveau

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

INITIATION AU LANGAGE JAVA

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Mise en œuvre des serveurs d application

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

TP1 : Initiation à Java et Eclipse

Rapport de Synthèse. Création d un Générateur de modèle PADL pour le langage C++ Sébastien Colladon

Chapitre 10. Les interfaces Comparable et Comparator 1

Vulgarisation Java EE Java EE, c est quoi?

Généralités sur le Langage Java et éléments syntaxiques.

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Auto-évaluation Programmation en Java

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

S T L - C P S - L e s p l u g i n s E c l i p s e. - Une Introduction , Frédéric Peschanski

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)

Java pour le Web. Cours Java - F. Michel

Web Tier : déploiement de servlets

Cours 1: Java et les objets

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Java DataBaseConnectivity

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Création d une application JEE

ACTIVITÉ DE PROGRAMMATION

Cours en ligne Développement Java pour le web

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

ECLIPSE ET PDT (Php development tools)

Porte dérobée dans les serveurs d'applications JavaEE

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

Remote Method Invocation (RMI)

Initiation à JAVA et à la programmation objet.

Chapitre 2 : Abstraction et Virtualisation

2 Chapitre 1 Introduction

JOnAS 5. Serveur d application d

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

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

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

Annexe : La Programmation Informatique

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

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

Cours de Génie Logiciel

La carte à puce. Jean-Philippe Babau

Intégration de l interface graphique de Ptidej dans Eclipse

Java Licence Professionnelle CISII,

openarchitectureware & transformation de modèle Yannick Lizzi Architecte Logiciel itemis France Mail: lizzi@itemis.de

S7 Le top 10 des raisons d utiliser PHP pour moderniser votre existant IBM i

Alfstore workflow framework Spécification technique

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Plan du cours. Historique du langage Nouveautés de Java 7

Langage Java. Classe de première SI

Introduction à la plateforme J2EE

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

Livre Blanc WebSphere Transcoding Publisher

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

MOTEUR DE WORKFLOW Mise en oeuvre d'openwfe Version septembre 2006

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Objets et Programmation. origine des langages orientés-objet

Hassene BELGACEM. Expériences Professionnelles. JEE architect / Technical leader. Ingénieur Informatique. Cycle Préparatoire

Glassfish dans le milieu médical. Sun Aquarium Paris 26 Juin 2009 Jacky Renno

Synchro et Threads Java TM

Traitement de données

Java et les annotations

Développer des Applications Internet Riches (RIA) avec les API d ArcGIS Server. Sébastien Boutard Thomas David

OpenPaaS Le réseau social d'entreprise

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.

Programmation par les Objets en Java

Java - la plateforme

Chapitre I Notions de base et outils de travail

1 JBoss Entreprise Middleware

Transcription:

Comparaison des outils de développement AOP en Java basée sur l'article de Mik Kersten. Fabrice Bodmer & Timothée Maret Université de Fribourg, Juin 2006

Plan 1. Introduction 2. Présentation des outils 1. AspectWerkz 2. AspectJ 3. Spring 4. Jboss AOP 3. Comparaison 4. Conclusion Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 2

Plan 1. Introduction 2. Présentation des outils 1. AspectWerkz 2. AspectJ 3. Spring 4. Jboss AOP 3. Comparaison 4. Conclusion Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 3

1. Introduction : Article de référence Mik Kersten. AOP tools comparison, décembre 2005 Comparaison des quatre outils AOP les plus populaires en Java. (AspectJ,JBoss,AspectWerkz,Spring) Evolutions majeures pour la plupart des outils. Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 4

1. Introduction : Comparaison 1. Mise en oeuvre des aspects 2. Fonctionnalite s du langage 3. Modes de weaving 4. Inte gration avec les IDE 5. Domaines d application Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 5

1. Introduction : Exemple de démonstration public class Test { public static void main(string[] args) { Inventory inventory = new Inventory(); Item item1 = new Item("1", 30); Item item2 = new Item("2", 31); Item item3 = new Item("3", 32); inventory.additem(item1); inventory.additem(item2); inventory.additem(item3); ShoppingCart sc = new ShoppingCart(); ShoppingCartOperator.addShoppingCartItem(sc, inventory, item1); ShoppingCartOperator.addShoppingCartItem(sc, inventory, item2); } } Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 6

Plan 1. Introduction 2. Présentation des outils 1. AspectWerkz 2. AspectJ 3. Spring 4. Jboss AOP 3. Comparaison 4. Conclusion Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 7

2.1. AspectWerkz Premier langage AOP pour Java par BEA Systems Mise en oeuvre par des fichiers XML Weaving dynamique Fusion dans AspectJ 5 Arrêt du développement avec la version 2.0 Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 8

Plan 1. Introduction 2. Présentation des outils 1. AspectWerkz 2. AspectJ 3. Spring 4. Jboss AOP 3. Comparaison 4. Conclusion Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 9

2.2. AspectJ : Présentation Evolution majeure depuis le 20 décembre 2005, AspectJ 5 Compilateur/weaver ajc (weaving dynamique/statique) Conçu pour des applications standalone Large palette de fonctionnalités Supporte les fonctionnalités de Java 1.5 Trois méthodes de déclaration des aspects Les annotations Java 1.5 Extension du langage Java Fichier XML (dynamique) Plugin ajdt pour Eclipse Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 10

2.2. AspectJ : Exemple 1, ajc post compile time Annotations contenues dans les fichiers.class et permettant d'insérer les aspects après la compilation import org.aspectj.lang. ; import org.aspectj.lang.annotation.aspect; import org.aspectj.lang.annotation.before; import org.aspectj.lang.annotation.pointcut; @Aspect public class TraceAspectV1Annotations { @Pointcut("execution(. (..)) execution(.new(..)) &&!within(traceaspectv1annotations)") void tracemethods() {} @Before("traceMethods()") public void process(joinpoint.staticpart thisjoinpointstaticpart) { Signature sig = thisjoinpointstaticpart.getsignature(); System.out.println("Entering [" + sig.getdeclaringtype().getname() + "." + sig.getname() + "]"); } } Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 11

2.2. AspectJ : Exemple 2, ajc load time weaving Injection dans le chargeur de classe par un agent aspectjweaver.jar Configuration du weaver dans le fichier META-INF/aop.xml import org.aspectj.lang.*;... @Aspect public abstract class TraceAspectV1AbstractAnnotations { @Pointcut abstract void tracemethods(); } @Before("traceMethods()")... <aspectj> <aspects> <! définition de l aspect > <concrete aspect name="traceaspectv1" extends="traceaspectv1abstractannotations"> <pointcut name="tracemethods" expression="execution(. (..)) execution(.new(..))" /> </concrete aspect> </aspects> <weaver options="nowarn" /> </aspectj> Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 12

2.2. AspectJ : Code décompilé Décompilation des classes Item.class (listing 6) TraceAspectV1.class (listing 7) L'Aspect implémente un Singleton L'Advice est converti en une méthode dont le nom contient des informations sur lui même ajc$before$traceaspectv1$1$b314f86e thispoinpointstaticpart est ajouté en paramètre La classe Item contient un membre statique pour chaque JoinPoint Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 13

Plan 1. Introduction 2. Présentation des outils 1. AspectWerkz 2. AspectJ 3. Spring 4. Jboss AOP 3. Comparaison 4. Conclusion Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 14

2.3. Spring : Présentation Conteneur léger, modulaire (librairies.jar) Gestion de l'instanciation des beans dans un fichier XML Evolution majeure avec la version 2.0 (2 juin 2006) Simplification de la syntaxe des fichiers de configuration Compatibilité poussée avec AspectJ Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 15

2.3. Spring AOP : Présentation Fonctionnalités limitées Weaving dynamique Pas de compilateur spécifique Implémentation par des Proxy dynamiques Adoption optionnelle de la syntaxe AspectJ Plugin Eclipse «léger» Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 16

2.3. Spring : Exemple 3 Spring AOP Aspect implements MethodBeforeAdvice (listing 8) Méthode de test (listing 9) Configuration des beans dans loggingaspectbase.xml (listing 10) Utilisation de CGLIB Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 17

2.3. Spring : Exemple 4 Spring/AspectJ Aspect par annotations (cf exemple 1) Configuration du weaver <!DOCTYPE aspectj PUBLIC " //AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"> <aspectj> <weaver> <include within="ch.unifr.aop.dynamic.. "/> </weaver> <aspects> <aspect name="ch.unifr.aop.dynamic.traceaspectv1annotations"/> </aspects> </aspectj> Configuration des beans dans loggingaspect.xml (listing 12) Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 18

Plan 1. Introduction 2. Présentation des outils 1. AspectWerkz 2. AspectJ 3. Spring 4. Jboss AOP 3. Comparaison 4. Conclusion Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 19

2.4. Jboss AOP : Présentation Présentation de Jboss AOP Jboss AOP Jboss AS Standalone Intégré à Jboss AS Conforme au langage Java Jboss fournit des aspects prédéfinis Gestion d'un cache Sécurité Transactions etc. Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 20

2.4. Jboss AOP : Implémentation des aspects Pointcuts Expression : [access] [static] ReturnType Class->method([args]) Jokers : *,.. Sous types de classe: instanceof() Modificateur :! Composition des advices!, AND, OR, (, ) Déclaration jboss-aop.xml Annotations java (dans l'expr. aussi) Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 21

2.4. Jboss AOP : Implémentation des aspects Advices Aspect = classe java Advice = méthode java Pas d'interface ou de classe abstraite! 1 argument de type Invocation Throws Throwable Retourne une instance d'object return invocation.invokenext(); Un seul type d'advice: around Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 22

2.4. Jboss AOP : Implémentation des aspects Contexte du join point On ne déclare pas les attributs du join point dans le pointcut On procède par casting des objets accessibles au travers de l'argument Invocation de l'advice Selon le pointcut, l'argument de l'advice peut être une classe fille de Invocation MethodInvocation FieldInvocation... Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 23

2.4. Jboss AOP : Autres possibilités Introduction Forcer une classe à implémenter une interface <introduction expr="has(* *->additem(..)) OR class(someclass.*)"> <interfaces>java.io.serializable</interfaces> </introduction> Mixin Idem + introduction du code implémentant l'interface <introduction class="shoppingcart"> <interface>getnameinterface</interface> <class>shoppingcartmixin</class> <construction>new ShoppingCartMixin(this)</construction> </introduction> Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 24

2.4. Jboss AOP : Autres possibilités cflow stack «équivalent» des advices de contrôle de flux Un cflow stack définit une suite d'appels <cflow-stack name="recursive"> <called expr="void MaClasse->UneMethode(..)"/> <called expr="void MaClasse->UneMethode(..)"/> <not-called expr="void MaClasse->UneMethode(..)"/> </cflow-stack> Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 25

2.4. Jboss AOP : Hot deployment Ajout et suppression d'advices durant l'exécution Dans le cadre de Jboss AS, il suffit de modifier le fichier de configuration des aspects pour modifier le comportement du programme AdviceBinding b = new AdviceBinding("execution(ShoppingCart->*(..))", null); b.addinterceptor(traceinterceptor.class); AspectManager.instance().addBinding(b); Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 26

2.4. Jboss AOP : Compilation & exécution Le weaving peut se faire selon 3 modes Lors de la précompilation Lors du chargement Lors de l'exécution Javassist Abstraction du bytecode dans une structure de données API pour manipuler le bytecode Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 27

2.4. Jboss AOP : weaving weaving Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 28

2.4. Jboss AOP : weaving Le code source de ShoppingCartOperator passe de 15 à 311 lignes! Délégation des créations d'instances, des appels de méthodes et des accès aux champs Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 29

2.4. Jboss AOP : IDE Plugin Eclipse Jboss IDE Assistant pour la création de pointcuts AspectManager view Gestion des entités définies dans jboss aop.xml Advised members view Affiche les membres «advisés» de la classe courante Ne supporte pas les annotations Instable Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 30

Plan 1. Introduction 2. Présentation des outils 1. AspectWerkz 2. AspectJ 3. Spring 4. Jboss AOP 3. Comparaison 4. Conclusion Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 31

3. Comparaison: mise en oeuvre des aspects A l'origine, ce qui différentiait les outils était la mise en oeuvre des aspects: 1. Code 2. XML 3. Annotations Déclaration des pointcuts et des advices Ensemble (1 & 3) Séparément (2 (& 1)) Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 32

3. Comparaison: mise en oeuvre (suite...) Validation statique Support de l'ide Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 33

3. Comparaison: mise en oeuvre des aspects Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 34

3. Comparaison: fonctionnalités Les trois outils étudiés partagent les même principes Join point, pointcut, advice, injection Les expressions de matching des pointcuts sont très similaires AspectJ permet une définition très précise du join point Permet le pointcut if Permet la définition du contexte Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 35

3. Comparaison: fonctionnalités Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 36

3. Comparaison: fonctionnalités Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 37

3. Comparaison: weaving Compile time AspectJ Jboss AOP Load time AspectJ Jboss AOP Spring AOP Run time Jboss AOP Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 38

3. Comparaison: support des IDE AspectJ Plugin officiel pour Eclipse Bon support, vérification statique, autocomplétion, etc. Certaines fonctionnalités d'eclipse ne sont pas supportées (ex: refactoring) Jboss AOP Plugin officiel pour Eclipse Support limité, uniquement XML (pas de support des annotations) Spring AOP Plugin officiel du framework Spring pour Eclipse Pas d'assistance pour la création des aspects Editeur XML pour la définition des joinpoints Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 39

Plan 1. Introduction 2. Présentation des outils 1. AspectWerkz 2. AspectJ 3. Spring 4. Jboss AOP 3. Comparaison 4. Conclusion Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 40

4. Conclusion Il y a eu un nivellement vers le haut des outils. On va plutôt choisir l'un ou l'autre en fonction des technologies qui entourent les outils: Jboss AS pour Jboss AOP Spring pour Spring AOP AspectJ est probablement l'implémentation d'aop la plus puriste et la plus aboutie. Elle est supportée par une communauté d'une certaine taille. Jboss AOP nécessite plus de bricolage, mais propose plus ou moins les mêmes fonctionnalités. Spring AOP est intéressant dans le cadre du framework Spring. Université de Fribourg, juin 2006 Fabrice Bodmer & Timothée Maret 41