SlideShare a Scribd company logo
Smart Use of Annotation
              Processing - APT

                  @gdigugli
                  @dbaeli



Mars JUG 2013
Speakers
@dbaeli - Dimitri BAELI             @gdigugli - Gilles Di Guglielmo
• Java developer since 1999         • Java developer since 1999
• R&D Team Mentor at                • Software architect at



• Coder, DevOps, Agile Coach        • ILOG - IBM
    – From idea to production           2D graphic toolkit
• eXo Platform                          Rule engine
    • VP Quality                    • Prima-Solutions
                                        Services platform for J2EE
                                        Domain models code generators




Mars JUG 2013                                                            2
Content Display Management




Mars JUG 2013
The story
Effective Content Display                using APT Tooling
• Content Management                     • APT Engine
    Labels                              • APT Processors
    Layout & images
                                             Generate technical code
• Clean code                                 Generate reports
    Strong Quality                          Generate patterns
    Easy Maintenance       based on i18n
                               • @Message
                               • @MessageBundle
                               • Dedicated APT Processors

                https://github.com/lesfurets/ez18n


Mars JUG 2013
Improved i18n
                for text display




Mars JUG 2013
Java i18n pattern
• The JDK default tooling to:
     Dynamically bind the content
     Usable for Texts, but also CSS and images (urls)
• Tooling :
     java.util.ResourceBundle : for .properties reading
     java.util.MessageFormat : tiny templating
     .properties files with naming pattern


Mars JUG 2013
java.util.ResourceBundle
• The .properties loader for a given Locale
• Key / Value in .properties
• Naming convention for the storage
    Messages_en_EN.properties

           Language   Country




Mars JUG 2013
java.util.MessageFormat




•    Tiny templating
•    format(“<pattern>”, args)
•    Date, numbers are formatted according to the Locale
•    Options, conditional values easy to use

    Mars JUG 2013
.properties issues
• Low quality control
    – Keys are strings in the code
    – Poor IDE support
         • No warning on unused or wrong keys
    – Encoding Hell
         • use uxxxx or you’re in trouble
• Forces you to maintain two files in sync
    – key declaration / value in .properties
    – Key usage in the .java files


Mars JUG 2013
Improved i18n




Mars JUG 2013
Ez18n : improved i18n
• Interfaces representing each .properties
• The methods acts as keys




           Messages.java         Messages.properties


Mars JUG 2013
Annotations and Code generation
• Same pattern as in GWT, but for J2SE
• New Annotations in the code :
     @MessageBundle to mark interfaces
          represents a ResourceBundle
     @Message to mark methods
         represents a localization key
• Generate :
     .properties file (for ‘default’)
     A ResourceBundle for each .properties
     Manage other languages out-side your code

Mars JUG 2013
Improved i18n benefits
• Now you can
     Refactor your keys
     Maintain the ‘default’ in Java
     Never change a .properties file for default locale
• And use it with other libs:
     GWT (done on GitHub)
     Even JQuery, Dojo, CoffeeScript (planned)
 We called that ez18n

Mars JUG 2013
APT to generate
  .properties and ResourceBundle
      classes from annotations



Mars JUG 2013
Behind the scene
                 How APT works




Mars JUG 2013
APT basics
•   APT - Annotation Processing Tool
•   Kind of old-school pre-processing
•   Standard in JDK6+ (JSR 269)
•   No runtime overload
•   Based on annotations in source code
•   Standard since JDK 1.6 (available in Sun JDK
    1.5)

Mars JUG 2013
APT annotations
• Use @Retention, @Target




Mars JUG 2013
APT Processors
• javax.annotation.processing.Processor
• Code parsing similar to Reflection
     No need of compiled code
     Some limitations
• 2 key elements :
     @SupportedAnnotationTypes to declare the
      matching annotations
     FileObject : the future generated file

Mars JUG 2013
Similarities with java.lang.reflect
Java.lang.reflect            Javax.annotation.processing
java.lang.Class              TypeElement
Constructor                  ExecutableElement
Field, Parameter             VariableElement
Method                       ExecutableElement
java.lang.Package            PackageElement


•   NO Class.newInstance()
•   NO instanceOf, NO isAssignable()
•   NO getConstructor, getMethod, …
•   Weak inheritance support

Mars JUG 2013
Processor code sample
 Processor declaration




 Use a FileObject to generate the content




