SlideShare ist ein Scribd-Unternehmen logo
1 von 30
MinuteProject
     reverse-engineering
        short stories

Florian Adler
                     Riga 7/6/12
About me
French, living in Belgium
Java dev, founder of minuteproject
Working @EC

Former navy officer
                  dropped in IT minefield at Y2K
Agenda
• MinuteProject Overview
                                              Demo1 – simple JPA2 backend
• Customisation
                                            Demo2 – model evolution JPA2
• Integration technics
                                      Demo3 – REST app CXF/spring/jpa2
• Statement Driven Development
                                                Demo4 – REST app with SDD
• Goodies
                                                       Demo5 – OpenXava app
• Extend Minuteproject/ contribute?
http://minuteproject.blogspot.be/2012/05/minuteproject-reverse-engineering-short.html
Overview
MinuteProject is a:
• Code generator
• OpenSource Apache v2 licence
• 4000+ downloads
• Reverse-engineering tool
  – RDBMS
  – WSDL
Target Techno Ecosystem
                                                                                                 REST          REST                    JSF
                                                                                Vaadin
                                                                                                 CXF         SpringMVC              Primefaces


                           JSF                REST                                                  Spring configuration
                                                             WS
                        Primefaces            Jersey                                               DAO – ORM integration


                                     EJB – CDI – DAO
                                                                                                         DAO layer
                                          Layer
Under investigation

                                                           JPA2                  JPA (2/1)          Hibernate              iBatis

   First Release

                                                OpenXava                                          FitNesse

      Mature
                                         JOOQ                     MinuteProject
                                                                                                 Tutorial       Rails               Roo
                                                                   Generator
Under development
                                     Grails

                                                                                             Automated
                                                                                              Business          Benerator
                                                                                               Logic
                                        Play


                                                                   Load model
                                                                     Enrich
                                                                    Generate
Techno Demos
                                                                         REST           REST                  JSF
                                                             Vaadin
                                                                         CXF          SpringMVC            Primefaces


           JSF                REST                                        Spring configuration
                                          WS
        Primefaces            Jersey                                     DAO – ORM integration

                     EJB – CDI – DAO
                          Layer                                                   DAO layer


DEMOS
                                       JPA2                    JPA2          Hibernate            iBatis



                               OpenXava                                    FitNesse



                         JOOQ                  MinuteProject
                                                                          Tutorial       Rails             Roo
                                                Generator
                     Grails

                                                                      Automated
                                                                       Business          Benerator
                                                                        Logic
                        Play


                                                Load model
                                                  Enrich
                                                 Generate
Why MinuteProject?
• Why code generation?
• Do not reinvent the wheel
  – i.e. let the others do the framework/specs
• Crystallize your knowledge
• Go fast and customise
• Reverse-Engineering is not a one shot process
When to use it?
• Legacy model upgrades to new tech

• Work from scratch:
  – Development tool
  – Iterative methodology


• Your own model as your technology tutorial
MP generated Artifacts
                             Operating Mechanism
                                  Target
                                                                     MP engine
                              Technologies B

                                                        Generates
                                  Target
                              Technologies A

                                                                            Loads

                         Uses DB model
                           structure
                                                                               Applies
                                                                               templates
                                                                    MP main config
                                                  Loads metadata    Enriches model


                                                                               Target Technology A/B
                                 Database model                                      Templates
Demo 1 – JPA2




http://minuteproject.blogspot.be/2012/05/rigajug-demo-1-jpa2.html
Demo 1 - explanations

•   Start from scratch
•   Generate from the console & command line
•   Review artifacts
•   Write a unit test
Customisation
• Art of enrichment
• Art of reverse-analysis
• Configure model/target

Configuration options
Individual (fine grain)
Global (declarative conventions)

http://minuteproject.wikispaces.com/Convention
Demo 2 – JPA2




http://minuteproject.blogspot.be/2012/05/rigajug-demo-2-jpa2.html
Demo 2 - explanations

•   Start from scratch
•   Generate from the console & command line
•   Review artifacts
•   Write a unit test
•   Secure modified code
Integration Technics
2 standards
• integration by extension
• integration by overriding
MP adds a new one
• integration by alteration/mutation
• 3 types of alteration
  – artifact level (exclude for next generation)
  – added section
  – updatable section
