Master 1 d'Informatique - Option MAD (Middleware et Applications aDaptables) - Université
Grenoble I - UFR IMA
Aspect-Oriented Programming / AspectJ
Enseignant : Sara Bouchenak, Sara.Bouchenak@imag.fr
Page de l'option MAD :
http://sardes.inrialpes.fr/~bouchena/teaching/MAD/
TP 1 : Initiation à AspectJ
- Objectif
- Environnement logiciel
- Etapes du TP
(a) Exemple Hello
(b) Manipulation de pointcuts
(c) Manipulation de
déclarations
(d) Manipulation d'introductions
(e) Pointcut cflow / cflowbelow
(f) Passage de
contexte entre poincut et advice
(g)
Manipulation de thisJoinPoint et thisJoinPointStaticPart
(h) Autres pointcuts
Mettre en pratique les concepts de l'AOP et d'AspectJ vus en cours.
Initiation à AspectJ à travers :
- la programmation d'aspects pour la maîtrise de la syntaxe AspectJ
- l'utilisation d'outils de compilation et de manipulation/édition
d'aspects (ant, ajc, ajbrowser)
Les logiciels suivants sont nécessaires au TP ; les installer s'ils ne sont
pas disponibles dans votre environnement.
Logiciels
Les logiciels nécessaires au TP sont également disponibles dans ~sbouchen/ENS/MAD/AOP/Soft/
Variables d'environnement
Définir les variables d'environnement suivantes :
Exemple de fichier de commandes pour Unix/tcsh env-tcsh (soit ajouter ces commandes à votre fichier
~/.cshrc, soit exécuter la commande source env-tcsh).
Exemple de fichier de commandes pour Windows env-win.bat (exécuter la commande env-win.bat).
Ces fichiers sont disponibles dans ~sbouchen/ENS/MAD/AOP/Soft/
Base logicielle
Copier le répertoire ~sbouchen/ENS/MAD/AOP/Project/Examples/ dans votre
arborescence de travail.
Tester l'exemple fourni dans Project/Examples/Hello :
- Exécution de l'application d'origine :
- compilation (commande ant compile)
- exécution (commande ant run)
- Exécution de l'application étendue avec un aspect :
- compilation (commande ant compile_aj)
- exécution (commande ant run_aj)
Récupérer l'exemple qui est fourni dans Project/Examples/Tests :
- Compiler et tester les pointcuts et advices fournis ; ceux-ci capturent
les appels de
méthodes (pointcut de type call) de l'application Hello et
insèrent un affichage de message avant (advice before), autour (advice
around) et après (advice after) les appels de méthodes.
Voir le code AspectJ fourni dans le répertoire aspects.
- Ecrire de nouveaux aspect/pointcut relatifs à :
- l'exécution de constructeurs
- et ceci en appliquant un advice de type after.
- Compiler l'aspect. Pour cela, modifier le script ant (fichier build.xml)
pour générer un fichier d'archive .jar par type de pointcut (appel
de méthodes, exécution de constructeurs, etc.)
- Tester l'aspect en utilisant l'exemple Hello précédent auquel
vous ajouterez un constructeur et l'appel à ce constructeur (pour mettre en
évidence l'utilisation du nouvel aspect).
Etendre l'exemple fourni dans Project/Examples/Tests comme suit :
- Ecrire de nouveaux aspects pour :
- la déclaration de messages d'erreur affichés lors de la compilation
- la déclaration de messages d'avertissement affichés lors de la
compilation (si pas déjà fait).
- Etendre l'exemple Hello pour mettre en évidence l'utilisation des
nouveaux aspects.
- Tester les nouveaux aspects.
Etendre l'exemple fourni dans Project/Examples/Tests comme suit :
- Ecrire de nouveaux aspects pour :
- l'introduction de nouveaux attributs aux classes
- l'introduction de nouvelles méthodes
- la modification de la hiérarchie des classes.
- Etendre l'exemple Hello pour mettre en évidence l'utilisation des
nouveaux aspects.
- Tester les nouveaux aspects.
Etendre l'exemple fourni dans Project/Examples/Tests comme suit :
- Ecrire de nouveaux aspects utilisant :
- le pointcut cflow pour l'appel de la méthode main
- le poincut cflowbelow pour l'exécution de la méthode main.
- Etendre, si nécessaire, l'exemple Hello pour mettre en évidence
l'utilisation des nouveaux aspects.
- Tester les nouveaux aspects.
Etendre l'exemple fourni dans Project/Examples/Tests comme suit :
- Ecrire de nouveaux aspects pour faire afficher :
- la signature du join point (méthode ou constructeur),
- les paramètres de l'appel,
- l'objet sur lequel porte l'appel
- le résultat de l'appel
- l'exception levée par l'appel.
- Etendre, si nécessaire, l'exemple Hello pour mettre en évidence
l'utilisation des nouveaux aspects.
- Tester les nouveaux aspects.
Etudier les interfaces JoinPoint et JoinPoint.StaticPart (voir l'API
d'AspectJ)
Etendre l'exemple fourni dans Project/Examples/Tests comme suit :
- Ecrire de nouveaux aspects pour faire afficher différentes informations
sur le join point.
- Etendre, si nécessaire, l'exemple Hello pour mettre en évidence
l'utilisation des nouveaux aspects.
- Tester les nouveaux aspects.
Récupérer l'exemple qui est fourni dans Project/Examples/Tests :
- Compiler et tester les pointcuts et advices fournis ; ceux-ci capturent
les appels de
méthodes (pointcut de type call) de l'application Hello et
insèrent un affichage de message avant (advice before), autour (advice
around) et après (advice after) les appels de méthodes.
Voir le code AspectJ fourni dans le répertoire aspects.
- Ecrire de nouveaux aspects, des pointcuts relatifs à :
- l'exécution de méthodes
- l'appel de constructeurs
- l'initialisation de classes
- l'accès à un attribut en lecture
- l'accès à un attribut en écriture
- l'accès aux traitants d'exceptions
- et ceci en appliquant des advices de types before, after et around.
- Compiler les aspects. Pour cela, modifier le script ant (fichier build.xml)
pour générer un fichier d'archive .jar par type de pointcut (appel
de méthodes, exécution de méthodes, appel de constructeurs, etc.)
- Tester les aspects en utilisant l'exemple Hello précédent auquel
vous apporterez les modifications nécessaires pour mettre en évidence
l'utilisation des nouveaux aspects.