Mars JUG 2013
APT command line
javac
    -cp $CLASSPATH
    -proc:only                  Or -proc:none
    -encoding UTF-8
    -processor $PROCESSOR         processors fqcn list
    -d $PROJECT_HOMEtargetclasses
    -s $PROJECT_HOMEtargetgenerated-sourcesapt
    -sourcepath $SOURCE_PATH
    -verbose
    $FILES                              optional




Mars JUG 2013
APT tooling
• Maven integration
     maven-processor-plugin (google-code)
• Ant integration
     javac
• IDE integration
     Extend the JDK compilation options




Mars JUG 2013
APT usages
• Generate required repetitive code :
     Not always possible at runtime
     Unit tests, JMX declarations
     Utility code with coverage and debug
• Build your reports on your code
     Your metrics without runtime overload
     Even fail the build if you want !



Mars JUG 2013
One or Two phase compilation
• One phase :
     APT runs during the compilation
     Generated code is directly produced as bytecode
      (.class)
     Harder to debug (no .java created)
 Two phases : “proc:only”
     javac with proc:only then with proc:none
     Creates .java files in the sourcepath


Mars JUG 2013
Problems with APT
• Beware of the “Generate” golden hammer
     generate needed code
• APT Processors can be tricky:
     hard to test / maintain
     bad error management (hidden errors !)
     Not really (well) documented
• No built-in templating mechanism
• Enforced file path creation
• Beware of maven parallel builds
     Because javac is not thread safe

Mars JUG 2013
It’s time to convince your team
• APT parses the source code to generate
     Java Files & .class, Reports (.csv, …)
     Build log information or even build failures
• It allows you to have a source level DSL
     Annotate your code & Generate the plumbing
     Compile / Debug the generated code
• APT framework is compact


Mars JUG 2013
Go deep in APT usage
                     with Ez18n




Mars JUG 2013
Demo
• The Stock-watcher available on
    – http://github.com/lesfurets/ez18n
    – In the ez18n-webapp module
    – Derived from a GWT Sample
• With a desktop browser
• With a mobile browser



Mars JUG 2013
Ez18n - Big picture
                                      Messages
                      +loveMeTender() : String [ 1]
                      +doYouLove( name : String [ 1] ) : S tring [1]




                   MessagesMobile Bundle                                                      MessagesDe sktopBundle

MessagesMobileBundle()                                                       MessagesDesktopBundle()
getMessage( key : String [ 1] , params : Object [1] ) : String [ 1]          getMessage( key : String [ 1] , params : Object [1] ) : String [ 1]
loveMeTender() : String [1]                                                  loveMeTender() : String [1]
doYouLove( name : S tring [1] ) : String [1]                                 doYouLove( name : S tring [1] ) : String [1]




           «annotate»                                                                                                                  «annotate»
                               «inject »                               «inject »

                                                                                        -delegate -delegate 1
                                                                                                   1
    Mobile                             BundleFactory                                           Re sourceBundle                 De sktop

                                <S >get ( service, annotation )




 Mars JUG 2013
Ez18n - APT chaining
                         • 5 APT processors to
                           obtain the default
                           pattern
                         • Optional CSV files for
                           analysis/tooling




Mars JUG 2013
From Messages to DesktopMessages.properties

• One property file per interface with
  @MessageBundle
• One property entry per method with @Message




Mars JUG 2013
From Messages to
            MessagesDesktopBundle.java (1/2)




Mars JUG 2013
From Messages to
            MessagesDesktopBundle.java (2/2)




Mars JUG 2013
From Messages to
     META-INF/services/org.ez18n.sample.Messages




                    • Using META-INF/services to inject the
                      mobile & desktop implementation
                    • The two implementations could be
                      filtered at runtime using annotations
                      and java.util.ServiceLoader
                        @Mobile
                        @Desktop



Mars JUG 2013
A factory for the Messages implementations
  • Using java.util.ServiceLoader to inject the interface with
    @MessageBundle
  • @Desktop and @Mobile used to filter the injection result




Mars JUG 2013
Client code sample with JUnit
• Some basic JUnit test using the API

                                          The unit tests are
                                          generated using APT
                                          too 



                         BundleFactory.get(…) usage in the test
                         @Before to retrieve the bundle
                         implementation




Mars JUG 2013
Ez18n - Summary




                    Maven, javac
                   Injection & APT




Mars JUG 2013
If you’d like
                a JSR for ez18n
                please tell us !

                                   Ez18n =
                                   @Message
                                   @MessageBundle
                                   Set of Processors