Demo 3 - REST
Architecture blocks


                          CXF                 S
                                              P
                                              R
                         DAO                  I
                                              N
                         JPA2                 G

http://minuteproject.blogspot.be/2012/05/rigajug-demo-rest-cxf.html
Demo 3 - explanations
• Start from scratch
• Artifacts review:
  – CXF track
  – Spring config
  – Backend DAO
  – JPA2
  – Maven projects
• Deploy and test on Tomcat
• Test URL
SDD – Statement Driven Dev.
• Sometimes statements are just enough
• Model is secondary
• You just need:
  – Statement ex: query
  – I/O
SDD example
Start from an SQL query
to deduce function and output

          select k.key_name, t.translation,
          t.date_finalization, l.code, l.description,
          tl.first_name, tl.last_name, tl.email
          from translation t, language l, user tl,
          translation_key k
          where
          t.language_id = l.idlanguage
          and tl.idUser = t.translator_id
          and k.id = t.key_id
          order by key_name
SDD example
Provide some input
          select k.key_name, t.translation,
          t.date_finalization, l.code, l.description,
          tl.first_name, tl.last_name, tl.email
          from translation t, language l, user tl,
          translation_key k
          where
          t.language_id = l.idlanguage
          and tl.idUser = t.translator_id
          and k.id = t.key_id
          and k.key_name like ?
          and l.code like ?
          order by key_name
          limit ?
SDD - example
Feed statement into Minuteproject

        <query name="get translation info">
            <query-body>
             <value>
       <![CDATA[select
       k.key_name, t.translation, t.date_finalization, l.code, l.des
       cription, tl.first_name, tl.last_name, tl.email from
       translation t, language l, user tl, translation_key k where
       t.language_id = l.idlanguage and tl.idUser =
       t.translator_id and k.id = t.key_id and k.key_name like ?
       and l.code like ? order by key_name limit ?]]>
          </value>
       </query-body>
SDD - example
Feed input into Minuteproject


       <query-params>

         <query-param name="key" is-mandatory="false"
       type="STRING" sample="'test'"/>

         <query-param name="code" is-mandatory="false"
       type="STRING" sample="'FR'"/>

          <query-param name="max" is-mandatory="false"
       type="INT" sample="10"/>

       </query-params>
Demo 4


                 SDD is WYSIWYG
           what you STATE is what you get




http://minuteproject.blogspot.be/2012/05/rigajug-demo-rest-sdd.html
Goodies
Why not have a JEE web app instantly
OpenXava app generation
• Is a RAD Open Source JEE framework based on
  JPA2
• Has front-end rendering annotation on
  entities
• Is AJAX
Demo 5 – OpenXava App

MinuteProject generates:
• OpenXava project artifacts
• Build and deploy script




http://minuteproject.blogspot.be/2012/05/rigajug-demo-instant-openxava-app.html
Extend MinuteProject
Artifacts can be generated at multiple levels:
• Field
• Entities (table,view)
• Package
• Model
• Application
Extend MinuteProject
•   Add a track
•   Add template metadata
•   Add template (velocity)
•   Add library
•   Add plugin
•   Artifact cross-reference
Success stories
• Belgium Finance Ministry
• European Commission

• In Latvia
FAQ
Contact
• Twitter @minuteproject
• Googlegroup minuteproject
• Mail minuteproject@gmail.com

Weitere ähnliche Inhalte

Was ist angesagt?

1장 Java란 무엇인가.key
1장 Java란 무엇인가.key1장 Java란 무엇인가.key
1장 Java란 무엇인가.key
김 한도
 
Profiler Instrumentation Using Metaprogramming Techniques
Profiler Instrumentation Using Metaprogramming TechniquesProfiler Instrumentation Using Metaprogramming Techniques
Profiler Instrumentation Using Metaprogramming Techniques
Ritu Arora
 
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
manssandstrom
 

Was ist angesagt? (20)

OSGi Best Practices - Tim Ward
OSGi Best Practices - Tim WardOSGi Best Practices - Tim Ward
OSGi Best Practices - Tim Ward
 
