Implanter	  lAOP...	  	  Comment	  par2r	  du	  bon	  pied?	                 Confoo	  2012	         Montréal,	  Québec,	  ...
Félix-­‐Antoine	  Bourbonnais	  	  Ing.	  jr,	  PSM-­‐I	  !   Formateur	  et	  Coach	  Agile	  !   Enseignement	  et	  for...
Objec2f	  de	  la	  présenta2on	  Image: jscreationzs / FreeDigitalPhotos.net   3
Réchauffement…	                                          Quelles	  sont	  vos	  aWentes?	                                  ...
Les	  PRÉOCCUPATIONS	  TRANSVERSES	                            5
Préoccupa2ons	  transverses	  Angl.: Crosscutting concerns.     Certaines	  préoccupa2ons	  secondaires	  sont	        imp...
Préoccupa2ons	  transverses	                                  Enchevêtrement	              Éparpillement	                 ...
Préoccupa2ons	  transverses	  Enchevêtrement	  (cohésion)	                                     Fonc2onnalité	             ...
                                                                                                      Enchevêtrement	 ...
Enchevêtrement	  (2)	                              10
Enchevêtrement	  (3)	                              11
Enchevêtrement	  (4)	                              12
Enchevêtrement	  (principale)	                       13
Enchevêtrement	  (récapitula2f)	                       14
Préoccupa2ons	  transverses	  Éparpillement	  (dispersion)	                      Persistance	                             ...
Introduc2on	  à	  L’AOP	                         16
Orienta2on	  objet	  et	  préoccupa2ons	                                     Encapsula2on	            Cohésion	           ...
Orienta2on	  objet	  et	  préoccupa2ons	       Théoriquement,	  chaque	  classe	  devrait	       représenter	  une	  seule...
Orienta2on	  aspect	                             C	                                              A                        ...
Rappel	  rapide	  de	  LA	  TERMINOLOGIE	  ET	  DU	  FONCTIONNEMENT	                                       20
Un	  aspect	  !   Un	  module	  encapsulant	  une	  préoccupa2on	  !   Peu	  gérer	  les	  préoccupa2ons	  transverses	  !...
Contenu	  typique	  d’un	  aspect	    Code	  à	       Indica2on	                                               Aspect	   e...
Aspect	  en	  AspectJ	  public aspect VisitorAspect {          !!        /∗ −−−−−−−− Pointcuts −−−−−−−− ∗/ !  protected po...
Pourquoi	  est-­‐ce	  que	  L’AOP	  N’A	  PAS	  AUTANT	  RAYONNÉ	  QUE	  PRÉVU?	                                    24
Pourquoi	  est-­‐ce	  que	  plusieurs	  entreprises	  délaissent	  l’AOP?	       Mauvaises	  raisons	  et	  u2lisa2ons	   ...
Aspect	  !=	  AOP	  Image: Danilo Rizzuti / FreeDigitalPhotos.net   26
Enquête	  auprès	  de	  débutants	  (2009)	  !   Pas	  plus	  difficile	  à	  apprendre	  que	  l’OO	  (74%)	  !   Il	  est	...
Enquête	  auprès	  de	  débutants	  (2009)	  Cri2que	  de	  la	  validité	  !   Le	  contexte	       o  Étudiants	  de	  b...
Comment	  INTRODUIRE	  DE	  L’AOP	  DANS	  VOTRE	  PROJET	                                    29
1.	  Avoir	  un	  but…	  Image: renjith krishnan / FreeDigitalPhotos.net   30
2.	  Choisir	  sa	  technologie	  Image: Sura Nualpradid / FreeDigitalPhotos.net   31
Choix	  technologiques	  !   Tisseur	  /	  cadre	  applica2f	  (framework)	      o  Compilateur	  spécial	      o  Pur	  j...
Choix	  technologiques	  !   Syntaxe	      o  Java	      o  AspectJ	  Language	  (.aj)	      o  @AspectJ	      o  XML	  ! ...
3.	  Considérer	  la	  complexité	  ajoutée	                                 Gains	          Complexité	                  ...
4.	  Considérer	  l’intégra2on	  !   Avec	  d’autres	  cadres	      applica2fs	  (framework)	  !   Le	  système	  de	     ...
5.	  S’assurer	  de	  maîtriser	  les	  concepts	  Rappelez-­‐vous	  que	  vous	  introduisez	  un	  nouveau	      paradig...
6.	  Se	  discipliner	  !   Résistez	  au	  «	  canon	  	  pour	  tuer	  une	  mouche	  »	  !   L’AO	  tourne	  généraleme...
Quelques	      MAUVAISES	  PRATIQUES	  Image: Ambro/ FreeDigitalPhotos.net   38
Trop,	  c’est	  comme	  pas	  assez…	  !   Quand	  50%	  du	  code	  est	      composé	  d’aspects…	      	  !   Est-­‐ce	...
L’AOP	  n’est	  pas	  un	  pansement	  !   Suis-­‐je	  en	  train	  d’u2liser	      l’AOP	  pour	  corriger	  un	      pro...
Le	  «	  trip	  techno	  »	                             L’AOP	  c’est	  trop	  COOL	  !!	           La	  chute	  pourrait	...
Quelques	      BONNES	  PRATIQUES	  Image: photostock / FreeDigitalPhotos.net   42
OO	  encore	  d’actualité	     Ce	  qui	  était	  vrai	  en	  OO	  l’est	  encore	  en	  AO	                              ...
Conseils	  de	  base	  habituels	  !   Code	  propre	  !   Cohésion	  dans	  l’aspect	  !   Couplage	  de	  l’aspect	     ...
Un	  aspect?	  Vraiment?	         Est-­‐ce	  une	  préoccupa2on	  transverse?	                                     	   Est...
U2liser	  l’aspect	  comme	  «	  lien	  »	  !   Déléguer	  à	  une	  classe	  qui	  con2ent	  la	  logique	  liée	  à	  ce...
Dépendances	  et	  couplage	                                                   !   N’oubliez	  pas	  que	                 ...
Limiter	  le	  couplage	   Un	  aspect	  trop	  fortement	  couplé	  et	  ayant	  des	  dépendances	  éloignées	  augmente...
Précision	  du	  point	  de	  coupure	  !   Un	  PC	  précis	  est	  plus	  à	  risque	  d’être	  impacté	  par	  un	     ...
Conscience	  ou	  inconscience?	    Est-­‐ce	  que	  les	  classes	  2ssées	  devraient	  avoir	             conscience	  ...
Bonnes	  pra2ques	  de	  TESTS	  D’ASPECTS	                                 51
Tests	  de	  haut	  niveau	     Les	  aspects	  contribuent	  aux	  fonc2onnalités	                     globales	  du	  sy...
Tests	  unitaires	                           53
Tester	  unitairement	  un	  aspect	          La	  bonne	            chose	            (advice)	                          ...
Technique	  du	  pot	  de	  miel	                                                                                        ...
                                                                                                      ...
Encore	  faim?	                                  hWps://joind.in/6005	          Téléchargez	  les	  diaposi2ves	  complète...
Période	  de	  QUESTIONS	                      58
Choisir	  son	  CADRE	  APPLICATIF	  (FRAMEWORK)	                               59
Quelques	  cadres	  pour	  Java	  ! AspectJ	  ! Spring-­‐AOP	  ! Guice-­‐AOP	  !   …	                                     ...
AspectJ	  !   Le	  plus	  complet	      o  Plusieurs	  primi2ves	      o  Plusieurs	  PJ	  possibles	  !   Extension	  à	 ...
Spring	  supporte	  deux	  2sseurs	                   Spring	                    AOP	                                Sprin...
Sprint-­‐AOP	  !   Java	  100%	  pur	      o  Ne	  requiert	  pas	  de	  compilateur	  spécial	      o  Ne	  requiert	  pa...
Spring-­‐Aj	  ! Spring	  peut	  se	  servir	  d’aspects	  de	  Spring	  pour	  élargir	    ses	  fonc2onnalités	  ! Spring...
Syntaxe	  ou	  2sseur?	                      Tissage	      Syntaxe	  (langage)	      Spring-­‐AOP	  (proxy)	      XML	    ...
Google	  Guice	  !   Limita2ons	  similaires	  à	  Spring-­‐AOP	  (par	  «	  proxies	  »)	  !   Syntaxe	  propre	      o  ...
Choisir	  son	  	  MODE	  DE	  TISSAGE	                              67
Deux	  grandes	  approches	  de	  2ssage	            À	  la	  compila2on	  (CTW)	            À	  l’exécu2on	  (LTW)	      ...
CTW	  (Compile-­‐Time	  Weaving)	  !   Tissage	  à	  la	  compila2on	  !   Remplace	  généralement	  le	  compilateur	  de...
LTW	  (Load-­‐Time	  Weaving)	  !   Tissage	  lors	  du	  chargement	  de	  la	  classe	  !   Remplace	  (assiste)	  le	  ...
Considérer	  L’INTÉGRATION	                      71
AJDT	  !   Plugin	  Eclipse	  pour	  AspectJ	  !   Désagrément	  sub2le:	      o  Force	  le	  CTW	  sur	  le	  projet	  d...
Maven	  !   Plugin	  pour	  AspectJ	  !   Si	  combiné	  avec	  AJDT	      o  Compile	  avec	  AJC	  versus	  JDT-­‐AJ	  p...
Spring	  +	  AJ	  !   U2liser	  le	  Java	  Agent	  de	  Spring	  plutôt	  que	  celui	  par	      défaut	  d’AspectJ	  ! ...
Autres	  considéra2ons	  ! Maven	      o  Il	  est	  possible	  que	  les	  métriques	  soient	  comptées	  en	         do...
Prochain SlideShare
Chargement dans…5
×

Implanter l'AOP... Comment partir du bon pied?

1 020 vues

Publié le

Présenté au Confoo 2012, Montréal, Québec, Canada le 29 février 2012.

----

Depuis quelques années, plusieurs entreprises ont introduit de l'AOP dans leurs projets pour les bénéfices architecturaux et techniques offerts. Malheureusement l'AOP vient également avec son lot de pièges. Pour ces raisons, plusieurs délaissent l'AOP à cause de la complexité indue qui pourrait toutefois être réduite en suivant de simples bonnes pratiques et en préparant adéquatement son intégration.

Cette présentation a pour but d'aider une équipe à embrasser l'AOP tout en évitant les pièges. On y traitera de diverses bonnes et mauvaises pratiques avec l'AOP (architecture, IDE, refactoring, tests...). L'accent sera placé sur des conseils pratiques comme le choix de frameworks (ex.: AspectJ ou Spring-AOP), du mode de tissage approprié à votre contexte, des conflits avec d'autres technologies Java, etc.

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 020
Sur SlideShare
0
Issues des intégrations
0
Intégrations
63
Actions
Partages
0
Téléchargements
18
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Implanter l'AOP... Comment partir du bon pied?

  1. 1. Implanter  lAOP...    Comment  par2r  du  bon  pied?   Confoo  2012   Montréal,  Québec,  Canada   29  février  2012  
  2. 2. Félix-­‐Antoine  Bourbonnais    Ing.  jr,  PSM-­‐I  !   Formateur  et  Coach  Agile  !   Enseignement  et  forma2ons     o  TDD,  Réusinage,  OO  avancé,     AOP,  tests,  Scrum  !   Recherches     o  AOP,  agilité,  tests  et  mocks  !   Développeur     o  Java  et  Python  (principalement)   @fbourbonnais 2
  3. 3. Objec2f  de  la  présenta2on  Image: jscreationzs / FreeDigitalPhotos.net 3
  4. 4. Réchauffement…   Quelles  sont  vos  aWentes?   Qui  fait  ou  a  fait  de  l’AOP  dans  un   projet?   En  un  mot:  AOP?   Qui  a  eu  une  mauvaise  expérience   avec  l’AOP?  Image: Nutdanai Apikhomboonwaroot / FreeDigitalPhotos.net 4
  5. 5. Les  PRÉOCCUPATIONS  TRANSVERSES   5
  6. 6. Préoccupa2ons  transverses  Angl.: Crosscutting concerns. Certaines  préoccupa2ons  secondaires  sont   impossibles  à  regrouper  et  contaminent   plusieurs  classes.   6
  7. 7. Préoccupa2ons  transverses   Enchevêtrement   Éparpillement   7
  8. 8. Préoccupa2ons  transverses  Enchevêtrement  (cohésion)   Fonc2onnalité   principale   Persistance   Sécurité   Observa2on   8
  9. 9.   Enchevêtrement  (1)                                                                                                                                     9
  10. 10. Enchevêtrement  (2)   10
  11. 11. Enchevêtrement  (3)   11
  12. 12. Enchevêtrement  (4)   12
  13. 13. Enchevêtrement  (principale)   13
  14. 14. Enchevêtrement  (récapitula2f)   14
  15. 15. Préoccupa2ons  transverses  Éparpillement  (dispersion)   Persistance   15
  16. 16. Introduc2on  à  L’AOP   16
  17. 17. Orienta2on  objet  et  préoccupa2ons   Encapsula2on   Cohésion   Modularité   SRP   Couplage   17
  18. 18. Orienta2on  objet  et  préoccupa2ons   Théoriquement,  chaque  classe  devrait   représenter  une  seule  préoccupa2on.   18
  19. 19. Orienta2on  aspect   C   A Classe  1   Aspect  1   A C   Aspect  2   Classe  2   A Aspect  3   19
  20. 20. Rappel  rapide  de  LA  TERMINOLOGIE  ET  DU  FONCTIONNEMENT   20
  21. 21. Un  aspect  !   Un  module  encapsulant  une  préoccupa2on  !   Peu  gérer  les  préoccupa2ons  transverses  !   Généralement  une  classe  «  évoluée  »   o  Capacités  supplémentaires  afin  de  permeWre   l’encapsula2on  de  préoccupa2ons  transverses   21
  22. 22. Contenu  typique  d’un  aspect   Code  à   Indica2on   Aspect   exécuter   des  cibles   22
  23. 23. Aspect  en  AspectJ  public aspect VisitorAspect { !! /∗ −−−−−−−− Pointcuts −−−−−−−− ∗/ !  protected pointcut startMethod() : !  execution( ∗ start∗(..) ); ! !  /∗ −−−−−−−− Advices −−−−−−−− ∗/ !  after() : startMethod() { !  printHello(); ! }!!} !! 23
  24. 24. Pourquoi  est-­‐ce  que  L’AOP  N’A  PAS  AUTANT  RAYONNÉ  QUE  PRÉVU?   24
  25. 25. Pourquoi  est-­‐ce  que  plusieurs  entreprises  délaissent  l’AOP?   Mauvaises  raisons  et  u2lisa2ons   Complexité  ajoutée   Manque  de  support  et  d’intégra2on   Manque  de  connaissances  et  de  compétences   Trop  de  promesses   25
  26. 26. Aspect  !=  AOP  Image: Danilo Rizzuti / FreeDigitalPhotos.net 26
  27. 27. Enquête  auprès  de  débutants  (2009)  !   Pas  plus  difficile  à  apprendre  que  l’OO  (74%)  !   Il  est  difficile  de  tester  un  aspect  (100%)   o  N’avaient  pas  une  grande  expérience  avec  les  tests.  !   Les  tests  sont  simplifiés  grâce  à  l’AOP  (67%)  !   Plusieurs  autres  difficultés  sont  causées  par  un   manque  d’expérience  !   100%  réu2liseraient  l’AOP  mais  62%  avec  prudence  [1] Félix-Antoine Bourbonnais and Luc Lamontagne,Using AOP for an Academic Agile Project: A Pilot Study,1st International Workshop on Empirical Evaluation of Software Composition Techniques 27(ESCOT 2010), Rennes, France, 2010.
  28. 28. Enquête  auprès  de  débutants  (2009)  Cri2que  de  la  validité  !   Le  contexte   o  Étudiants  de  bacc.  (3e/4e  année)   o  Projet  de  session  (3  mois)   o  Portail  financier  web  avec  GWT  ou  Spring  !   Pour  les  autres  données  et  le  contexte  détaillé:   o  Félix-­‐Antoine  Bourbonnais  and  Luc  Lamontagne,     Using  AOP  for  an  Academic  Agile  Project:  A  Pilot  Study   ESCOT  2012,  Renne,  France,  20120.   o  hWp://www.comp.lancs.ac.uk/~greenwop/escot10/ escot10_submission_2.pdf   28
  29. 29. Comment  INTRODUIRE  DE  L’AOP  DANS  VOTRE  PROJET   29
  30. 30. 1.  Avoir  un  but…  Image: renjith krishnan / FreeDigitalPhotos.net 30
  31. 31. 2.  Choisir  sa  technologie  Image: Sura Nualpradid / FreeDigitalPhotos.net 31
  32. 32. Choix  technologiques  !   Tisseur  /  cadre  applica2f  (framework)   o  Compilateur  spécial   o  Pur  java  !   Mode  de  2ssage   o  LTW  (au  chargement  des  classes)   o  CTW  (à  la  compila2on)   32
  33. 33. Choix  technologiques  !   Syntaxe   o  Java   o  AspectJ  Language  (.aj)   o  @AspectJ   o  XML  !   Intégra2on   o  Maven   o  AJDT   33
  34. 34. 3.  Considérer  la  complexité  ajoutée   Gains   Complexité   34
  35. 35. 4.  Considérer  l’intégra2on  !   Avec  d’autres  cadres   applica2fs  (framework)  !   Le  système  de   déploiement    !   L’intégrateur  con2nu  !   Les  technologie  de  tests  !   Etc.  Image: manostphoto / FreeDigitalPhotos.net 35
  36. 36. 5.  S’assurer  de  maîtriser  les  concepts  Rappelez-­‐vous  que  vous  introduisez  un  nouveau   paradigme  et  non  pas  simplement  une   technologie  «  cool  »!  !   Prototyper  !   Essayer  sur  un  pe2t  projet  !   Bien  se  documenter  !   Bien  former  son  équipe  Image: renjith krishnan / FreeDigitalPhotos.net 36
  37. 37. 6.  Se  discipliner  !   Résistez  au  «  canon    pour  tuer  une  mouche  »  !   L’AO  tourne  généralement  mal  entre     les  mains  de  cowboys  !   Balancez  toujours  la  complexité     versus  le  gain  !   Tester!  Image: photostock / FreeDigitalPhotos.net 37
  38. 38. Quelques   MAUVAISES  PRATIQUES  Image: Ambro/ FreeDigitalPhotos.net 38
  39. 39. Trop,  c’est  comme  pas  assez…  !   Quand  50%  du  code  est   composé  d’aspects…    !   Est-­‐ce  50%  du  code  est   composé  de   préoccupa2ons   transverses?  Image: farconville / FreeDigitalPhotos.net 39
  40. 40. L’AOP  n’est  pas  un  pansement  !   Suis-­‐je  en  train  d’u2liser   l’AOP  pour  corriger  un   problème  de  design?    !   Ne  vous  servez  pas  de   l’AOP  comme  parfum   afin  de  masquer  les   mauvaises  odeurs…  Image: digitalart / FreeDigitalPhotos.net 40
  41. 41. Le  «  trip  techno  »   L’AOP  c’est  trop  COOL  !!   La  chute  pourrait  être  douloureuse!   •  «  AspectJ...  WOW  trop  cool  !  »   •  «  On  peut  bidouiller  plein  de  trucs  avec  ça  !  »   •  «  Tsé  le  truc  qu’on  arrivait  pas  à  faire...  on  va  faire  un  aspect  qui  va   changer  ça  puis  qui  va  décider  si…  »     41
  42. 42. Quelques   BONNES  PRATIQUES  Image: photostock / FreeDigitalPhotos.net 42
  43. 43. OO  encore  d’actualité   Ce  qui  était  vrai  en  OO  l’est  encore  en  AO   43
  44. 44. Conseils  de  base  habituels  !   Code  propre  !   Cohésion  dans  l’aspect  !   Couplage  de  l’aspect   44
  45. 45. Un  aspect?  Vraiment?   Est-­‐ce  une  préoccupa2on  transverse?     Est-­‐ce  que  je  pourrais  réusiner  mon  design  OO   pour  aWeindre  le  même  objec2f?   45
  46. 46. U2liser  l’aspect  comme  «  lien  »  !   Déléguer  à  une  classe  qui  con2ent  la  logique  liée  à  ceWe   préoccupa2on  !   U2liser  l’aspect  pour  2sser  la  logique  !   Note:  Peut  varier  en  fonc2on  du  2sseur  (ex.:  AspectJ)  pointcut inXorY() : execution(* *(..)) X   (classe  cible)   Aspect   && within(X || Y); Persistance   (classe  à  2sser)  after() : inXorY { Y   (classe  cible)   persistance.clearCache();} 46
  47. 47. Dépendances  et  couplage   !   N’oubliez  pas  que   l’aspect  est  couplé  à   toutes  les  classes  où  il   s’injecte*.       *  Où  un  point  de  coupure  apparie  Image: Salvatore Vuono / FreeDigitalPhotos.net 47
  48. 48. Limiter  le  couplage   Un  aspect  trop  fortement  couplé  et  ayant  des  dépendances  éloignées  augmente  la  complexité́   et  le  rend  vulnérable  aux  changements.   «  AOSD-­‐Evolu2on  Paradox  »  [1]      [1] Dean Wampler, Aspect-Oriented programming and design for java and AspectJ, 2007. 48http://polyglotprogramming.com/papers/AOPIntroAndPrinciplesTalk.pdf.
  49. 49. Précision  du  point  de  coupure  !   Un  PC  précis  est  plus  à  risque  d’être  impacté  par  un   changement  !   Un  PC  très  générique  risque  d’apparier  trop  de  PJ  !   On  appelle  cela  le  «  Fragile  Pointcut  Problem  »  [1]    pointcut pcPrecis() : execution(void C.doX());pointcut pcGenerique() : execution(* C.doX*(..));pointcut pcPourEtreCertainAvoirProbleme : execution(* *(..));-  Si C.doX() est renommé pour C.doXInContext() …-  Si on ajoute C.doXPasRapportAvecAspect() …[1] C. Koppen et M. Störzer. PCDiff : attacking the fragile pointcut problem. 49In European Interactive Workshop on Aspects in Software (EIWAS), 2004.
  50. 50. Conscience  ou  inconscience?   Est-­‐ce  que  les  classes  2ssées  devraient  avoir   conscience  ou  non  des  aspects?     Débat  ouvert     «  obliviousness  »  vs  «  awareness  »   50
  51. 51. Bonnes  pra2ques  de  TESTS  D’ASPECTS   51
  52. 52. Tests  de  haut  niveau   Les  aspects  contribuent  aux  fonc2onnalités   globales  du  système     Rien  ne  change  pour  les  tests  de  haut  niveau   (fonc2onnels,  accepta2on,  etc.)   52
  53. 53. Tests  unitaires   53
  54. 54. Tester  unitairement  un  aspect   La  bonne   chose   (advice)   Test   unitaire   Au  bon   d’aspect   moment   (pointcut)   54
  55. 55. Technique  du  pot  de  miel    1 Pot  1    UTest     Pot  2   X Aspect     2           3   Pot  N    55
  56. 56.                             56
  57. 57. Encore  faim?   hWps://joind.in/6005   Téléchargez  les  diaposi2ves  complètes  sur   developpementagile.com  Image: rajcreationzs / FreeDigitalPhotos.ne 57
  58. 58. Période  de  QUESTIONS   58
  59. 59. Choisir  son  CADRE  APPLICATIF  (FRAMEWORK)   59
  60. 60. Quelques  cadres  pour  Java  ! AspectJ  ! Spring-­‐AOP  ! Guice-­‐AOP  !   …   60
  61. 61. AspectJ  !   Le  plus  complet   o  Plusieurs  primi2ves   o  Plusieurs  PJ  possibles  !   Extension  à  Java   o  Requiert  un  compilateur  d’Aspects   o  Ou  de  remplacer  le  chargement  des  classes     (CL  ou  Java  Agent)   61
  62. 62. Spring  supporte  deux  2sseurs   Spring   AOP   Spring   AJ   Spring   62
  63. 63. Sprint-­‐AOP  !   Java  100%  pur   o  Ne  requiert  pas  de  compilateur  spécial   o  Ne  requiert  pas  de  Java  Agent   o  U2lise  des  «  Proxies  »  dynamiques  !   Limita2ons   o  Tissage  possible  uniquement  dans  des  Beans  Spring   o  Peu  de  primi2ves  et  limitées  (ex.:  exécu2on  de  méthodes)   o  Ne  peut  intercepter  des  appels  à  «  this  »   63
  64. 64. Spring-­‐Aj  ! Spring  peut  se  servir  d’aspects  de  Spring  pour  élargir   ses  fonc2onnalités  ! Spring  se  sert  d’AspectJ  pour  lui-­‐même  !   @Configurable  permet  d’injecter  des  dépendances   dans  des  objets  qui  ne  sont  pas  des  Beans   Souvent  une  mauvaise   odeur  concernant  le   Spring   Spring   design…   AspectJ   AJ   FW++   64
  65. 65. Syntaxe  ou  2sseur?   Tissage   Syntaxe  (langage)   Spring-­‐AOP  (proxy)   XML   AspectJ   @AspectJ   Spring-­‐AJ   Langage  AJ  (.aj)   65
  66. 66. Google  Guice  !   Limita2ons  similaires  à  Spring-­‐AOP  (par  «  proxies  »)  !   Syntaxe  propre   o  Java   o  Pas  de  syntaxe  cachée  dans  les  chaînes  de  caractères  des   annota2ons  (comme  @AspectJ)   66
  67. 67. Choisir  son    MODE  DE  TISSAGE   67
  68. 68. Deux  grandes  approches  de  2ssage   À  la  compila2on  (CTW)   À  l’exécu2on  (LTW)   68
  69. 69. CTW  (Compile-­‐Time  Weaving)  !   Tissage  à  la  compila2on  !   Remplace  généralement  le  compilateur  de  Java  !   Peut  2sser  uniquement  dans  le  code  compilé  (pas   dans  une  lib.  externe)  !   Produit  du  Bytecode  standard  2ssé   69
  70. 70. LTW  (Load-­‐Time  Weaving)  !   Tissage  lors  du  chargement  de  la  classe  !   Remplace  (assiste)  le  chargeur  de  classes  de  Java   (ClassLoader)  !   Requiert  généralement  le  démarrage  de  la  JVM  avec   un  JavaAgent  !   Peut  être  probléma2que  avec  des  JEE  Container  ou   entrer  en  conflit  avec  d’autres  instrumenta2ons   70
  71. 71. Considérer  L’INTÉGRATION   71
  72. 72. AJDT  !   Plugin  Eclipse  pour  AspectJ  !   Désagrément  sub2le:   o  Force  le  CTW  sur  le  projet  dans  Eclipse  quand  la  nature   «  AspectJ  »  est  ac2vée  !   Offre  de  l’assistance   o  Complé2on  (limitée)   o  Réusinage  (limité)   o  Colora2on  syntaxique  et  validateur   72
  73. 73. Maven  !   Plugin  pour  AspectJ  !   Si  combiné  avec  AJDT   o  Compile  avec  AJC  versus  JDT-­‐AJ  pour  Eclipse   o  Toujours  faire  «  mvn  clean  »  pour  éviter  les  problèmes  !   Pour  du  LTW  u2lisez  le  Exec  Mabven  Plugin   (ou  autre)  et  passez  le  JavaAgent   73
  74. 74. Spring  +  AJ  !   U2liser  le  Java  Agent  de  Spring  plutôt  que  celui  par   défaut  d’AspectJ  !   AWen2on  à  la  combinaison  Spring-­‐AOP  (proxy)  et   AJDT   74
  75. 75. Autres  considéra2ons  ! Maven   o  Il  est  possible  que  les  métriques  soient  comptées  en   double  en  CTW.   o  Ex.:  couverture  des  tests  !   JEE  Container  et  Spring   o  Des  chargeurs  de  classes  spécifiques  sont  disponibles  pour   plusieurs  JEE  Container.   o  Sinon,  il  faut  se  rabaWre  sur  u  Java  Agent  de  la  JVM   75

×