Mars JUG 2013
APT Adoption
“As the lead engineer on JSR 269 in JDK 6, I'd be
heartened to see greater adoption and use of
annotation processing by Java developers.”
      Joseph D. Darcy (Oracle)




Mars JUG 2013
APT JDK 8
• possibilité d’ajouter une annotation sur les
  types d’objets (JSR 308)
• possibilité de répéter une annotation sur une
  déclaration (JEP 120)
• portage de l’API “javax.lang.model” au
  runtime pour qu’elle ne soit pas disponible
  uniquement à la compilation (JEP 119)
• Voir les notes :
  http://blog.soat.fr/2012/11/devoxx-2012-jsr-
  308-annotations-on-java-types/
Mars JUG 2013
JavaOne 2012
                   APT virtual mini-track
• Sessions
    – Advanced Annotation Processing with JSR 269
         • Jaroslav Tulach
    – Build Your Own Type System for Fun and Profit
         • Werner Dietl and Michael Ernst
    – Annotations and Annotation Processing: What’s New in JDK 8?
         • Joel Borggrén-Franck
    – Hack into Your Compiler!
         • Jaroslav Tulach
    – Writing Annotation Processors to Aid Your Development Process
         • Ian Robertson

• Thanks to
    – Joseph D. Darcy (APT spec lead) - https://blogs.oracle.com/darcy/




Mars JUG 2013
Thank you !


                Ez18n is on GitHub
                   Just fork it !


                https://github.com/lesfurets/ez18n



Mars JUG 2013                                        42

More Related Content

What's hot

1.introduction to java
1.introduction to java1.introduction to java
1.introduction to java
Madhura Bhalerao
 
Introduction to java
Introduction to java Introduction to java
Introduction to java
Sandeep Rawat
 
Introducing Java 7
Introducing Java 7Introducing Java 7
Introducing Java 7
Markus Eisele
 
Java1
Java1Java1
(ATS3-DEV08) Team Development with Accelrys Enterprise Platform
(ATS3-DEV08) Team Development with Accelrys Enterprise Platform(ATS3-DEV08) Team Development with Accelrys Enterprise Platform
(ATS3-DEV08) Team Development with Accelrys Enterprise Platform
BIOVIA
 
Introduction to JAVA
Introduction to JAVAIntroduction to JAVA
Introduction to JAVA
Md. Tanvir Hossain
 
Overview Of .Net 4.0 Sanjay Vyas
Overview Of .Net 4.0   Sanjay VyasOverview Of .Net 4.0   Sanjay Vyas
Overview Of .Net 4.0 Sanjay Vyas
rsnarayanan
 
Introduction to the Java(TM) Advanced Imaging API
Introduction to the Java(TM) Advanced Imaging APIIntroduction to the Java(TM) Advanced Imaging API
Introduction to the Java(TM) Advanced Imaging API
white paper
 
1 java programming- introduction
1  java programming- introduction1  java programming- introduction
1 java programming- introduction
jyoti_lakhani
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to java
Steve Fort
 
ICON UK '13 - Apache Software: The FREE Java toolbox you didn't know you had !!
ICON UK '13 - Apache Software: The FREE Java toolbox you didn't know you had !!ICON UK '13 - Apache Software: The FREE Java toolbox you didn't know you had !!
ICON UK '13 - Apache Software: The FREE Java toolbox you didn't know you had !!
panagenda
 
Mapping Java Objects with JPA
Mapping Java Objects with JPAMapping Java Objects with JPA
Mapping Java Objects with JPA
Aaron Schram
 
Java Programming for Designers
Java Programming for DesignersJava Programming for Designers
Java Programming for Designers
R. Sosa
 
Learn Java with Dr. Rifat Shahriyar
Learn Java with Dr. Rifat ShahriyarLearn Java with Dr. Rifat Shahriyar
Learn Java with Dr. Rifat Shahriyar
Abir Mohammad
 

What's hot (14)

1.introduction to java
1.introduction to java1.introduction to java
1.introduction to java
 
Introduction to java
Introduction to java Introduction to java
Introduction to java
 
Introducing Java 7
Introducing Java 7Introducing Java 7
Introducing Java 7
 
Java1
Java1Java1
Java1
 
(ATS3-DEV08) Team Development with Accelrys Enterprise Platform
(ATS3-DEV08) Team Development with Accelrys Enterprise Platform(ATS3-DEV08) Team Development with Accelrys Enterprise Platform
(ATS3-DEV08) Team Development with Accelrys Enterprise Platform
 
