Annotations pour les Geeks

Download Annotations pour les Geeks

Post on 14-Jun-2015

273 views

Category:

Technology

0 download

Embed Size (px)

DESCRIPTION

Traitement d'annotation pour les geeks.

TRANSCRIPT

<ul><li> 1. Annotation pour les g33ksT H E E N T E R P R I S E S O C I A L P L AT F O R M Julien VietFEBRUARY 2013</li></ul> <p> 2. JULIEN VIET Contact julien@julienviet.com @julienviet http://github.com/vietj Open source depuis + de 10 ans (dj) Avec lopportunit de pouvoir en vivre 2003 2008 JBoss 2008 2013 Exoplatform Mission officielle: le portail pour Java EE Le portail pour Java EE (officiel) Marsjug Leader www.exoplatform.com - Copyright 2012 eXo Platform 2 3. MISSION OFFICIEUSE CRaSH : le shell pour la JVM Wikbook : crire de la doc au format wiki pour docbook dans des projets Java en incluant du source code Juzu : que nous allons voirwww.exoplatform.com - Copyright 2012 eXo Platform 3 4. E X O P L AT F O R M The Enterprise Social Platform Social collaboration Solution Open Source and Enterprise Ready Highly extensible platform Notre blog http://blog.exoplatform.com www.exoplatform.com - Copyright 2012 eXo Platform 4 5. FEATURESAll in a Single Platform www.exoplatform.com - Copyright 2012 eXo Platform 5 6. INTRO A JUZUwww.exoplatform.com - Copyright 2012 eXo Platform 6 7. JUZU Framework MVC Apprentissage rapide Simplicit et libert Plusieurs runtimes Servlet Portlet Vert.x (poc) Motivation Besoin dun framework simple et puissant pourportlet/servlet www.exoplatform.com - Copyright 2012 eXo Platform 7 8. www.exoplatform.com - Copyright 2012 eXo Platform 8 9. USINE A PLUGIN A la compilation Generer de la configuration, du code source,des resources Faire chouer la compilation A lexecution Interception des requtes Dclarer des beans dans le containerdinjectionwww.exoplatform.com - Copyright 2012 eXo Platform 9 10. INJECTION: JSR -330 Supporte Spring, Guice 3.0 ou CDI Router Asset ControllerTemplate Binding plugin plugin pluginpluginplugin AssetManagerindexclass Controller {@InjectTemplate index; Router@InjectService service}Servicewww.exoplatform.com - Copyright 2012 eXo Platform10 11. GESTION DE LA CONFIGURATIONNotre approche: gnrer la configuration partir desannotations Les annotations sont puissantes On peut lire la configuration effective Et la surcharger!AnnotaCompilation Config Execution Model tions ModificationsConfig Execution Model www.exoplatform.com - Copyright 2012 eXo Platform 11 12. TRAITEMENTDANNOTATION www.exoplatform.com - Copyright 2012 eXo Platform 12 13. MAIS AVANT UN PETIT SONDAGEwww.exoplatform.com - Copyright 2012 eXo Platform 13 14. LES OUTILSwww.exoplatform.com - Copyright 2012 eXo Platform 14 15. SUPPORT DES OUTILS Bas sur des standards depuis J2SE 6 javax.annotation : Pluggable AnnotationProcessing API (JSR 269) javax.lang.model javax.tools Deux compilateurs Oracle : javac Eclipse : ecj Et les IDEs ? www.exoplatform.com - Copyright 2012 eXo Platform 15 16. ET LES IDES ?1 2 3www.exoplatform.com - Copyright 2012 eXo Platform 16 17. AVANT TOUT, QUELQUES BONNES PRATIQUES www.exoplatform.com - Copyright 2012 eXo Platform 17 18. LOGGING Comprendre ce quil se passe chez lutilisateur SOURCE_OUTPUT/my.log Facile trouver Spar des classes Attention aux compilation successives! append www.exoplatform.com - Copyright 2012 eXo Platform 18 19. REPORTER UNE ERREUR Messager WARNING / MANDATORY_WARNING ERROR: fait chouer la compilation NOTE ? OTHER Avec un lment ou une annotation pour contextualiser lerreur www.exoplatform.com - Copyright 2012 eXo Platform 19 20. GESTION DE VOS BUGStry { doProcess(annotations, roundEnv);} catch(Exception e) { processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,e.getMessage());} Sinon erreur compilateur (selon les versions) www.exoplatform.com - Copyright 2012 eXo Platform 20 21. GENERATION Indiquer un element ou plusieurs elements origines lors de la creation dun fichier Etabli une relation de dpendance entrelorigine et le fichier Utile lIDE pour supprimer les fichiers encascade www.exoplatform.com - Copyright 2012 eXo Platform 21 22. GENERATIONwww.exoplatform.com - Copyright 2012 eXo Platform 22 23. GENERATION De quoi? Une source java qui sera compil Une classe java (bytecode) Une resource Et o? CLASS_OUTPUT SOURCE_OUTPUT www.exoplatform.com - Copyright 2012 eXo Platform 23 24. CYCLE DE VIE Maximum une fois par round bufferiserles fichiers et les crire la fin du round Ecrase le fichier existant issu dun roundprcdent ou dune prcdentecompilation Invoker close() sur le stream www.exoplatform.com - Copyright 2012 eXo Platform 24 25. GENERATION DE SOURCE JAVA Avant le dernier round Annoter le source code gnr avecjavax.annotation.Generated Indiquer les lments lorigine du fichiersource cre votre code peut utiliser le code gnr www.exoplatform.com - Copyright 2012 eXo Platform 25 26. DANS JUZU: TYPE SAFE URLpublic class Controller { @View @Route(/show/{id}) public Response show(String id) {return Response.ok(update); }@Action @Route(/update/{id})public void update(String id) { // Do the update}} www.exoplatform.com - Copyright 2012 eXo Platform 26 27. GENERATION DE RESOURCEfiler.createResource(JavaFileManager.Location location,CharSequence pkg,CharSequence relativeName,Element originatingElements) criture possible dans META-INF filer.createResource(CLASS_OUTPUT,, META-INF/resource.txt)www.exoplatform.com - Copyright 2012 eXo Platform 27 28. DANS JUZU: COMPILATION LESS@Application@Less( assets/bootstrap.less, minify = true)package my.app; www.exoplatform.com - Copyright 2012 eXo Platform 28 29. AUTRES CAS DUTILISATIONwww.exoplatform.com - Copyright 2012 eXo Platform 29 30. AUTRES CAS DUTILISATION Etendre une classe Par une super classe Par une sous classe requiert une factory Cas dutilisation static proxy generation de JavaBean Classe compagnon Foo Foo_ Cas dutilisation Generateur de builder pattern JPA meta model www.exoplatform.com - Copyright 2012 eXo Platform 30 31. AUTRES CAS DUTILISATION Remplacer le scan dannotations par un descripteur centralis Etcwww.exoplatform.com - Copyright 2012 eXo Platform 31 32. FRAMEWORKS BASS SUR APT AndroidAnnotations Dagger : lIOC de Square APTVir : un virus APT (sur mon GitHub) Type safe queries JPA2 MetaModel QueryDSL JBoss Logging Tooling: logger typ Storm-gen: generateur de DAOwww.exoplatform.com - Copyright 2012 eXo Platform 32 33. ANDROIDANNOTATIONS@Backgroundvoid searchAsync(String searchString) {Bookmarks bm =client.getBookmarks(searchString);updateBookmarks(bm);}@Overridevoid searchAsync(String searchString) {backgroundExecutor.execute(() -&gt; { super.searchAsync(searchString); });}www.exoplatform.com - Copyright 2012 eXo Platform 33 34. LARBRE SYNTAXIQUE Larme absolue Compliqu et non portable Pour javac deux niveaux Compiler Tree API (javac) : lecture seule Implementation de la Tree API : ecriture Utilis par Lombok www.exoplatform.com - Copyright 2012 eXo Platform 34 35. COMPILATIONINCREMENTALE www.exoplatform.com - Copyright 2012 eXo Platform 35 36. COMPILATION INCREMENTALE Dans Eclipse la compilation est incrmentale Ergonomie accrue pour lutilisateur Tous les units de compilation (fichiers) ne sont pas disponibles en mme tempswww.exoplatform.com - Copyright 2012 eXo Platform 36 37. DESIGN DU PROCESSEUR Peut devoir tre adapt quand il existe des relations entre les elements traits Regardons ensemble un exemplewww.exoplatform.com - Copyright 2012 eXo Platform 37 38. EXEMPLE @Application package myapp;package myapp.controllers;Helloclass Controller {{{name}} @Inject @Path(index.mustache)myapp/templates/index.mustache Template index;} www.exoplatform.com - Copyright 2012 eXo Platform 38 39. LE METAMODELE Model = { } Model = {template: { templateRefs:[index.mustache]}@Path(index.mustache) }Model = {package: myapptemplate: { templateRefs:[index.mustache]} @Application} index.mustache est rsolu myapp/templates/index.mustachewww.exoplatform.com - Copyright 2012 eXo Platform39 40. CYCLE DUNE COMPILATIONMetamodele existe ?Crer metamodel vide Charger le metamodel Traiter les annotations MAJ du metamodele Sauver le metamodele www.exoplatform.com - Copyright 2012 eXo Platform40 41. MAIS AU FAIT Pourquoi analyser un template la compilation ? Vrifier les erreurs Prcalculer Pour Juzu : gnrer une sous classe pour linjection de dpendance @Path(index.gtmpl) Public class index extends juzu.Template { } Question bonus : quid de @Path ? www.exoplatform.com - Copyright 2012 eXo Platform 41 42. TESTER SON PROCESSEUR www.exoplatform.com - Copyright 2012 eXo Platform 42 43. AVEC LAPI JAVAX.TOOLS1 Obtenir le compilateur et file manager ToolProvider.getSystemJavaCompiler() compiler.getStandardFileManager()2 Configurer le file manager mgr.setLocation(SOURCE_OUTPUT, sourceOut); mgr.setLocation(CLASS_OUTPUT, classOut);3 Crer et configurer une tche de compilation CompilationTask task = compiler.getTask() task.setProcessors(processors)4 Compiler assertEquals(Boolean.TRUE,task.call()); www.exoplatform.com - Copyright 2012 eXo Platform 43 44. VERIFICATION DUN ECHECinterface Diagnostic {Kind getKind();S getSource();long getPosition();long getStartPosition();long getEndPosition();long getLineNumber();long getColumnNumber();String getMessage(Locale locale);}www.exoplatform.com - Copyright 2012 eXo Platform 44 45. COMPILATION INCRMENTALE Abordable mais un peu plus complexe Simulation dun environement incrmental Exemple1. Compiler Foo.java Foo.class2. Supprimer Foo.java et dplacer Foo.class dans le classpath3. Compiler Bar.javawww.exoplatform.com - Copyright 2012 eXo Platform 45 46. WHAT ELSE ?www.exoplatform.com - Copyright 2012 eXo Platform 46 47. SUPRESSION DE FICHIER Suppression de fichier Serait utile pour lincremental Fichier Java: utiliser les dpendances Fichier resource: opration existe mais nonsupport Eclipse Workaround Remplacer par un fichier vide www.exoplatform.com - Copyright 2012 eXo Platform 47 48. ACCESS AU SOURCE Noms des paramtres de mthode Sinon mode debug Ou Java 8 JavaDoc Elements#getDocComment(Element) Contenu brutwww.exoplatform.com - Copyright 2012 eXo Platform 48 49. MESSAGER Eclipse Message#printMessage Sans element NPE interne Inoprant pour un package dirty hackwww.exoplatform.com - Copyright 2012 eXo Platform 49 50. SUPPORT DU SOURCE_PATH Indispensable pour lire les resources Javac Doit etre fourni par lenvironnement Mais possible partir dun lment avecCompiler Tree API Eclipse Non fourni (bug) Peut etre obtenu avec lAPI interne www.exoplatform.com - Copyright 2012 eXo Platform 50 51. LES RESOURCES Javac getResource pour lire et createResource pourcrire ECJ Mme resource pour lire / crire cacher laresource www.exoplatform.com - Copyright 2012 eXo Platform 51 52. COMPLETION Pour les IDE, semble support uniquement par Netbeans www.exoplatform.com - Copyright 2012 eXo Platform 52 53. MA CONCLUSION Q&amp;A www.exoplatform.com - Copyright 2012 eXo Platform 53 54. MA CONCLUSION Ecrire un processeur est simple Mais peut devenir compliqu Trs bon support du compilateur Support des IDE amliorer Eclipse sauve les honneurs Intellij et netbeans mention passable www.exoplatform.com - Copyright 2012 eXo Platform 54</p>