Transcript

MinuteProjectreverse-engineering

short stories

Florian AdlerRiga 7/6/12

About meFrench, living in BelgiumJava dev, founder of minuteprojectWorking @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

OverviewMinuteProject is a:• Code generator• OpenSource Apache v2 licence• 4000+ downloads• Reverse-engineering tool

– RDBMS– WSDL

Target Techno Ecosystem

JPA2 JPA (2/1) Hibernate iBatis

Spring configurationDAO – ORM integration

DAO layerEJB – CDI – DAO

Layer

OpenXava FitNesse

Under investigation

First Release

Mature

Under development

Vaadin

JSF Primefaces

RESTJersey

WS

RooRails

Benerator

Grails

Play

Tutorial

JSF Primefaces

REST CXF

RESTSpringMVC

JOOQ

AutomatedBusiness

Logic

MinuteProjectGenerator

Load modelEnrich

Generate

Techno Demos

JPA2 JPA2 Hibernate iBatis

Spring configurationDAO – ORM integration

DAO layerEJB – CDI – DAOLayer

OpenXava FitNesse

Vaadin

JSF Primefaces

RESTJersey

WS

RooRails

Benerator

Grails

Play

Tutorial

JSF Primefaces

REST CXF

RESTSpringMVC

JOOQ

AutomatedBusiness

Logic

Load modelEnrich

Generate

MinuteProjectGenerator

DEMOS

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

Operating Mechanism

MP engine

MP

gen

erat

ed A

rtif

acts

Target Technologies A

TargetTechnologies B

Target Technology A/BTemplates

MP main configEnriches model

Loads

Loads metadata

Applies templates

Generates

Database model

Uses DB modelstructure

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 optionsIndividual (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 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

Demo 3 - REST

Architecture blocks

http://minuteproject.blogspot.be/2012/05/rigajug-demo-rest-cxf.html

JPA2

DAO

CXF SPRING

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 exampleStart 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 kwheret.language_id = l.idlanguageand tl.idUser = t.translator_idand k.id = t.key_idorder by key_name

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 kwheret.language_id = l.idlanguageand tl.idUser = t.translator_idand k.id = t.key_idand k.key_name like ?and l.code like ?order by key_namelimit ?

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.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 ?]]> </value></query-body>

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>

Demo 4

SDD is WYSIWYGwhat you STATE is what you get

http://minuteproject.blogspot.be/2012/05/rigajug-demo-rest-sdd.html

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

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 MinuteProjectArtifacts 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

F A Q

Contact• Twitter @minuteproject• Googlegroup minuteproject• Mail minuteproject@gmail.com

top related