Overview of JPA (Java Persistence API) v2.0
Overview of JPA (Java Persistence API) v2.0Overview of JPA (Java Persistence API) v2.0
Overview of JPA (Java Persistence API) v2.0
 
Обзор продуктов IBM Rational
Обзор продуктов IBM RationalОбзор продуктов IBM Rational
Обзор продуктов IBM Rational
 
1장 Java란 무엇인가.key
1장 Java란 무엇인가.key1장 Java란 무엇인가.key
1장 Java란 무엇인가.key
 
Profiler Instrumentation Using Metaprogramming Techniques
Profiler Instrumentation Using Metaprogramming TechniquesProfiler Instrumentation Using Metaprogramming Techniques
Profiler Instrumentation Using Metaprogramming Techniques
 
PROSA - Eclipse Is Just What?
PROSA - Eclipse Is Just What?PROSA - Eclipse Is Just What?
PROSA - Eclipse Is Just What?
 
What Your Jvm Has Been Trying To Tell You
What Your Jvm Has Been Trying To Tell YouWhat Your Jvm Has Been Trying To Tell You
What Your Jvm Has Been Trying To Tell You
 
Interop Cloud Keynote with Terremark, VMWare, and Citrix
Interop Cloud Keynote with Terremark, VMWare, and CitrixInterop Cloud Keynote with Terremark, VMWare, and Citrix
Interop Cloud Keynote with Terremark, VMWare, and Citrix
 
Project Zero JavaOne 2008
Project Zero JavaOne 2008Project Zero JavaOne 2008
Project Zero JavaOne 2008
 
3장. Garbage Collection
3장. Garbage Collection3장. Garbage Collection
3장. Garbage Collection
 
6장 Thread Synchronization
6장 Thread Synchronization6장 Thread Synchronization
6장 Thread Synchronization
 
Correlation of simulation_models_using_concept_modeling
Correlation of simulation_models_using_concept_modelingCorrelation of simulation_models_using_concept_modeling
Correlation of simulation_models_using_concept_modeling
 
Airbus Internship Presentation 2012
Airbus Internship Presentation 2012Airbus Internship Presentation 2012
Airbus Internship Presentation 2012
 
2장. Runtime Data Areas
2장. Runtime Data Areas2장. Runtime Data Areas
2장. Runtime Data Areas
 
PHP on Java (BarCamp London 7)
PHP on Java (BarCamp London 7)PHP on Java (BarCamp London 7)
PHP on Java (BarCamp London 7)
 
A Java Implementer's Guide to Better Apache Spark Performance
A Java Implementer's Guide to Better Apache Spark PerformanceA Java Implementer's Guide to Better Apache Spark Performance
A Java Implementer's Guide to Better Apache Spark Performance
 
7장 Oracle As Datasource
7장 Oracle As Datasource7장 Oracle As Datasource
7장 Oracle As Datasource
 
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
 
Kanban vs scrum
Kanban vs scrumKanban vs scrum
Kanban vs scrum
 
Process Matters (Cloud2Days / Java2Days conference))
Process Matters (Cloud2Days / Java2Days conference))Process Matters (Cloud2Days / Java2Days conference))
Process Matters (Cloud2Days / Java2Days conference))
 

Ähnlich wie Florian adler minute project

When Two Worlds Collide: Java and Ruby in the Enterprise
When Two Worlds Collide: Java and Ruby in the EnterpriseWhen Two Worlds Collide: Java and Ruby in the Enterprise
When Two Worlds Collide: Java and Ruby in the Enterprise
benbrowning
 
NIG系統報表開發指南
NIG系統報表開發指南NIG系統報表開發指南
NIG系統報表開發指南
Guo Albert
 
What is new and cool j2se & java
What is new and cool j2se & javaWhat is new and cool j2se & java
What is new and cool j2se & java
Eugene Bogaart
 
What's new in Nuxeo 5.2? - Solutions Linux 2009
What's new in Nuxeo 5.2? - Solutions Linux 2009What's new in Nuxeo 5.2? - Solutions Linux 2009
What's new in Nuxeo 5.2? - Solutions Linux 2009
Stefane Fermigier
 
Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012
Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012
Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012
Alexandre Morgaut
 
