Florian adler minute project

  • 1,038 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,038
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
9
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • You have the function and its output

Transcript

  • 1. MinuteProject reverse-engineering short storiesFlorian Adler Riga 7/6/12
  • 2. About meFrench, living in BelgiumJava dev, founder of minuteprojectWorking @ECFormer 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. OverviewMinuteProject 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 LayerUnder investigation JPA2 JPA (2/1) Hibernate iBatis First Release OpenXava FitNesse Mature JOOQ MinuteProject Tutorial Rails Roo GeneratorUnder 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 layerDEMOS 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 – JPA2http://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/targetConfiguration optionsIndividual (fine grain)Global (declarative conventions)http://minuteproject.wikispaces.com/Convention
  • 13. Demo 2 – JPA2http://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 Technics2 standards• integration by extension• integration by overridingMP 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 - RESTArchitecture blocks CXF S P R DAO I N JPA2 Ghttp://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 exampleStart from an SQL queryto 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 exampleProvide 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 - exampleFeed 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 - exampleFeed 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 gethttp://minuteproject.blogspot.be/2012/05/rigajug-demo-rest-sdd.html
  • 24. GoodiesWhy not have a JEE web app instantlyOpenXava 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 AppMinuteProject generates:• OpenXava project artifacts• Build and deploy scripthttp://minuteproject.blogspot.be/2012/05/rigajug-demo-instant-openxava-app.html
  • 26. Extend MinuteProjectArtifacts 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