Introduction to JAVA
Introduction to JAVAIntroduction to JAVA
Introduction to JAVA
 
Overview Of .Net 4.0 Sanjay Vyas
Overview Of .Net 4.0   Sanjay VyasOverview Of .Net 4.0   Sanjay Vyas
Overview Of .Net 4.0 Sanjay Vyas
 
Introduction to the Java(TM) Advanced Imaging API
Introduction to the Java(TM) Advanced Imaging APIIntroduction to the Java(TM) Advanced Imaging API
Introduction to the Java(TM) Advanced Imaging API
 
1 java programming- introduction
1  java programming- introduction1  java programming- introduction
1 java programming- introduction
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to java
 
ICON UK '13 - Apache Software: The FREE Java toolbox you didn't know you had !!
ICON UK '13 - Apache Software: The FREE Java toolbox you didn't know you had !!ICON UK '13 - Apache Software: The FREE Java toolbox you didn't know you had !!
ICON UK '13 - Apache Software: The FREE Java toolbox you didn't know you had !!
 
Mapping Java Objects with JPA
Mapping Java Objects with JPAMapping Java Objects with JPA
Mapping Java Objects with JPA
 
Java Programming for Designers
Java Programming for DesignersJava Programming for Designers
Java Programming for Designers
 
Learn Java with Dr. Rifat Shahriyar
Learn Java with Dr. Rifat ShahriyarLearn Java with Dr. Rifat Shahriyar
Learn Java with Dr. Rifat Shahriyar
 

Similar to Smart Annotation Processing - Marseille JUG

java slides
java slidesjava slides
java slides
RizwanTariq18
 
Letest
LetestLetest
Java Programming concept
Java Programming concept Java Programming concept
Java Programming concept
Prakash Poudel
 
Spring MVC framework
Spring MVC frameworkSpring MVC framework
Spring MVC framework
Mohit Gupta
 
ACM Sunnyvale Meetup.pdf
ACM Sunnyvale Meetup.pdfACM Sunnyvale Meetup.pdf
ACM Sunnyvale Meetup.pdf
Anyscale
 
M251_Meeting 1(M251_Meeting 1_updated.pdf)
M251_Meeting 1(M251_Meeting 1_updated.pdf)M251_Meeting 1(M251_Meeting 1_updated.pdf)
M251_Meeting 1(M251_Meeting 1_updated.pdf)
hossamghareb681
 
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft..."Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
Dataconomy Media
 
Java-Unit-I.ppt
Java-Unit-I.pptJava-Unit-I.ppt
Java-Unit-I.ppt
RameswarGprec
 
Pipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as CodePipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as Code
Kris Buytaert
 
desktop_resume
desktop_resumedesktop_resume
desktop_resume
Chris Markle
 
MichaelLutherResume60
MichaelLutherResume60MichaelLutherResume60
MichaelLutherResume60
michael luther
 
Java
Java Java
3 rad extensibility-srilakshmi_s_rajesh_k
3 rad extensibility-srilakshmi_s_rajesh_k3 rad extensibility-srilakshmi_s_rajesh_k
3 rad extensibility-srilakshmi_s_rajesh_k
IBM
 
Rad Extensibility - Srilakshmi S Rajesh K
Rad Extensibility - Srilakshmi S Rajesh KRad Extensibility - Srilakshmi S Rajesh K
Rad Extensibility - Srilakshmi S Rajesh K
Roopa Nadkarni
 
Java compilation
Java compilationJava compilation
Java compilation
Mike Kucera
 
Unit 1(sem-iv)
Unit 1(sem-iv)Unit 1(sem-iv)
Unit 1(sem-iv)
Jigarthacker
 
Designing Optimized Symbols for InduSoft Web Studio Projects
Designing Optimized Symbols for InduSoft Web Studio ProjectsDesigning Optimized Symbols for InduSoft Web Studio Projects
Designing Optimized Symbols for InduSoft Web Studio Projects
AVEVA
 
The Java Content Repository
The Java Content RepositoryThe Java Content Repository
The Java Content Repository
nobby
 
What is Google App Engine?
What is Google App Engine?What is Google App Engine?
What is Google App Engine?
weschwee
 
Core java slides
Core java slidesCore java slides
Core java slides
Abhilash Nair
 

Similar to Smart Annotation Processing - Marseille JUG (20)

java slides
java slidesjava slides
java slides
 
Letest
LetestLetest
Letest
 
