<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Building MDE cloud services with D I S T I L</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Carlos Carrascal Manzanares, Jesús Sánchez Cuadrado, Juan de Lara Modelling and Software Engineering Research Group</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Jesus.Sanchez.Cuadrado</institution>
        </aff>
      </contrib-group>
      <abstract>
        <p>-Model-Driven Engineering (MDE) techniques, like transformations, queries, and code generators, were devised for local, single-CPU architectures. However, the increasing complexity of the systems to be built and their high demands in terms of computation, memory and storage, requires more scalable and flexible MDE techniques, likely using services and the cloud. Nonetheless, the cost of developing MDE solutions on the cloud is high without proper automation mechanisms. In order to alleviate this situation, we present DISTIL, a domain-specific language to describe MDE services, which is able to generate (NoSQL-based) respositories for the artefacts of interest, and skeletons for (single or composite) services, ready to be deployed in Heroku. We illustrate the approach through the construction of a repository and a set of cloud-based services for bento¯ reusable transformation components. Index Terms-Model-Driven Engineering, Domain-Specific Languages, Service-Oriented Programming, REST services, Cloud Computing, Code Generation</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>The development of a Model-Driven Engineering (MDE)
solution involves dealing with artifacts of different kinds and
their relationships. The most common approach is to store
artifacts using local folders and projects, for instance, using
the infrastructure of the Eclipse plataform. In this approach,
computations also occur in the local machine. This has several
shortcomings, such as limited reuse opportunities, scalability
problems and reduced flexibility.</p>
      <p>
        Instead, advanced solutions, aiming to tackle the challenges
of scalability and flexibility raised by today’s complex
systems [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], require scalable database storage, with retrieval
strategies of different nature, ranging from simple, tag-based
searchs to complex queries [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ], and the scalable execution of
model management operations such as model transformations,
or code generation.
      </p>
      <p>
        In this setting, cloud computing is an appealing approach to
