16
1 Code Generation as a Service Robert Crocombe, Dimitris Kolovos Department of Computer Science University of York

Code Generation as a Service

Embed Size (px)

Citation preview

Page 1: Code Generation as a Service

1

Code Generation as a Service

Robert Crocombe, Dimitris Kolovos Department of Computer Science

University of York

Page 2: Code Generation as a Service

2 Motivation

•  Model-Driven Engineering – Steep learning curve – Non-trivial tools with lots of dependencies

•  Lowering the entry barrier for developers – Allow developers to model with spreadsheets,

annotated drawings, XML etc. •  Lowering the entry barrier for users – Simplify distribution and use

Page 3: Code Generation as a Service

3 Scenario

•  Team of (non-MDE) developers •  Company/client has a bespoke data

persistence architecture –  e.g. system maintains multiple versions of the

data / authorisation through an external system •  Large legacy code-base – Rewriting all of it using a new framework not an

option •  New code amenable to generation

Page 4: Code Generation as a Service

4

$ orm –model m.uml –lang java –o /temp

Page 5: Code Generation as a Service
Page 6: Code Generation as a Service

6 Objectives

•  Simplify distribution of code generators – Minimise effort for generator developers and

users •  Ensure that all members of the team are

always working with the latest version of the generator

Page 7: Code Generation as a Service

7

$ xgen orm –model m.uml –lang java –o /temp

Page 8: Code Generation as a Service

8

=  

Page 9: Code Generation as a Service

9 <project> ... <property name="model" description="A valid UML model"/> <property name="lang"

description="Output language: java or python"/> <epsilon.emf.loadModel name="UML" file="${model}" ... /> <epsilon.evl src="orm.evl"> <!-- validation -->

<model ref="UML"/> </epsilon.evl> <epsilon.egl src="orm-${lang}.egx"> <!-- generation --> <model ref="UML"/> </epsilon.egl> ... </project>

build.xml

Page 10: Code Generation as a Service

10 <project> <!-- #file --> <property name="model" description="A valid UML model"/> <!-- #string --> <property name="lang"

description="Output language: java or python"/> <epsilon.emf.loadModel name="UML" file="${model}" ... /> <epsilon.evl src="orm.evl"> <!-- validation -->

<model ref="UML"/> </epsilon.evl> <epsilon.egl src="orm-${lang}.egx"> <!-- generation --> <model ref="UML"/> </epsilon.egl> ... </project>

build.xml

Page 11: Code Generation as a Service

11

$ xgen orm –model m.uml –lang java –o /temp

Page 12: Code Generation as a Service

12 Asynchronous Execution •  When xgen is executed: –  the server schedules a new generation job; –  returns the scheduled job's id

•  xgen can then query the server for the status of that job –  Waiting –  Running –  Compressing –  Success (separate call to retrieve output) –  Error (+log) –  Cancel

•  Jobs can be cancelled

Page 13: Code Generation as a Service

13

$ xgen orm –model m.uml –lang java –o /temp

Page 14: Code Generation as a Service

14

$ xgen dk/orm –model m.uml –lang java –o /temp

Page 15: Code Generation as a Service

15 Pros/Cons

•  Pros – Simplifies generator deployment – Users only need to install a thin client – Don't have to reveal the generation logic

•  Cons – Network latency – Generation server can become a bottleneck – Confidentiality

Page 16: Code Generation as a Service

16 Future Work •  Support other back-ends (e.g. GitLab) •  Private generator repositories •  Synchronous execution (for small jobs) •  Sandboxing •  Job management –  e.g. kill long-running jobs

•  Deploy a publicly-accessible version of the generation server –  e.g. on Google AppEngine