Java Programming concept
Java Programming concept Java Programming concept
Java Programming concept
 
Spring MVC framework
Spring MVC frameworkSpring MVC framework
Spring MVC framework
 
ACM Sunnyvale Meetup.pdf
ACM Sunnyvale Meetup.pdfACM Sunnyvale Meetup.pdf
ACM Sunnyvale Meetup.pdf
 
M251_Meeting 1(M251_Meeting 1_updated.pdf)
M251_Meeting 1(M251_Meeting 1_updated.pdf)M251_Meeting 1(M251_Meeting 1_updated.pdf)
M251_Meeting 1(M251_Meeting 1_updated.pdf)
 
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft..."Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
 
Java-Unit-I.ppt
Java-Unit-I.pptJava-Unit-I.ppt
Java-Unit-I.ppt
 
Pipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as CodePipeline as code for your infrastructure as Code
Pipeline as code for your infrastructure as Code
 
desktop_resume
desktop_resumedesktop_resume
desktop_resume
 
MichaelLutherResume60
MichaelLutherResume60MichaelLutherResume60
MichaelLutherResume60
 
Java
Java Java
Java
 
3 rad extensibility-srilakshmi_s_rajesh_k
3 rad extensibility-srilakshmi_s_rajesh_k3 rad extensibility-srilakshmi_s_rajesh_k
3 rad extensibility-srilakshmi_s_rajesh_k
 
Rad Extensibility - Srilakshmi S Rajesh K
Rad Extensibility - Srilakshmi S Rajesh KRad Extensibility - Srilakshmi S Rajesh K
Rad Extensibility - Srilakshmi S Rajesh K
 
Java compilation
Java compilationJava compilation
Java compilation
 
Unit 1(sem-iv)
Unit 1(sem-iv)Unit 1(sem-iv)
Unit 1(sem-iv)
 
Designing Optimized Symbols for InduSoft Web Studio Projects
Designing Optimized Symbols for InduSoft Web Studio ProjectsDesigning Optimized Symbols for InduSoft Web Studio Projects
Designing Optimized Symbols for InduSoft Web Studio Projects
 
The Java Content Repository
The Java Content RepositoryThe Java Content Repository
The Java Content Repository
 
What is Google App Engine?
What is Google App Engine?What is Google App Engine?
What is Google App Engine?
 
Core java slides
Core java slidesCore java slides
Core java slides
 

More from gdigugli

SoftShake 2015 - DomainModel.stream()
SoftShake 2015 - DomainModel.stream()SoftShake 2015 - DomainModel.stream()
SoftShake 2015 - DomainModel.stream()
gdigugli
 
Rock solid UI modeling using annotation processing - CodeGeneration 2013
Rock solid UI modeling using annotation processing - CodeGeneration 2013Rock solid UI modeling using annotation processing - CodeGeneration 2013
Rock solid UI modeling using annotation processing - CodeGeneration 2013
gdigugli
 
Ez18n crowdsourcing
Ez18n crowdsourcingEz18n crowdsourcing
Ez18n crowdsourcing
gdigugli
 
Ez18n hands on - Annotation Processing Tool par l'exemple
Ez18n hands on - Annotation Processing Tool par l'exempleEz18n hands on - Annotation Processing Tool par l'exemple
Ez18n hands on - Annotation Processing Tool par l'exemple
gdigugli
 
Ez18n theorie encoding gouvernance
Ez18n theorie encoding gouvernanceEz18n theorie encoding gouvernance
Ez18n theorie encoding gouvernance
gdigugli
 
Ez18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellEz18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshell
gdigugli
 
DevOps illustré : la jungle de la configuration d'une application
DevOps illustré : la jungle de la configuration d'une applicationDevOps illustré : la jungle de la configuration d'une application
DevOps illustré : la jungle de la configuration d'une application
gdigugli
 

More from gdigugli (7)

SoftShake 2015 - DomainModel.stream()
SoftShake 2015 - DomainModel.stream()SoftShake 2015 - DomainModel.stream()
SoftShake 2015 - DomainModel.stream()
 
Rock solid UI modeling using annotation processing - CodeGeneration 2013
Rock solid UI modeling using annotation processing - CodeGeneration 2013Rock solid UI modeling using annotation processing - CodeGeneration 2013
Rock solid UI modeling using annotation processing - CodeGeneration 2013
 
Ez18n crowdsourcing
Ez18n crowdsourcingEz18n crowdsourcing
Ez18n crowdsourcing
 
