Favorisez la modularité, la réutilisabilité et la maintenance de vos applications avec AspectJ. Libérez-vous du codage ‘en dur’ de traces dans vos classes. Eliminez tout code ‘System.out.println’ ou ‘log4j’ dans vos classes applicatives. Mettez en œuvre AspectJ en créant un premier ‘aspect’ LOG. Utilisez le compilateur ajc pour compiler aussi bien des fichier java (.java) que des fichiers AspectJ (.aj) et réaliser un tissage. Interceptez la construction d’un objet, le changement d’état d’une variable ou le lancement d’une exception. Analysez des exemples de point de jonction (JoinPoint), coupes (pointcut), greffon (advice) AspectJ
Ce tutoriel est offert par Objis, spécialiste de la formation Java. Il est extrait des séances de la formation Architecture JEE.
Les + objis
70% de travaux pratiques
Clé USB avec tous les outils utilisés + Corrigés TPs
Bilan pédagogique individuel + conseils
Liens utiles
+ de 100 tutoriaux java/j2ee Objis
Tutoriel et formation AspectJ
Objis, spécialiste formation Java depuis 2005
Tutoriel struts 1 N°5 : mise en oeuvre de logs avec Log4j / AspectJ
Site de l’environnement de développement AspectJ
Site documentation programmation AspectJ
Javadoc AspectJ
Liste de frameworks POA en Java
Prérequis
Tutoriel Java N°1 : installation JDK
Tutoriel AspectJ N°1 : installation kit de développement AspectJ (AJDK)
Objectifs
Créer et mettre en œuvre un aspect de LOG
Comprendre le lien entre le compilateur aspectJ (ajc) et le compilateur Java (javac).
Déclarer un aspect, une coupe, un point de jonction avec AspectJ
Comprendre la valeur ajoutée de la programmation Aspects
Formation Architecture Java
Soyez prêt pour des projets ambitieux : formation architecture Java Objis
Programme
Contexte :application bancaire
Partie 1 : tracer les retraits d’argent sans aspectJ.
Partie 2 : tracer les retraits d’argent avec un aspect AspectJ de log : LogAspect.aj
Partie 3 : Nouvelle version de l’aspect de LOG.
Partie 4 : Mise en œuvre d’un profiling
Durée
40 min.
Qui sommes-nous ?
Contexte
Dans le cadre d’un projet d’envergure pour un établissement financier de la place, vous devez tracer les opérations de retrait d’argent de tout compte bancaire. Vous devez être capable de tracer l’état du compte AVANT le retrait et l’état du compte APRES le retrait.
Partie 1 : tracer sans aspectJ.
Fichiers à créer
Créez un fichier CompteBancaire.java qui sera la classe métier représentant un compte bancaire. Ajoutez une propriété solde ainsi que getter/setter puis constructeur. Ajoutez enfin les méthodes de retrait et dépot.
Créez un fichier Main.java qui sera la classe principale de l’application (il contiendra la méthode main()). Elle va instancier un compte Bancaire et réaliser une opération de retrait.
REMARQUE : sur les 4 étapes ci-dessus, :
— 2 étapes ne concernent pas directement le ‘métier’. En effet les étapes 2 et 4 sont liées à une préoccupation ‘technique’ : celle de tracer un évènement (ici le retrait).
— 2 étapes concernent le métier. En effet les étapes 1 et 3 sont liées à des préocupation directement liées au métier bancaire : créer un compte et effectuer un retrait.
INFO : Le ’tisseur d’aspects’ AspectJ va nous permettre par la suite d’isoler cette préocupation technique dans un fichier distinct : le fichier LogAspectj.aj qui représente l’aspect LOG.
Compilez les classes avec le compilateur javac (issu du kit de développement Java).
Vous obtenez ceci.
Rangez les classes générés (Main.class et CompteBancaire.class) respectivement dans les répertoire com/objis/demoaspectj/ et com/objis/demoaspectj/banque .
Lancez l’éxécution de la classe principale : Main
Nous obtenons bien les traces qui précèdent et suivent l’appel à la méthode retrait().
Pour cela nous avons du écrire ‘en dur’ dans la classe cliente les lignes suivantes :
System.out.println(« AVANT le retrait »);
System.out.println(« APRES le retrait »);
Nous aurions également pu écrire ces ligne dans la méthode retrait() de la classe appelée (CompteBancaire).
Et s’il était possible d’afficher les mêmes traces sans écrire ces lignes ni dans la classe appelante (ici Main), ni dans la classe appelée ?
C’est là qu’intervient un tisseur d’aspect comme AspectJ.
Partie 2 : tracer avec aspectJ
Dans cette partie vous allez mettre le tisseur d’aspect AspectJ en action. Vous allez supprimer tout code de Log dans vos classes et centraliser la gestion des logs dans un aspect aspectJ : LogAspect.aj
Vous allez utiliser le compilateur ajc (surcouche du compilateur javac) pour compiler aussi bien l’aspect LogAspect.aj que les classes Main.java et CompteBancaire.java.
Modifiez le contenu de la classe Main de la façon suivante :
Comme vous le constatez, il n’y a aucune ligne associée au Log . C’est un aspect LogAspect.aj que nous allons créer qui va ‘intercepter‘ toute demande de retrait.
Créez un fichier LogAspect.aj et ajoutez le contenu suivant :
Explication
— 1 : vous déclarez un aspect à travers le mot clé ‘aspect’. Ici l’aspect LogAspect.
— 2 : vous déclarez une coupe nommée logRetrait() à travers le mot clé ‘pointcut’. Une coupe est un ensemble de point de jonction (Moments d’exécution où il se passe qqchse qui vous interesse. C’est l’équivalent de point d’arrêt lors d’un débogage)
— 3 : vous déclarez l’ensemble des points de jonction. Ici toute méthode retrait() de la classe com.objis.demoaspectj.banque.CompteBancaire, quelque soit le nombre de paramètre de la méthode retrait (..) et quelque soit le type de retour (*) de la méthode retrait().
— 4 : vous déclarez un greffon type before() : le code System.out.println(« AVANT le retrait »); sera lancé juste avant tout point de jonction (càd ici toute exécution de la méthode retrait())
— 5 : vous déclarez un greffon type after() : le code System.out.println(« APRES le retrait »); sera lancé juste après tout point de jonction (càd ici toute exécution de la méthode retrait())
ça y est : vous avez codé votre premier aspect 100% aspectJ. Reste à la compiler.
Compiler l’ensemble des classes Main.java, CompteBancaire.java et LogAspect.aj en utilisant le compilateur ajc (aspectj compiler) installé dans le Tutoriel AspectJ N°1 : installation kit de développement AspectJ (AJDK):
Vous obtenez ceci :
Rangez les classes générés (Main.class, CompteBancaire.class et LogAspectj.class) respectivement dans les répertoire com/objis/demoaspectj/ , com/objis/demoaspectj/banque et com/objis/demoaspectj/aspects.
REMARQUE : la commande suivante crée pour vous l’arborescence :
ajc -d . Main.java CompteBancaire.java LogAspect.aj
Créez un répertoire ‘lib’ et ajoutez le jar aspectjrt présent dans ASPECTJ_HOMElib . L’aspect aura besoin de ce jar à l’exécution.
Lancez l’exécution de la classe Main :
Le résultat est le même que dans la partie 1. Mais le code de notre classe principale est plus léger. Nous nous sommes concentré sur le métier et non sur une préoccupation de log.
Corrigés
Corrigé tutoriel aspectJ N°2 Objis, spécialiste formation java
Partie 3 : deuxième version de l’aspect
Expliquez l’effet de l’aspect suivant :
Analysez le résultat :
Vous découvrez ici une technique permettant de passer à un greffon le contexte d’exécution du point de jonction.
Log constructeur
Expliquez l’effet du code suivant :
Ajoutez ce code à l’aspect.
Exécutez.
Partie 3 : Aspect Profiling
Analysez le code suivant
A quoi sert cet aspect ?
Ou est la coupe ?
Combien y a t’il de greffon ? de quel type ?
Comprendre thisJoinPointStaticPart
REMARQUE : la variable thisJoinPointStaticPart est une des 3 variables disponibles dans chaque greffon.
Cette variable apporte des informations à propos du point de jonction courant.
Exemple d’info :
— signature de la méthode,
— l’objet this,
— les arguments de la méthode.
Mise en oeuvre
A VOUS DE JOUER : utilisez le compilateur ajc pour compiler cet aspect avec le programme principal.
Résultat attendu
Expliquez
Conclusion
Dans ce tutoriel, vous avez mis en oeuvre AspectJ à travers la création d’un aspect LogAspect.aj
Formation Architecture Java
Soyez prêt pour des projets ambitieux : formation architecture Java Objis