Tutoriel AspectJ N°2 : création aspect LOG aspectJ

////Tutoriel AspectJ N°2 : création aspect LOG aspectJ

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-detaille-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 ?

presentation-objis-conseil-formation-java-soa2.png

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

tutoriel2_aspectj_objis_creation_aspect_log_1.png

 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.

tutoriel_aspectj_objis_creation_aspect_log_1ter.png

 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.

tutoriel_aspectj_objis_creation_aspect_log_1bis.png

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).

tutoriel2_aspectj_objis_creation_aspect_log_2.png

 Vous obtenez ceci.

tutoriel2_aspectj_objis_creation_aspect_log_3.png

 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 .

tutoriel2_aspectj_objis_creation_aspect_log_4.png

 Lancez l’éxécution de la classe principale : Main

tutoriel2_aspectj_objis_creation_aspect_log_5.png

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 :
tutoriel2_aspectj_objis_creation_aspect_log_9.png

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.

tutoriel_tissage_aspect_avec_aspectj.png

 Créez un fichier LogAspect.aj et ajoutez le contenu suivant :

tutoriel_aspectj_objis_aspect_log_aspectj.png

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):

tutoriel2_aspectj_objis_creation_aspect_log_7.png

Vous obtenez ceci :

tutoriel2_aspectj_objis_creation_aspect_log_7ter.png

 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.

tutoriel2_aspectj_objis_creation_aspect_log_7bis.png

 Lancez l’exécution de la classe Main :

tutoriel2_aspectj_objis_creation_aspect_log_8.png

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 :

tutoriel-aspectj-objis-aspect-log-passage-context-pointcut-advice

 Analysez le résultat :

tutoriel-aspectj-objis-aspect-log-passage-context-pointcut-advice-2

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 :

tutoriel-aspectj-objis-aspect-log-interception-constructeur

 Ajoutez ce code à l’aspect.

 Exécutez.

Partie 3 : Aspect Profiling

 Analysez le code suivant

tutoriel-aspectj-objis-aspect-profiling-proceed-thisJoinPointStaticPart

 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

tutoriel-aspectj-objis-aspect-profiling-proceed-thisJoinPointStaticPart-1

 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

programme-detaille-formation-architecture-java-objis

2018-01-27T16:17:39+01:00

Contactez nous

241 rue DUGUESCLIN, 69003 Lyon

Web : Objis : spécialiste formation Java