build advanced solutions, with scalability up-front [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. While
there are many service providers, the entry level to develop a
cloud-based service is high, specially for research prototypes.
Thus, proposals to facilitate the development of cloud-based
MDE tools are needed to increase its adoption, both within the
MDE community but notably by other software engineering
communities.
      </p>
      <p>In this work we present our first results towards addressing
this issue. Our approach is based on a domain-specific
language intended to facilitate the specification of MDE services.
The language, named DISTIL (for MDE service SpecificaTIon
Language), permits the specification of the structure of the
repository for storing the MDE artifacts, the basic services
required for them (like upload, download or search), as well
as more advanced user-defined services, their (parallel or
sequential) composition, and their triggering conditions.</p>
      <p>
        DISTIL is accompanied with a set of code generators able
to synthesize the repository structure and persitence services,
to generate support for basic (REST) services for the defined
artifacts and skeletons for the user-defined services, and an
HTML web client interface for them. DISTIL uses by default
MongoDB [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] for the persistence, and the Spark Java
framework1 as the support for the REST services. The generated
elements are included in a project ready to be deployed in
the Heroku cloud platform [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. This way, using DISTIL,
the developer is freed from the technical details of the many
technologies involved, and typically he only needs to provide
the functionality (in Java) for the user-defined services. For
this purpose, the DISTIL development environment (an Eclipse
plugin) has a smooth integration with the Java IDE. We
illustrate the approach by defining a set of cloud services
for reusable model transformation components developed with
bento¯ [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
      </p>
      <p>The rest of the paper is organized as follows. Section II
introduces a running example that will be used in Section III to
explain the main concepts of the DISTIL language. Section IV
describes its tool support, Section V compares with related
research, and Section VI finishes with the conclusions and
plans for future work.</p>
    </sec>
    <sec id="sec-2">
      <title>II. RUNNING EXAMPLE</title>
      <p>We first start by proposing a motivating scenario, which we
then solve using DISTIL.</p>
      <p>
        Assume we would like to build a repository for reusable,
generic transformation components built with bento¯ [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. In
bento¯ , a basic reusable transformation component includes one
or more concepts and a transformation template (a regular ATL
transformation). A concept is similar to a meta-model, but it
describes the minimal structural requirements that a concrete
meta-model must fulfil for the reusable transformation to
become applicable to it. When the component is used, the
concept needs to be bound to a concrete meta-model, and then
the bento¯ engine rewrites the transformation template, so that
it gets adapted for the particular meta-model.
      </p>
      <p>
        In practice, a component developer is interested in
uploading components, and checking their correctness, for example
performing a static type-checking of the transformation [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] or
obtaining some metrics about the transformation and the found
errors. A reuser might be interested in retrieving components
using two main search strategies: (1) finding components via
tag search, and (2) retrieving components whose concept(s)
matches a given concrete meta-model. This process could be
integrated in the IDE or accessible via a web interface. Thus,
the repository should be accessible via a REST API to enable
different user interfaces.
      </p>
      <p>
        In previous works [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] we described the packaging
mechanism of bento¯ components. It includes a manifest file describing
the artefacts of the component, one or more .ecore files
implementing the component concepts and an ATL transformation
template. These elements are packaged into a zip file to ease
distribution.
      </p>
      <p>III. DISTIL: AN MDE SERVICE SPECIFICATION LANGUAGE</p>
      <p>The DISTIL language permits describing both the Artifacts
and the Services of interest. An excerpt of its meta-model is
shown in Fig. 1.</p>
      <p>By default, DISTIL uses MongoDB as the underlying
database system, and hence the Root class contains the URI
of the database (but providing a value is not mandatory). A
DISTIL specification is made of two parts. On the one hand,
a description of the structure of the artifacts of interest (using
classes Artifact and Entity) and their associated basic services.</p>
      <p>On the other hand, a declaration of the inputs and outputs of
extra user-defined services (subclasses of Service).</p>
      <p>An Artifact is an element to be stored in the repository. Its
definition triggers the creation of the corresponding database
structure, and hence a MongoDB collection is created for
every artifact. An Artifact is described by an extension, a
format, a set of basic services to be generated, and a set of
attributes. Attributes may be of primitive type (class Primitive),
references to Entities (class Reference) or to other Artifacts (class
ArtifactID). In MongoDB, each stored artifact (each document)
receives a String identifier. Therefore, while in the DISTIL
specification ArtifactID models a reference to another artifact, in
the generated code, the navigation is done through such string
identifiers. Entities are similar to Artifacts, but are used to factor
out commonalities of Artifacts, and hence they do not generate
a separate collection in the database. The required attribute in
Primitive attributes is used to indicate whether such attribute
will be required in the requests to the generated upload and
update services.</p>
      <p>For each Artifact DISTIL provides complete support for basic
services: upload, download, update, read, readAll, search and
delete (see the ServiceEnum enumerate type). However, new
user-defined services can be described through subclasses of
Service. On the one hand, SimpleServices receive Artifacts or
Entities as input and output. While services can be called on
demand, it is also possible to specify when they should
automatically be executed, for example when some basic service
is invoked for an Artifact. On the other hand, MultiServices are
used to compose (in sequence or parallel) several (composed or
simple) services. The language includes validations checking
the compatibility of the outputs/inputs of services. For inputs
and outputs it is possible to specify required values for some of
their attributes. As we will see in next section, DISTIL creates
both REST APIs and HTML front-ends for the specified
services (both basic and user-defined).</p>
      <p>
        Listing 1 shows the DISTIL specification for the running
example. The listing declares an Artifact for storing bento¯
components in lines 1–8. The Artifact declares in line 2
Listing 1: DISTIL specification for the running example
the extension (.bentoz), format (zip), and requires all basic The listing declares a multi-service Analyse (lines 31–34),
services. There are several built-in formats, and for some which runs in sequence the simple services TypeCheck and
of them automated injectors and extractors can be made Metrics when a bento¯ component is uploaded or updated. Both
available (e.g., for zip we automatically generate packing and services receive the bent o¯ component as input. TypeCheck (line
unpacking facilities). Then, in lines 4–7 defines the structure 37) is a simple service, whose goal is to statically analyse
of a component, which has the input and output concepts, the the transformation [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] and outputs a model reporting the
ATL transformations it encapsulates, and the tags. We use the problems found. Metrics (lines 40-43) is a service calculating
id prefix to indicate a reference to another artifact (e.g., in some transformation and error metrics, which also takes as
lines 4-7). The primitive attributes (tags in this case) are used input the output of the TypeCheck service.
to enable the search service. Notably, for string attributes our Please note that we declare constraints on the properties of
implementation of this service is able to look for synomyms, the allowed input and outputs of these services. This way, we
as it uses Wordnet [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], a lexical database for the English declare that the output artifact of TypeCheck has type.uri equal
language. to “http://prob.ecore”. In this case, this indicates the meta-model
      </p>
      <p>The listing also declares artefacts for storing the the model is an instance of. Finally, SemanticSearch is a service
ATL transformation (ATLTrafo, lines 10–15) and the meta- that does not define a trigger, and hence has to be invoked on
models/concepts (MetaModel, lines 17–22). It also declares an demand. Its input is a meta-model and its output is a collection
Artifact for models (Model, lines 24–28), because it is used by of bento¯ components whose concepts are structurally close to
other user-defined services. such meta-model. As we will see in next section, the DISTIL
description of user-defined services enables the generation of
supporting Java code, which the designer needs to fill with the
appropriate behaviour (calculation of metrics, type checking,
etc).</p>
    </sec>
    <sec id="sec-3">
      <title>IV. ARCHITECTURE AND TOOL SUPPORT</title>
      <p>A. Architecture</p>
      <p>We have built a code generator that, given a DISTIL
specification, synthesizes the needed repository structure, the
full implementation of the basic services, the skeleton of
user-defined services, and prepares the generated code in a
project ready to be deployed on Heroku. The latter includes the
needed dependencies, a pom.xml file for compiling the code
using Maven (https://maven.apache.org/), and some
configuration files for the execution in Heroku. The generated code
uses the Spark framework as the support for the generated
REST services, and MongoDB for the storage. However, the
generated code facilitates changing the database engine.</p>
      <p>DISTIL development environment
MDE
expert</p>
      <p>DISTIL
spec.</p>
      <p>1</p>
      <p>Heroku
2
3</p>
      <p>Artifact repo.
(MongoDB)</p>
      <p>REST
(Spark)</p>
      <p>HTML
(Freemarker)</p>
      <p>Client
application</p>
      <p>User</p>
      <p>Fig. 2 depicts the process to create cloud-based MDE
services with DISTIL, as well as the solution general architecture.
In a first step, the MDE expert interacts with the DISTIL IDE.
As we have seen, he should build a DISTIL specification.
The IDE generates Java code (label 2), and the engineer has
typically to fill some functionality holes for the user-defined
services. The details of the IDE and its ability to integrate
DISTIL programs with Java will be explained in the next
subsection. Then, the IDE (label 3) can package the different
artifacts to be uploaded into Heroku. By default, the generated
services contain the REST services for the basic and user
defined services, an HTML frontend (for which Freemarker
is used) and a MongoDB database. This way, the generated
services can be used by humans, or be integrated into client
applications. The REST services manage the different artifacts
using the JSON format.</p>
      <p>The generated code from a DISTIL specification extends a
manually created service kernel. The scheme of the generated
code is shown in Fig. 3. For each Artifact (e.g., ATLTrafo),
the generator synthesizes a Java package (atltrafoServices),
which contain both necessary classes to create the REST
API (package atltrafoServices.basic and class ATLTrafoJson), and
an automatically generated HTML web client (package
atltrafoServices.htmlCover and class CustomATLTrafoHtml), and for the
persistency (class ATLTrafo.java). Then, one class for each
userdefined service is also generated (in package service, not shown
in the figure). This generation scheme facilitates the extension
of the generated code with new features. For example, it is easy
to add features to the HTML client by modifying the methods
in class CustomATLTrafoHML. To give an idea of the size of our
framework, the kernel has over 1200 Lines of Code (LOC)
in 32 Java classes. The automatically generated Java code for
the example amounts to 2100 LOC in 47 Java classes, and the
code generator has over 3100 LOC in 22 xtend files.
persistence</p>
      <p>MongoDB</p>
      <p>Persistent
atlTrafoServices</p>
      <p>ATLTrafo
nameATL: String
abstractServices.basic</p>
      <p>BasicAbstract</p>
      <p>Json
ATLTrafoJson
postUpload(…)
basic
BasicATLTrafoCodes
BasicATLTrafoParam
BasicATLTrafoSpark
htmlCover
HtmlATLTrafoJson
HtmlATLTrafoLinks
HtmlATLTrafoSpark
HtmlATLTrafoView
abstractServices.htmlCover</p>
      <p>T &lt;
«interface» Persistent
HtmlInterface</p>
      <p>View</p>
      <p>T -&gt; ATLTrafo
CustomATL</p>
      <p>
        TrafoHtml
runService()
constructSearchForm()
constructUploadForm()
(label 1 in the figure) has been developed using Xtext [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], and
enables the following features:
1) Hyperlinking the Artifact and Service names with the
generated Java classes. The Java classes contain “holes”
where the user can provide extra functionality for the
services, which are marked as “TO-DOs”.
2) The DISTIL editor gives warnings if any of such
“TODOs” for any declared Artifact or Service remains. One
such warning is shown in the Figure (label 2), and we
provide a quickfix with an hyperlink to the corresponding
Java file (label 3).
      </p>
      <p>In the package explorer view of the Figure (label 4), we
can see that the DISTIL IDE has created services for every
Artifact and Service defined, following the scheme explained in
previous section.</p>
      <p>Fig. 5 shows how by hovering over the Artifact name, the
engineer is offered the possibility to navigate to the Java
classes which might need to be extended by hand. The code
generator respects the manually written code in the Java files,
so that it does not get overwritten.</p>
      <p>Fig. 5: Hyperlinking DISTIL specifications and generated Java
code</p>
      <p>Fig. 6 shows the search facility of the generated web
interface, running after it has been deployed in Heroku. It can
be noted that the interface permits search using synonyms.
The running example, is available at https://miso-distil-bento.
herokuapp.com/.</p>
    </sec>
    <sec id="sec-4">
      <title>V. RELATED WORK</title>
      <p>
        Typically, given a DISTIL program, the engineer would need One of the earliest work dealing with the servitization of
to fill some functionality “holes” in the generated classes. Next model operation is ModelBus [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. This was a tool
integrasubsection describes our tool support to make this process tion technology which built upon web wervices, following a
smooth. SOA approach. ModelBus featured a model repository and
facilitates the orchestration of modeling services. However,
B. The DISTIL development environment it lacked dedicated languages to describe both the repository
      </p>
      <p>
        We have built an Eclipse plugin aiming at providing a tight structure or the service integration.
and seamless integration of DISTIL with the generated Java With the advent of cloud technology, in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] the authors
code. The tool is freely available at http://miso.es/tools/distil. introduced the notion of Modeling as a Service (MaaS) as
html. a way to provide MDE services from the cloud, analysing
      </p>
      <p>One of the tool design goals is to facilitate the completion of the applications of such idea. Approaches to realize this
the generated code for the user-defined services using Java. A idea have emerged over the years. Some of them focus on
screenshot of the tool is shown in Fig. 4. The language editor the extensible definition of repositories for MDE artifacts.</p>
      <p>
        In this category, ReMoDD [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] is based on general-purpose
content management systems, like Drupal. On the other hand,
others like MORSE [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], have an explicit meta-model to
adapt to the specific artifact to be stored. MORSE is able to
store models and meta-models and provides version control.
      </p>
      <p>
        Another related approach is MDEForge [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], which is perhaps
the closest to our approach (http://mdeforge.org). MDEForge
is an extensible, generic respository to store MDE artifacts,
and provide services for them. MDEForge is extensible, as it
allows adding new kinds of artifacts and services. However,
while the previous approaches provide at most a meta-model
to customize the storage part, we provide a DSL and rich tool
support for both storage and service definition, including code
generation and deployment.
      </p>
      <p>Other approaches focus on providing specific MDE services.</p>
      <p>
        For example, AToMPM [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] offers a complete cloud-based
modelling environment, while Hypersonic [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] is a cloud-based
tool to perform model analysis. However, these approaches
are specific for a certain task (modelling, analysis), while we
provide a DSL to specify MDE cloud services.
      </p>
      <p>
        Service oriented programming languages, like Jolie [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]
provide primitives to define and orchestrate services. Instead,
we opted by a high-level DSL, and a code generation approach.
      </p>
      <p>However, in the future we aim to extend DISTIL with more
sophisticated service orchestration primitives.</p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], an approach called EMF-REST to expose an EMF
model as a REST API is presented. This allows basic model
management operations to be performed remotely. Our notion
of artifact is coarser grained, and thus we do not automatically
generate access facilities to individual elements. Instead,
services generated by EMF-REST could be manually integrated
into DISTIL generated code.
      </p>
      <p>
        Our approach to describe services is somehow similar to
Apache Ant (http://ant.apache.org/). In [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], Ant was extended
with model management tasks for e.g., model validation,
transformation or merging. However, these are not executed
in the cloud, but locally.
      </p>
      <p>Hence, altogether, the contribution of this work is a DSL
to describe both the structure of the MDE repository and the
associated services, supported by a generative framework.</p>
    </sec>
    <sec id="sec-5">
      <title>VI. CONCLUSIONS AND FUTURE WORK</title>
      <p>This paper has presented DISTIL, a domain-specific
language for specifying MDE services, to be deployed in the
cloud. The language permits generating No-SQL based
persitence services for the artifacts of interest, as well as skeletons
for user-defined services. The tool is tightly integrated with
the Java IDE, to facilitate the addition of functionality to the
service skeletons, and generates ready-to-deploy projects for
Heroku.</p>
      <p>
        In the future, we would like to provide support for other
cloud systems, in addition to Heroku, and enable the definition
of policies for scaling, like those of CloudMF [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. We are
also improving tool support, extending DISTIL with more
sophisticated support for service definition and composition
(like exception handling, compensation actions, transactions)
and using it for more advanced case studies.
      </p>
    </sec>
    <sec id="sec-6">
      <title>ACKNOWLEDGEMENTS</title>
      <p>Work supported by the Spanish Ministry of Economy and
Competitivity (TIN2011-24139, TIN2014-52129-R), the EU
commission (FP7-ICT-2013-10, #611125) and the Community
of Madrid (S2013/ICE-3006)</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>V.</given-names>
            <surname>Acretoaie</surname>
          </string-name>
          and
          <string-name>
            <given-names>H.</given-names>
            <surname>Störrle</surname>
          </string-name>
          .
          <article-title>Hypersonic - model analysis as a service</article-title>
          .
          <source>In Joint Proceedings of MODELS 2014 Poster Session and the ACM Student Research Competition</source>
          , volume
          <volume>1258</volume>
          <source>of CEUR Workshop Proceedings</source>
          , pages
          <fpage>1</fpage>
          -
          <lpage>5</lpage>
          . CEUR-WS.org,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>F.</given-names>
            <surname>Basciani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. D.</given-names>
            <surname>Rocco</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. D.</given-names>
            <surname>Ruscio</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. D.</given-names>
            <surname>Salle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Iovino</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <surname>A. Pierantonio.</surname>
          </string-name>
          <article-title>MDEForge: an extensible web-based modeling platform</article-title>
          .
          <source>In CloudMDE, satellite event of MoDELS</source>
          , volume
          <volume>1242</volume>
          <source>of CEUR Workshop Proceedings</source>
          , pages
          <fpage>66</fpage>
          -
          <lpage>75</lpage>
          . CEUR-WS.org,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>L.</given-names>
            <surname>Bettini</surname>
          </string-name>
          .
          <article-title>Implementing Domain-Specific Languages with Xtext and Xtend</article-title>
          .
          <source>Packt Publishing</source>
          ,
          <year>2013</year>
          . See also https://eclipse.org/Xtext/.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>H.</given-names>
            <surname>Brunelière</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Cabot</surname>
          </string-name>
          , and
          <string-name>
            <given-names>F.</given-names>
            <surname>Jouault</surname>
          </string-name>
          . Combining
          <string-name>
            <surname>Model-Driven Engineering</surname>
            and
            <given-names>Cloud</given-names>
          </string-name>
          <string-name>
            <surname>Computing</surname>
          </string-name>
          . In MDA4ServiceCloud, satellite event of ECMFA,
          <year>June 2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>K.</given-names>
            <surname>Chodorow. MongoDB: The Definitive Guide. O'Reilly Media</surname>
          </string-name>
          ,
          <year>2013</year>
          . See also https://www.mongodb.org/.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>J.</given-names>
            <surname>Corley</surname>
          </string-name>
          and
          <string-name>
            <given-names>E.</given-names>
            <surname>Syriani</surname>
          </string-name>
          .
          <article-title>A cloud architecture for an extensible multiparadigm modeling environment</article-title>
          .
          <source>In Joint Proceedings of MODELS 2014 Poster Session and the ACM Student Research Competition</source>
          , volume
          <volume>1258</volume>
          <source>of CEUR Workshop Proceedings</source>
          , pages
          <fpage>6</fpage>
          -
          <lpage>10</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>H.</given-names>
            <surname>Ed-Douibi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. L. C.</given-names>
            <surname>Izquierdo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Gómez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Tisi</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Cabot</surname>
          </string-name>
          .
          <article-title>EMF-REST: Generation of RESTful APIs from Models</article-title>
          .
          <source>arXiv preprint arXiv:1504.03498</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>T.</given-names>
            <surname>Erl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Puttini</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Z.</given-names>
            <surname>Mahmood</surname>
          </string-name>
          .
          <source>Cloud Computing: Concepts</source>
          ,
          <source>Technology &amp; Architecture. Prentice Hall</source>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>N.</given-names>
            <surname>Ferry</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Song</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Rossini</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Chauvel</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <surname>A. Solberg.</surname>
          </string-name>
          <article-title>CloudMF: Applying MDE to Tame the Complexity of Managing Multi-Cloud Applications</article-title>
          . In R. Bilof, editor,
          <source>UCC 2014: 7th IEEE/ACM International Conference on Utility and Cloud Computing</source>
          , pages
          <fpage>269</fpage>
          -
          <lpage>277</lpage>
          . IEEE Comp. Soc.,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>R.</given-names>
            <surname>France</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Bieman</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B. H. C.</given-names>
            <surname>Cheng</surname>
          </string-name>
          .
          <article-title>Repository for model driven development (ReMoDD)</article-title>
          .
          <source>In Proceedings of the 2006 International Conference on Models in Software Engineering, MoDELS'06</source>
          , pages
          <fpage>311</fpage>
          -
          <lpage>317</lpage>
          , Berlin, Heidelberg,
          <year>2006</year>
          . Springer-Verlag.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A.</given-names>
            <surname>Hanjura</surname>
          </string-name>
          .
          <source>Heroku Cloud Application Development. Packt Publishing</source>
          ,
          <year>2014</year>
          . See also http://heroku.com.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>T.</given-names>
            <surname>Holmes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>U.</given-names>
            <surname>Zdun</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Dustdar</surname>
          </string-name>
          .
          <article-title>Automating the management and versioning of service models at runtime to support service monitoring</article-title>
          .
          <source>In 16th IEEE International Enterprise Distributed Object Computing Conference, EDOC 2012</source>
          , pages
          <fpage>211</fpage>
          -
          <lpage>218</lpage>
          . IEEE Computer Society,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>D.</given-names>
            <surname>Kolovos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Paige</surname>
          </string-name>
          , and
          <string-name>
            <given-names>F.</given-names>
            <surname>Polack</surname>
          </string-name>
          .
          <article-title>A framework for composing modular and interoperable model management tasks</article-title>
          .
          <source>In In Model-Driven Tool and Process Integration Workshop</source>
          , pages
          <fpage>79</fpage>
          -
          <lpage>90</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>D.</given-names>
            <surname>Kolovos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Rose</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Matragkas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Paige</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Guerra</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. S.</given-names>
            <surname>Cuadrado</surname>
          </string-name>
          ,
          <string-name>
            <surname>J. De Lara</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          <string-name>
            <surname>Ráth</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Varró</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Tisi</surname>
            , and
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Cabot</surname>
          </string-name>
          .
          <article-title>A research roadmap towards achieving scalability in model driven engineering</article-title>
          . In BigMDE,
          <source>satellite event of STAF</source>
          , pages
          <volume>2</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>2</lpage>
          :
          <fpage>10</fpage>
          , New York, NY, USA,
          <year>2013</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>G. A.</given-names>
            <surname>Miller</surname>
          </string-name>
          .
          <article-title>Wordnet: A lexical database for english</article-title>
          .
          <source>Communications of the ACM</source>
          ,
          <volume>38</volume>
          (
          <issue>11</issue>
          ):
          <fpage>39</fpage>
          -
          <lpage>41</lpage>
          ,
          <year>1995</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>F.</given-names>
            <surname>Montesi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Guidi</surname>
          </string-name>
          , and
          <string-name>
            <given-names>G.</given-names>
            <surname>Zavattaro</surname>
          </string-name>
          .
          <article-title>Service-oriented programming with jolie</article-title>
          .
          <source>In Web Services Foundations</source>
          , pages
          <fpage>81</fpage>
          -
          <lpage>107</lpage>
          . Springer,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>J. Sánchez</given-names>
            <surname>Cuadrado</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Guerra</surname>
          </string-name>
          , and J. de Lara.
          <article-title>A component model for model transformations</article-title>
          .
          <source>IEEE Trans. on Soft. Eng.</source>
          ,
          <volume>40</volume>
          (
          <issue>11</issue>
          ):
          <fpage>1042</fpage>
          -
          <lpage>1060</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>J. Sánchez</given-names>
            <surname>Cuadrado</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Guerra</surname>
          </string-name>
          , and J. de Lara.
          <article-title>Uncovering errors in ATL model transformations using static analysis and constraint solving</article-title>
          .
          <source>In 25th IEEE International Symposium on Software Reliability Engineering, ISSRE</source>
          <year>2014</year>
          , pages
          <fpage>34</fpage>
          -
          <lpage>44</lpage>
          . IEEE,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>J. Sánchez</given-names>
            <surname>Cuadrado</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Guerra</surname>
          </string-name>
          , and J. de Lara.
          <article-title>Reusable model transformation components with bento¯</article-title>
          .
          <source>In Proceedings of ICMT'15</source>
          ,
          <string-name>
            <surname>LNCS</surname>
          </string-name>
          ,
          <year>2015</year>
          . Springer.
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>P.</given-names>
            <surname>Sriplakich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Blanc</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Gervais</surname>
          </string-name>
          .
          <article-title>Collaborative software engineering on large-scale models: requirements and experience in modelbus</article-title>
          .
          <source>In Proceedings of the 2008 ACM Symposium on Applied Computing (SAC)</source>
          , pages
          <fpage>674</fpage>
          -
          <lpage>681</lpage>
          . ACM,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>G.</given-names>
            <surname>Szárnyas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Izsó</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Ráth</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Harmath</surname>
          </string-name>
          , G. Bergmann, and
          <string-name>
            <given-names>D.</given-names>
            <surname>Varró</surname>
          </string-name>
          .
          <article-title>Incquery-d: A distributed incremental model query framework in the cloud</article-title>
          .
          <source>In MODELS</source>
          , volume
          <volume>8767</volume>
          <source>of LNCS</source>
          , pages
          <fpage>653</fpage>
          -
          <lpage>669</lpage>
          . Springer,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>