Ez18n hands on - Annotation Processing Tool par l'exemple
Ez18n hands on - Annotation Processing Tool par l'exempleEz18n hands on - Annotation Processing Tool par l'exemple
Ez18n hands on - Annotation Processing Tool par l'exemple
 
Ez18n theorie encoding gouvernance
Ez18n theorie encoding gouvernanceEz18n theorie encoding gouvernance
Ez18n theorie encoding gouvernance
 
Ez18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellEz18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshell
 
DevOps illustré : la jungle de la configuration d'une application
DevOps illustré : la jungle de la configuration d'une applicationDevOps illustré : la jungle de la configuration d'une application
DevOps illustré : la jungle de la configuration d'une application
 

Recently uploaded

Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
AstuteBusiness
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
UiPathCommunity
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
DianaGray10
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
Neo4j
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
Fwdays
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
Antonios Katsarakis
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Neo4j
 
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdf
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdfLee Barnes - Path to Becoming an Effective Test Automation Engineer.pdf
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdf
leebarnesutopia
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
christinelarrosa
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
ScyllaDB
 
What is an RPA CoE? Session 2 – CoE Roles
What is an RPA CoE?  Session 2 – CoE RolesWhat is an RPA CoE?  Session 2 – CoE Roles
What is an RPA CoE? Session 2 – CoE Roles
DianaGray10
 
AWS Certified Solutions Architect Associate (SAA-C03)
AWS Certified Solutions Architect Associate (SAA-C03)AWS Certified Solutions Architect Associate (SAA-C03)
AWS Certified Solutions Architect Associate (SAA-C03)
HarpalGohil4
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
Fwdays
 
ScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking ReplicationScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking Replication
ScyllaDB
 
"What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w..."What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w...
Fwdays
 
AI in the Workplace Reskilling, Upskilling, and Future Work.pptx
AI in the Workplace Reskilling, Upskilling, and Future Work.pptxAI in the Workplace Reskilling, Upskilling, and Future Work.pptx
AI in the Workplace Reskilling, Upskilling, and Future Work.pptx
Sunil Jagani
 
Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!
Ortus Solutions, Corp
 
QA or the Highway - Component Testing: Bridging the gap between frontend appl...
QA or the Highway - Component Testing: Bridging the gap between frontend appl...QA or the Highway - Component Testing: Bridging the gap between frontend appl...
QA or the Highway - Component Testing: Bridging the gap between frontend appl...
zjhamm304
 

Recently uploaded (20)

Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
 
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdf
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdfLee Barnes - Path to Becoming an Effective Test Automation Engineer.pdf
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdf
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
 
What is an RPA CoE? Session 2 – CoE Roles
What is an RPA CoE?  Session 2 – CoE RolesWhat is an RPA CoE?  Session 2 – CoE Roles
What is an RPA CoE? Session 2 – CoE Roles
 
AWS Certified Solutions Architect Associate (SAA-C03)
AWS Certified Solutions Architect Associate (SAA-C03)AWS Certified Solutions Architect Associate (SAA-C03)
AWS Certified Solutions Architect Associate (SAA-C03)
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
 
ScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking ReplicationScyllaDB Tablets: Rethinking Replication
ScyllaDB Tablets: Rethinking Replication
 
"What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w..."What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w...
 
AI in the Workplace Reskilling, Upskilling, and Future Work.pptx
AI in the Workplace Reskilling, Upskilling, and Future Work.pptxAI in the Workplace Reskilling, Upskilling, and Future Work.pptx
AI in the Workplace Reskilling, Upskilling, and Future Work.pptx
 
Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!
 
QA or the Highway - Component Testing: Bridging the gap between frontend appl...
QA or the Highway - Component Testing: Bridging the gap between frontend appl...QA or the Highway - Component Testing: Bridging the gap between frontend appl...
QA or the Highway - Component Testing: Bridging the gap between frontend appl...
 