NIG 系統開發指引
NIG 系統開發指引NIG 系統開發指引
NIG 系統開發指引
Guo Albert
 

Ähnlich wie Florian adler minute project (20)

When Two Worlds Collide: Java and Ruby in the Enterprise
When Two Worlds Collide: Java and Ruby in the EnterpriseWhen Two Worlds Collide: Java and Ruby in the Enterprise
When Two Worlds Collide: Java and Ruby in the Enterprise
 
10 reasons why Nuxeo is using GlassFish
10 reasons why Nuxeo is using GlassFish10 reasons why Nuxeo is using GlassFish
10 reasons why Nuxeo is using GlassFish
 
NIG系統報表開發指南
NIG系統報表開發指南NIG系統報表開發指南
NIG系統報表開發指南
 
What is new and cool j2se & java
What is new and cool j2se & javaWhat is new and cool j2se & java
What is new and cool j2se & java
 
Introducing spring
Introducing springIntroducing spring
Introducing spring
 
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
Wakanda: NoSQL & SSJS for Model-driven Web Applications - SourceDevCon 2012
 
What's new in Nuxeo 5.2? - Solutions Linux 2009
What's new in Nuxeo 5.2? - Solutions Linux 2009What's new in Nuxeo 5.2? - Solutions Linux 2009
What's new in Nuxeo 5.2? - Solutions Linux 2009
 
Cloudfoundry architecture
Cloudfoundry architectureCloudfoundry architecture
Cloudfoundry architecture
 
Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012
Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012
Wakanda: NoSQL for Model-Driven Web applications - NoSQL matters 2012
 
Valtech Days 2009 Paris Presentation: WCM in 2010 and an intro to CQ5
Valtech Days 2009 Paris Presentation: WCM in 2010 and an intro to CQ5Valtech Days 2009 Paris Presentation: WCM in 2010 and an intro to CQ5
Valtech Days 2009 Paris Presentation: WCM in 2010 and an intro to CQ5
 
Ese2008 Swordfish
Ese2008 SwordfishEse2008 Swordfish
Ese2008 Swordfish
 
Devignition 2011
Devignition 2011Devignition 2011
Devignition 2011
 
Plugin-able POS Solutions by Javascript @HDM9 Taiwan
Plugin-able POS Solutions by Javascript @HDM9 TaiwanPlugin-able POS Solutions by Javascript @HDM9 Taiwan
Plugin-able POS Solutions by Javascript @HDM9 Taiwan
 
NIG 系統開發指引
NIG 系統開發指引NIG 系統開發指引
NIG 系統開發指引
 
Agile Edge Valtech
Agile Edge ValtechAgile Edge Valtech
Agile Edge Valtech
 
New Features of Java7 SE
New Features of Java7 SENew Features of Java7 SE
New Features of Java7 SE
 
Workshop OSGI PPT
Workshop OSGI PPTWorkshop OSGI PPT
Workshop OSGI PPT
 
JavaOne 2011: Migrating Spring Applications to Java EE 6
JavaOne 2011: Migrating Spring Applications to Java EE 6JavaOne 2011: Migrating Spring Applications to Java EE 6
JavaOne 2011: Migrating Spring Applications to Java EE 6
 
Web Content Management And Agile
Web Content Management And AgileWeb Content Management And Agile
Web Content Management And Agile
 
Introducing JSR-283
Introducing JSR-283Introducing JSR-283
Introducing JSR-283
 

Mehr von Dmitry Buzdin

Developing Useful APIs
Developing Useful APIsDeveloping Useful APIs
Developing Useful APIs
Dmitry Buzdin
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на Одноклассниках
Dmitry Buzdin
 
Riding Redis @ask.fm
Riding Redis @ask.fmRiding Redis @ask.fm
Riding Redis @ask.fm
Dmitry Buzdin
 
Rubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIRubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part II
Dmitry Buzdin
 
Rubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsRubylight Pattern-Matching Solutions
Rubylight Pattern-Matching Solutions
Dmitry Buzdin
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
Dmitry Buzdin
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
Dmitry Buzdin
 
