cg2012 niet-geanimeerd

30
Transforming a 15 year old model-driven application from C++ to Java Eric Jan Malotaux Code Generation 2012, Cambridge, UK 2012-03-28 1

Upload: eric-malotaux

Post on 14-Jul-2015

190 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Cg2012 niet-geanimeerd

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

Overview

Page 3: Cg2012 niet-geanimeerd

3

OVERVIEW

Who I Am

The Assignment

Renovating applications

The Strategy

Lessons Learned

Unsolved Problems

Page 4: Cg2012 niet-geanimeerd

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

The AssignmentTransforming a 15 year old model-driven application from C++ to Java

Page 6: Cg2012 niet-geanimeerd

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
Page 8: Cg2012 niet-geanimeerd

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

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

Renovating applications

Page 11: Cg2012 niet-geanimeerd

Requirements

Specifications

Implementation

Goals

Legacy application Renovated application

Page 12: Cg2012 niet-geanimeerd

Requirements

Specifications

Implementation

Goals

Implementation

Automatic C++ to Java translation

Legacy application Renovated application

Page 13: Cg2012 niet-geanimeerd

Requirements

Specifications

Implementation

Goals

Specifications

Implementation

Automatic C++ to Java translation

update

Legacy application Renovated application

reverse engineering

Page 14: Cg2012 niet-geanimeerd

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

The Strategy

Page 16: Cg2012 niet-geanimeerd

Requirements

FASTmodel

(database)

C++implementatio

n

Goals

Javaimplementatio

n

Legacy application Renovated application

C++ generator C++ generator

Page 17: Cg2012 niet-geanimeerd

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

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

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

Migrating the (meta)models

Page 21: Cg2012 niet-geanimeerd

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

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

Lessons Learned

Page 24: Cg2012 niet-geanimeerd

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

25

LESSONS LEARNEDGenerator architecture

Consistent naming

Use an intermediate model

Page 26: Cg2012 niet-geanimeerd

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

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

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

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

30

www.ordina.nl