Smart Annotation Processing - Marseille JUG

  • 1. Smart Use of Annotation Processing - APT @gdigugli @dbaeli Mars JUG 2013
  • 2. Speakers @dbaeli - Dimitri BAELI @gdigugli - Gilles Di Guglielmo • Java developer since 1999 • Java developer since 1999 • R&D Team Mentor at • Software architect at • Coder, DevOps, Agile Coach • ILOG - IBM – From idea to production  2D graphic toolkit • eXo Platform  Rule engine • VP Quality • Prima-Solutions  Services platform for J2EE  Domain models code generators Mars JUG 2013 2
  • 4. The story Effective Content Display using APT Tooling • Content Management • APT Engine  Labels • APT Processors  Layout & images  Generate technical code • Clean code  Generate reports  Strong Quality  Generate patterns  Easy Maintenance based on i18n • @Message • @MessageBundle • Dedicated APT Processors https://github.com/lesfurets/ez18n Mars JUG 2013
  • 5. Improved i18n for text display Mars JUG 2013
  • 6. Java i18n pattern • The JDK default tooling to:  Dynamically bind the content  Usable for Texts, but also CSS and images (urls) • Tooling :  java.util.ResourceBundle : for .properties reading  java.util.MessageFormat : tiny templating  .properties files with naming pattern Mars JUG 2013
  • 7. java.util.ResourceBundle • The .properties loader for a given Locale • Key / Value in .properties • Naming convention for the storage Messages_en_EN.properties Language Country Mars JUG 2013
  • 8. java.util.MessageFormat • Tiny templating • format(“<pattern>”, args) • Date, numbers are formatted according to the Locale • Options, conditional values easy to use Mars JUG 2013
  • 9. .properties issues • Low quality control – Keys are strings in the code – Poor IDE support • No warning on unused or wrong keys – Encoding Hell • use uxxxx or you’re in trouble • Forces you to maintain two files in sync – key declaration / value in .properties – Key usage in the .java files Mars JUG 2013
  • 11. Ez18n : improved i18n • Interfaces representing each .properties • The methods acts as keys Messages.java Messages.properties Mars JUG 2013
  • 12. Annotations and Code generation • Same pattern as in GWT, but for J2SE • New Annotations in the code :  @MessageBundle to mark interfaces  represents a ResourceBundle  @Message to mark methods represents a localization key • Generate :  .properties file (for ‘default’)  A ResourceBundle for each .properties  Manage other languages out-side your code Mars JUG 2013
  • 13. Improved i18n benefits • Now you can  Refactor your keys  Maintain the ‘default’ in Java  Never change a .properties file for default locale • And use it with other libs:  GWT (done on GitHub)  Even JQuery, Dojo, CoffeeScript (planned)  We called that ez18n Mars JUG 2013
  • 14. APT to generate .properties and ResourceBundle classes from annotations Mars JUG 2013
  • 15. Behind the scene How APT works Mars JUG 2013
  • 16. APT basics • APT - Annotation Processing Tool • Kind of old-school pre-processing • Standard in JDK6+ (JSR 269) • No runtime overload • Based on annotations in source code • Standard since JDK 1.6 (available in Sun JDK 1.5) Mars JUG 2013
  • 17. APT annotations • Use @Retention, @Target Mars JUG 2013
  • 18. APT Processors • javax.annotation.processing.Processor • Code parsing similar to Reflection  No need of compiled code  Some limitations • 2 key elements :  @SupportedAnnotationTypes to declare the matching annotations  FileObject : the future generated file Mars JUG 2013
  • 19. Similarities with java.lang.reflect Java.lang.reflect Javax.annotation.processing java.lang.Class TypeElement Constructor ExecutableElement Field, Parameter VariableElement Method ExecutableElement java.lang.Package PackageElement • NO Class.newInstance() • NO instanceOf, NO isAssignable() • NO getConstructor, getMethod, … • Weak inheritance support Mars JUG 2013
  • 20. Processor code sample  Processor declaration  Use a FileObject to generate the content Mars JUG 2013
  • 21. APT command line javac -cp $CLASSPATH -proc:only Or -proc:none -encoding UTF-8 -processor $PROCESSOR processors fqcn list -d $PROJECT_HOMEtargetclasses -s $PROJECT_HOMEtargetgenerated-sourcesapt -sourcepath $SOURCE_PATH -verbose $FILES optional Mars JUG 2013
  • 22. APT tooling • Maven integration  maven-processor-plugin (google-code) • Ant integration  javac • IDE integration  Extend the JDK compilation options Mars JUG 2013
  • 23. APT usages • Generate required repetitive code :  Not always possible at runtime  Unit tests, JMX declarations  Utility code with coverage and debug • Build your reports on your code  Your metrics without runtime overload  Even fail the build if you want ! Mars JUG 2013
  • 24. One or Two phase compilation • One phase :  APT runs during the compilation  Generated code is directly produced as bytecode (.class)  Harder to debug (no .java created)  Two phases : “proc:only”  javac with proc:only then with proc:none  Creates .java files in the sourcepath Mars JUG 2013
  • 25. Problems with APT • Beware of the “Generate” golden hammer  generate needed code • APT Processors can be tricky:  hard to test / maintain  bad error management (hidden errors !)  Not really (well) documented • No built-in templating mechanism • Enforced file path creation • Beware of maven parallel builds  Because javac is not thread safe Mars JUG 2013
  • 26. It’s time to convince your team • APT parses the source code to generate  Java Files & .class, Reports (.csv, …)  Build log information or even build failures • It allows you to have a source level DSL  Annotate your code & Generate the plumbing  Compile / Debug the generated code • APT framework is compact Mars JUG 2013
  • 27. Go deep in APT usage with Ez18n Mars JUG 2013
  • 28. Demo • The Stock-watcher available on – http://github.com/lesfurets/ez18n – In the ez18n-webapp module – Derived from a GWT Sample • With a desktop browser • With a mobile browser Mars JUG 2013
  • 29. Ez18n - Big picture Messages +loveMeTender() : String [ 1] +doYouLove( name : String [ 1] ) : S tring [1] MessagesMobile Bundle MessagesDe sktopBundle MessagesMobileBundle() MessagesDesktopBundle() getMessage( key : String [ 1] , params : Object [1] ) : String [ 1] getMessage( key : String [ 1] , params : Object [1] ) : String [ 1] loveMeTender() : String [1] loveMeTender() : String [1] doYouLove( name : S tring [1] ) : String [1] doYouLove( name : S tring [1] ) : String [1] «annotate» «annotate» «inject » «inject » -delegate -delegate 1 1 Mobile BundleFactory Re sourceBundle De sktop <S >get ( service, annotation ) Mars JUG 2013
  • 30. Ez18n - APT chaining • 5 APT processors to obtain the default pattern • Optional CSV files for analysis/tooling Mars JUG 2013
  • 31. From Messages to DesktopMessages.properties • One property file per interface with @MessageBundle • One property entry per method with @Message Mars JUG 2013
  • 32. From Messages to MessagesDesktopBundle.java (1/2) Mars JUG 2013
  • 33. From Messages to MessagesDesktopBundle.java (2/2) Mars JUG 2013
  • 34. From Messages to META-INF/services/org.ez18n.sample.Messages • Using META-INF/services to inject the mobile & desktop implementation • The two implementations could be filtered at runtime using annotations and java.util.ServiceLoader  @Mobile  @Desktop Mars JUG 2013
  • 35. A factory for the Messages implementations • Using java.util.ServiceLoader to inject the interface with @MessageBundle • @Desktop and @Mobile used to filter the injection result Mars JUG 2013
  • 36. Client code sample with JUnit • Some basic JUnit test using the API The unit tests are generated using APT too  BundleFactory.get(…) usage in the test @Before to retrieve the bundle implementation Mars JUG 2013
  • 37. Ez18n - Summary Maven, javac Injection & APT Mars JUG 2013
  • 38. If you’d like a JSR for ez18n please tell us ! Ez18n = @Message @MessageBundle Set of Processors Mars JUG 2013
  • 39. APT Adoption “As the lead engineer on JSR 269 in JDK 6, I'd be heartened to see greater adoption and use of annotation processing by Java developers.” Joseph D. Darcy (Oracle) Mars JUG 2013
  • 40. APT JDK 8 • possibilité d’ajouter une annotation sur les types d’objets (JSR 308) • possibilité de répéter une annotation sur une déclaration (JEP 120) • portage de l’API “javax.lang.model” au runtime pour qu’elle ne soit pas disponible uniquement à la compilation (JEP 119) • Voir les notes : http://blog.soat.fr/2012/11/devoxx-2012-jsr- 308-annotations-on-java-types/ Mars JUG 2013
  • 41. JavaOne 2012 APT virtual mini-track • Sessions – Advanced Annotation Processing with JSR 269 • Jaroslav Tulach – Build Your Own Type System for Fun and Profit • Werner Dietl and Michael Ernst – Annotations and Annotation Processing: What’s New in JDK 8? • Joel Borggrén-Franck – Hack into Your Compiler! • Jaroslav Tulach – Writing Annotation Processors to Aid Your Development Process • Ian Robertson • Thanks to – Joseph D. Darcy (APT spec lead) - https://blogs.oracle.com/darcy/ Mars JUG 2013
  • 42. Thank you ! Ez18n is on GitHub Just fork it ! https://github.com/lesfurets/ez18n Mars JUG 2013 42