Rubylight programming contest
Rubylight programming contestRubylight programming contest
Rubylight programming contest
Dmitry Buzdin
 
Continuous Delivery
Continuous Delivery Continuous Delivery
Continuous Delivery
Dmitry Buzdin
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
Dmitry Buzdin
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump Analysis
Dmitry Buzdin
 

Mehr von Dmitry Buzdin (20)

How Payment Cards Really Work?
How Payment Cards Really Work?How Payment Cards Really Work?
How Payment Cards Really Work?
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
How to grow your own Microservice?
How to grow your own Microservice?How to grow your own Microservice?
How to grow your own Microservice?
 
How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?
 
Delivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDelivery Pipeline for Windows Machines
Delivery Pipeline for Windows Machines
 
Big Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureBig Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop Infrastructure
 
JOOQ and Flyway
JOOQ and FlywayJOOQ and Flyway
JOOQ and Flyway
 
Developing Useful APIs
Developing Useful APIsDeveloping Useful APIs
Developing Useful APIs
 
Whats New in Java 8
Whats New in Java 8Whats New in Java 8
Whats New in Java 8
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на Одноклассниках
 
Dart Workshop
Dart WorkshopDart Workshop
Dart Workshop
 
Riding Redis @ask.fm
Riding Redis @ask.fmRiding Redis @ask.fm
Riding Redis @ask.fm
 
Rubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIRubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part II
 
Rubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsRubylight Pattern-Matching Solutions
Rubylight Pattern-Matching Solutions
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
 
Rubylight programming contest
Rubylight programming contestRubylight programming contest
Rubylight programming contest
 
Continuous Delivery
Continuous Delivery Continuous Delivery
Continuous Delivery
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump Analysis
 

Kürzlich hochgeladen

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Kürzlich hochgeladen (20)

Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 

