cg2012 niet-geanimeerd
TRANSCRIPT
![Page 1: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/1.jpg)
Transforming a 15 year old model-driven application from C++ to Java
Eric Jan MalotauxCode Generation 2012, Cambridge, UK2012-03-28
1
![Page 2: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/2.jpg)
Overview
![Page 3: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/3.jpg)
3
OVERVIEW
Who I Am
The Assignment
Renovating applications
The Strategy
Lessons Learned
Unsolved Problems
![Page 4: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/4.jpg)
4
WHO AM I
Eric Jan Malotaux
Software Architect with Ordina, ICT service provider in the Netherlands
Trained as a musician and musicologist
27 years experience in software development
What I learned
Automated procedures (software factory) as important as programming skills
Communication and trust within a team even more important
Specialties – anything that speeds up software development
Software factories – automating as much as possible
Agile development (extreme programming, Scrum)
Model-driven code generation
![Page 5: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/5.jpg)
The AssignmentTransforming a 15 year old model-driven application from C++ to Java
![Page 6: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/6.jpg)
6
THE ASSIGNMENTTHE APPLICATION
A very succesful mortgage application
185 screens
100 users
Quarterly releases
Sizeable model: 200,000 lines (10Mb) of XMI
Using a proprietary model-driven code generator
Several interfaces to external systems: queues
Several native Windows DLL's for complicated calculations
![Page 7: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/7.jpg)
![Page 8: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/8.jpg)
8
THE ASSIGNMENTTHE MODELER/GENERATOR
Old, but very complete
Model in relational tables (DB2)
Modeler written in MS-Access
C++ Class Tree to keep model in memory
Loader containing mapping (DB → Class Tree) knowledge
Hand-written C++ framework, modeled
Persistence support classes, including lazy loading
User Interface support classes
Action Language: COOL (Common Object Oriented Language)
Methods on objects
Actions on UI elements, like buttons
Implicit metamodel (as far as known)
![Page 9: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/9.jpg)
9
THE ASSIGNMENTWHY TRANSFORM?
Dependent on outdated C++ compiler and libraries
Scarce expertise
Model-driven techniques in general
The proprietary modeler/generator in particular
C++
Modeler/generator maintained, but not further development
Doesn't fit in Enterprise Architecture
Difficult to offshore
Want a mainstream Java web application
And no code generator anymore please, thank you very much.
No dependency on proprietary tools
Current developers where quite happy, though
![Page 10: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/10.jpg)
Renovating applications
![Page 11: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/11.jpg)
Requirements
Specifications
Implementation
Goals
Legacy application Renovated application
![Page 12: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/12.jpg)
Requirements
Specifications
Implementation
Goals
Implementation
Automatic C++ to Java translation
Legacy application Renovated application
![Page 13: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/13.jpg)
Requirements
Specifications
Implementation
Goals
Specifications
Implementation
Automatic C++ to Java translation
update
Legacy application Renovated application
reverse engineering
![Page 14: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/14.jpg)
Requirements
Specifications
Implementation
Goals Goals
Requirements
Specifications
Implementation
Automatic C++ to Java translation
update
update
update
Legacy application Renovated application
reverse engineering
reverse engineering
reverse engineering
![Page 15: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/15.jpg)
The Strategy
![Page 16: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/16.jpg)
Requirements
FASTmodel
(database)
C++implementatio
n
Goals
Javaimplementatio
n
Legacy application Renovated application
C++ generator C++ generator
![Page 17: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/17.jpg)
Requirements
FASTmodel
(database)
C++implementatio
n
Goals
Mod4Jmogram
(textual DSL)
Javaimplementatio
n
C++ extractor
Xpandgenerator
Legacy application Renovated application
C++ generator C++ generator
![Page 18: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/18.jpg)
Requirements
FASTmodel
(database)
C++implementatio
n
Goals
Mod4Jmogram
(textual DSL)
Javaimplementatio
n
C++ extractor
Xpandgenerator
Legacy application Renovated application
C++ generator C++ generator
FASTmodel(xmi)
C++extractor
Xtend2generator
![Page 19: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/19.jpg)
Requirements
FASTmodel
(database)
C++implementatio
n
Goals
Javaimplementatio
n
Legacy application Renovated application
C++ generator C++ generator
FASTmodel(xmi)
C++extractor
Xtend2generator
![Page 20: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/20.jpg)
Migrating the (meta)models
![Page 21: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/21.jpg)
SQL
FASTmetamodel(relational)
FMAmodel
(database)
FMAuser data
expressed in
expressed in
AbstractSyntax
“Class Tree”
C++
Modelobjectgraph
expressed in
expressed in
load
FMAexpor
t(C++)
UML
FASTmetamodel
expressed in
EA C++import
Ecore
FASTmetamodel
(ecore)
expressed in
EA ecoreexport
FMAmodel(xmi)
expressed in
FMAapplication
Export
generator
(xtend2)FMAgen
erators
(xtend2)
Old
M2
M1
M0
M3
NewIntermediate(Enterprise Architect)
FMAgen
erators
(C++)
![Page 22: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/22.jpg)
FASTmetamo
del
FMAmodel
(database)
FMAmodel
Load/extract
FAST“Class
Tree”
Enterprise
Architect
FASTmetamo
del(ecore)
FMAmodel(XMI)
EMFgenerato
r
FASTmodel
Java API
FASTeditor
FMA(Java)
JNAadapters(Java)
FASTframewo
rk(Java)
External(MQ)
classes
(Java)
maven/javac/build
FMA(JWS/jar
)FMAdata
FMAexample(Java)
External(MQ)
classes
(C++)
FASTframewo
rk(C++)
Extractor
generator
(xtend2)
FMA
generator
(xtend2)
given
generated
manual
tools
Legenda
![Page 23: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/23.jpg)
Lessons Learned
![Page 24: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/24.jpg)
24
LESSONS LEARNEDThe value of an explicit metamodel
Help in understanding the model
Generated export program
Generated tree editor
Generated model API
Basis for a new DSL
![Page 25: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/25.jpg)
25
LESSONS LEARNEDGenerator architecture
Consistent naming
Use an intermediate model
![Page 26: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/26.jpg)
26
LESSONS LEARNEDIncompatible source/target architecture
Layering: classic client → server, modern three-tiered
Lazy loading assumed in the COOL Action Language
One Action Language for UI and Class Methods
![Page 27: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/27.jpg)
27
LESSONS LEARNEDKnow your tools
Know your tools
EMF is a great tool, once you obtain a copy of the EMF book
Xtext2, needed for COOL Parser, difficult to integrate
Xtend2, nice but still buggy
![Page 28: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/28.jpg)
28
REMAINING UNSOLVED PROBLEMS
Eclipse is a hard to tame beast!
Working combination of (versions of) plugins
Hard to get rid of red crosses
Continuous integration
Maven ↔ OSGi: two worlds
Eclipse artifacts (not) in public maven repositories
![Page 29: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/29.jpg)
29
REMAINING CHALLENGEMaintaining the migrated model
Use the EMF-generated tree editor
already as good as, or better than, the Access application
Derive an Xtext grammar from the metamodel
Manual adjustments
Have a DSL almost for free
Familiar concepts: the metamodel (language) was not changed.
![Page 30: Cg2012 niet-geanimeerd](https://reader030.vdocuments.net/reader030/viewer/2022032616/55a4acfd1a28abfe6c8b45d4/html5/thumbnails/30.jpg)
30
www.ordina.nl