Architectures Logicielles - Polytech`Lille, page Olivier Caron

publicité
Architectures Logicielles
Olivier Caron
Polytech Lille
Programmation par aspects
Aspect-Oriented Programming
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
1 / 18
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
2 / 18
Programmation orienté aspects
Une nouvelle manière de programmer
Nouveau découpage d’une application : un programme + aspects
Réutiliser des aspects pour d’autres applications : vers des
composants d’aspects
Pallier au problèmes de fonctions transverses
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
3 / 18
Programmation orienté aspects
Une nouvelle manière de programmer
Nouveau découpage d’une application : un programme + aspects
Réutiliser des aspects pour d’autres applications : vers des
composants d’aspects
Pallier au problèmes de fonctions transverses
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
3 / 18
Programmation orienté aspects
Une nouvelle manière de programmer
Nouveau découpage d’une application : un programme + aspects
Réutiliser des aspects pour d’autres applications : vers des
composants d’aspects
Pallier au problèmes de fonctions transverses
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
3 / 18
Programmation orienté aspects
Une nouvelle manière de programmer
Nouveau découpage d’une application : un programme + aspects
Réutiliser des aspects pour d’autres applications : vers des
composants d’aspects
Pallier au problèmes de fonctions transverses
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
3 / 18
Exemple : serveur Tomcat et Parsing (1/3)
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
4 / 18
Exemple : serveur tomcat et Pattern Matching (2/3)
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
5 / 18
Exemple : serveur tomcat et Logging (3/3)
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
6 / 18
Approche AOP
disposer d’un langage d’aspect
définir les points de jonction
Réaliser le tissage des aspects sur l’application (weaver)
Java Code
Aspects
...
Points de coupe
...
Weaver
Byte Code
Compiler
Olivier Caron (Polytech Lille)
...
Architectures Logicielles
AOP
7 / 18
Approche AOP
disposer d’un langage d’aspect
définir les points de jonction
Réaliser le tissage des aspects sur l’application (weaver)
Java Code
Aspects
...
Points de coupe
...
Weaver
Byte Code
Compiler
Olivier Caron (Polytech Lille)
...
Architectures Logicielles
AOP
7 / 18
Approche AOP
disposer d’un langage d’aspect
définir les points de jonction
Réaliser le tissage des aspects sur l’application (weaver)
Java Code
Aspects
...
Points de coupe
...
Weaver
Byte Code
Compiler
Olivier Caron (Polytech Lille)
...
Architectures Logicielles
AOP
7 / 18
Aspect J et JBoss AOP
www.eclipse.org/aspectj (Xerox Lab puis IBM eclipse)
Utilisation du langage Java
Origine : compilateur statique java (Xerox) dynamique (IBM)
Autre implémentation AOP : projet JBoss AOP
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
8 / 18
Aspect J et JBoss AOP
www.eclipse.org/aspectj (Xerox Lab puis IBM eclipse)
Utilisation du langage Java
Origine : compilateur statique java (Xerox) dynamique (IBM)
Autre implémentation AOP : projet JBoss AOP
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
8 / 18
Aspect J et JBoss AOP
www.eclipse.org/aspectj (Xerox Lab puis IBM eclipse)
Utilisation du langage Java
Origine : compilateur statique java (Xerox) dynamique (IBM)
Autre implémentation AOP : projet JBoss AOP
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
8 / 18
Aspect J et JBoss AOP
www.eclipse.org/aspectj (Xerox Lab puis IBM eclipse)
Utilisation du langage Java
Origine : compilateur statique java (Xerox) dynamique (IBM)
Autre implémentation AOP : projet JBoss AOP
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
8 / 18
JBoss AOP by example : programme principal
public class Main {
public s t a t i c void main ( S t r i n g args [ ] ) {
Compte c = new Compte ( ) ;
c . s e t I d ( " Dupont " ) ;
c . setSolde (200) ;
System . o u t . p r i n t l n ( c ) ;
}
}
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
9 / 18
JBoss AOP by example : classe Compte
public class Compte {
p r i v a t e S t r i n g i d ; p r i v a t e double s o l d e ;
public Compte ( ) { }
public S t r i n g g e t I d ( ) { r e t u r n t h i s . i d ; }
public void s e t I d ( S t r i n g v a l u e ) {
this . i d =value ;
}
public double getSolde ( ) { r e t u r n t h i s . s o l d e ; }
public void s e t S o l d e ( double v a l u e ) {
this . solde=value ;
}
public S t r i n g t o S t r i n g ( ) {
r e t u r n " compte de " + t h i s . i d + " : " + t h i s . s o l d e ;
}
}
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
10 / 18
JBoss AOP by example : aspect-Interceptor
package org . j b o s s . aop . a d v i c e ;
import org . j b o s s . aop . j o i n p o i n t . I n v o c a t i o n ;
public i n t e r f a c e I n t e r c e p t o r {
public S t r i n g getName ( ) ;
public O b j e c t i n v o k e ( I n v o c a t i o n i n v o c a t i o n )
throws Throwable ;
}
}
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
11 / 18
JBoss AOP by example : point de coupe
fichier de coupe : jboss-aop.xml
<?xml v e r s i o n = " 1 . 0 " encoding= "UTF−8" ?>
<aop>
< b i n d p o i n t c u t = " e x e c u t i o n ( p u b l i c ∗ Compte − > ∗ ( . . ) ) " >
< i n t e r c e p t o r class= " demoAspect . DemoTrace " / >
</ bind >
</ aop>
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
12 / 18
JBoss AOP by example : DemoInterceptor (1/2)
package demoAspect ;
import org . j b o s s . aop . j o i n p o i n t . I n v o c a t i o n ;
import org . j b o s s . aop . j o i n p o i n t . Me tho dI nv oca ti on ;
import org . j b o s s . aop . a d v i c e . I n t e r c e p t o r ;
public class DemoTrace implements I n t e r c e p t o r
{
public S t r i n g getName ( ) { r e t u r n " DemoTrace " ; }
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
13 / 18
JBoss AOP by example : DemoInterceptor (2/2)
public O b j e c t i n v o k e ( I n v o c a t i o n i n v o c a t i o n )
throws Throwable {
S t r i n g nomMethode= " " ;
try {
Me t h o d I n v o c a t i on mi = ( M eth od Inv oc at ion ) i n v o c a t i o n ;
nomMethode = mi . getMethod ( ) . getName ( ) ;
System . o u t . p r i n t l n ( " I n t e r c e p t i o n de : " + nomMethode ) ;
r e t u r n i n v o c a t i o n . invokeNext ( ) ;
} finally {
System . o u t . p r i n t l n ( " Q u i t t e r : " +nomMethode ) ;
}
}
}
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
14 / 18
JBoss AOP by example : exécution
runWithoutAOP :
[ j a v a ] compte de Dupont : 200.0
runWithAOP :
[ j a v a ] I n t e r c e p t i o n de : s e t I d
[ java ] Q u i t t e r : setId
[ j a v a ] I n t e r c e p t i o n de : s e t S o l d e
[ java ] Q u i t t e r : setSolde
[ j a v a ] I n t e r c e p t i o n de : t o S t r i n g
[ java ] Q u i t t e r : t o S t r i n g
[ j a v a ] compte de Dupont : 200.0
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
15 / 18
Exemple AOP et sécurité
public O b j e c t i n v o k e ( I n v o c a t i o n i n v o c a t i o n )
throws Throwable {
S t r i n g nomMethode= " " ;
try {
Me t h o d I n v o c a t i on mi = ( M eth od Inv oc at ion ) i n v o c a t i o n ;
nomMethode = mi . getMethod ( ) . getName ( ) ;
System . o u t . p r i n t l n ( " I n t e r c e p t i o n de : " + nomMethode ) ;
System . o u t . p r i n t l n ( " Permission Denied " ) ;
return " " ;
/ / r e t u r n i n v o c a t i o n . invokeNext ( ) ;
/ / i c i , pas d ’ appel à l a méthode i n t e r c e p t é e
} finally {
System . o u t . p r i n t l n ( " Q u i t t e r : " +nomMethode ) ;
}
}
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
16 / 18
JBoss AOP
Langage de points de coupe :
expressions rationnelles, attributs, flot d’exécution,. . .
interception de méthodes annotées (utile JEE)
Exemple : (* *->@UneAnnotation(..))
Des aspects réutilisables : exemple aspect de trace d’exécution.
JBoss Application Server :
Architecture interne AOP
Persistance, transaction, sécurité sont des aspects
Possibilité d’ajouter de nouveaux aspects !
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
17 / 18
I never finish anyth
Olivier Caron (Polytech Lille)
Architectures Logicielles
AOP
18 / 18
Téléchargement