Florian adler minute project

  • 1. MinuteProject reverse-engineering short stories Florian Adler Riga 7/6/12
  • 2. About me French, living in Belgium Java dev, founder of minuteproject Working @EC Former navy officer dropped in IT minefield at Y2K
  • 3. Agenda • MinuteProject Overview Demo1 – simple JPA2 backend • Customisation Demo2 – model evolution JPA2 • Integration technics Demo3 – REST app CXF/spring/jpa2 • Statement Driven Development Demo4 – REST app with SDD • Goodies Demo5 – OpenXava app • Extend Minuteproject/ contribute? http://minuteproject.blogspot.be/2012/05/minuteproject-reverse-engineering-short.html
  • 4. Overview MinuteProject is a: • Code generator • OpenSource Apache v2 licence • 4000+ downloads • Reverse-engineering tool – RDBMS – WSDL
  • 5. Target Techno Ecosystem REST REST JSF Vaadin CXF SpringMVC Primefaces JSF REST Spring configuration WS Primefaces Jersey DAO – ORM integration EJB – CDI – DAO DAO layer Layer Under investigation JPA2 JPA (2/1) Hibernate iBatis First Release OpenXava FitNesse Mature JOOQ MinuteProject Tutorial Rails Roo Generator Under development Grails Automated Business Benerator Logic Play Load model Enrich Generate
  • 6. Techno Demos REST REST JSF Vaadin CXF SpringMVC Primefaces JSF REST Spring configuration WS Primefaces Jersey DAO – ORM integration EJB – CDI – DAO Layer DAO layer DEMOS JPA2 JPA2 Hibernate iBatis OpenXava FitNesse JOOQ MinuteProject Tutorial Rails Roo Generator Grails Automated Business Benerator Logic Play Load model Enrich Generate
  • 7. Why MinuteProject? • Why code generation? • Do not reinvent the wheel – i.e. let the others do the framework/specs • Crystallize your knowledge • Go fast and customise • Reverse-Engineering is not a one shot process
  • 8. When to use it? • Legacy model upgrades to new tech • Work from scratch: – Development tool – Iterative methodology • Your own model as your technology tutorial
  • 9. MP generated Artifacts Operating Mechanism Target MP engine Technologies B Generates Target Technologies A Loads Uses DB model structure Applies templates MP main config Loads metadata Enriches model Target Technology A/B Database model Templates
  • 10. Demo 1 – JPA2 http://minuteproject.blogspot.be/2012/05/rigajug-demo-1-jpa2.html
  • 11. Demo 1 - explanations • Start from scratch • Generate from the console & command line • Review artifacts • Write a unit test
  • 12. Customisation • Art of enrichment • Art of reverse-analysis • Configure model/target Configuration options Individual (fine grain) Global (declarative conventions) http://minuteproject.wikispaces.com/Convention
  • 13. Demo 2 – JPA2 http://minuteproject.blogspot.be/2012/05/rigajug-demo-2-jpa2.html
  • 14. Demo 2 - explanations • Start from scratch • Generate from the console & command line • Review artifacts • Write a unit test • Secure modified code
  • 15. Integration Technics 2 standards • integration by extension • integration by overriding MP adds a new one • integration by alteration/mutation • 3 types of alteration – artifact level (exclude for next generation) – added section – updatable section
  • 16. Demo 3 - REST Architecture blocks CXF S P R DAO I N JPA2 G http://minuteproject.blogspot.be/2012/05/rigajug-demo-rest-cxf.html
  • 17. Demo 3 - explanations • Start from scratch • Artifacts review: – CXF track – Spring config – Backend DAO – JPA2 – Maven projects • Deploy and test on Tomcat • Test URL
  • 18. SDD – Statement Driven Dev. • Sometimes statements are just enough • Model is secondary • You just need: – Statement ex: query – I/O
  • 19. SDD example Start from an SQL query to deduce function and output select k.key_name, t.translation, t.date_finalization, l.code, l.description, tl.first_name, tl.last_name, tl.email from translation t, language l, user tl, translation_key k where t.language_id = l.idlanguage and tl.idUser = t.translator_id and k.id = t.key_id order by key_name
  • 20. SDD example Provide some input select k.key_name, t.translation, t.date_finalization, l.code, l.description, tl.first_name, tl.last_name, tl.email from translation t, language l, user tl, translation_key k where t.language_id = l.idlanguage and tl.idUser = t.translator_id and k.id = t.key_id and k.key_name like ? and l.code like ? order by key_name limit ?
  • 21. SDD - example Feed statement into Minuteproject <query name="get translation info"> <query-body> <value> <![CDATA[select k.key_name, t.translation, t.date_finalization, l.code, l.des cription, tl.first_name, tl.last_name, tl.email from translation t, language l, user tl, translation_key k where t.language_id = l.idlanguage and tl.idUser = t.translator_id and k.id = t.key_id and k.key_name like ? and l.code like ? order by key_name limit ?]]> </value> </query-body>
  • 22. SDD - example Feed input into Minuteproject <query-params> <query-param name="key" is-mandatory="false" type="STRING" sample="'test'"/> <query-param name="code" is-mandatory="false" type="STRING" sample="'FR'"/> <query-param name="max" is-mandatory="false" type="INT" sample="10"/> </query-params>
  • 23. Demo 4 SDD is WYSIWYG what you STATE is what you get http://minuteproject.blogspot.be/2012/05/rigajug-demo-rest-sdd.html
  • 24. Goodies Why not have a JEE web app instantly OpenXava app generation • Is a RAD Open Source JEE framework based on JPA2 • Has front-end rendering annotation on entities • Is AJAX
  • 25. Demo 5 – OpenXava App MinuteProject generates: • OpenXava project artifacts • Build and deploy script http://minuteproject.blogspot.be/2012/05/rigajug-demo-instant-openxava-app.html
  • 26. Extend MinuteProject Artifacts can be generated at multiple levels: • Field • Entities (table,view) • Package • Model • Application
  • 27. Extend MinuteProject • Add a track • Add template metadata • Add template (velocity) • Add library • Add plugin • Artifact cross-reference
  • 28. Success stories • Belgium Finance Ministry • European Commission • In Latvia
  • 29. FAQ
  • 30. Contact • Twitter @minuteproject • Googlegroup minuteproject • Mail minuteproject@gmail.com

Hinweis der Redaktion

  1. You have the function and its output