# Developing Microservice-Based Applications Using the Silvera Domain-Specific Language
## 2 Related Work
### Existing MSA Frameworks
JHipster can be used online or installed locally with NPM (NPM--[[https://www.npmjs.com/](https://www.npmjs.com/)]([https://www.npmjs.com/](https://www.npmjs.com/)) (accessed on 18 January 2022)), Yam (Yam--[[https://yarnpkg.com/](https://yarnpkg.com/)]([https://yarnpkg.com/](https://yarnpkg.com/)) (accessed on 18 January 2022)), or Docker (Docker-[[https://www.docker.com/](https://www.docker.com/)]([https://www.docker.com/](https://www.docker.com/)) (accessed on 18 January 2022)). However, the online version is quite limiting by default, and to achieve the full experience, users must allow access to either GitHub or GitLab accounts. Installing JHipster locally can be troublesome, but it is the preferred way. **LEMMA** (Language Ecosystem for Modeling Microservice Architecture) is a set of Eclipse-based modeling languages and model transformations for developing MSA [43]. These languages provide different modeling viewpoints for different roles in a microservice development team [45]. By introducing explicit modeling viewpoints, LEMMA decomposes the system into smaller, more specialized parts. Because of this, each role is presented only with the information relavant for that role [45]. Just like AjiL, LEMMA is also based on the Eclipse ecosystem. **Jolie** is a service-oriented programming language [44]. A service, in Jolie, is composed of two parts: behavior and deployment. A behavior part defines the implementation of the service's functionalities, whereas the deployment part defines the necessary information for establishing communication links between services [44]. The Jolie interpreter is implemented in Java, and it comes with a Java API to interact with it. Because both TheArchitect and MicroBuilder are not publicly available, unlike the rest of presented tools (which are all open-source projects), we were unable to study them in greater detail. The comparison of available features in Silvera, MAGMA, AjiL, JHipster, LEMMA, and Jolie is shown in Table 3, whereas a comparison of implemented microservice design patterns is shown in Table 4. Table 4 contains only patterns implemented by at least one of the tools. Silvera is a lightweight language. Because of this, it can be used in any text editor, whereas AjiL is tightly coupled with its GUI editor. The simple textual notation also enables easier collaboration through version control systems. Silvera shares this characteristic with JDL. All tools presented in this section, except Jolie, implement the _API Gateway_ pattern from the _External API_ group of patterns. Similarly, these tools also implement the _Circuit Breaker_ pattern from the _Reliability_ group of patterns. In Jolie, these patterns are not implemented as part of the language. However, Jolie offers composition primitives that can be used for manual implementation of these patterns. Unlike other tools presented in this section, both Silvera and LEMMA are built with heterogeneity in mind. LEMMA provides a _Technology Modeling Language_ (TML), where users model custom technology aspects. The disadvantage of TML is that it does not support versioning, meaning that only one version of the _Technology Language_ is supported. On the other hand, Silvera supports an arbitrary number of programming languages and their versions (see Section 3.4). Various implementations of microservices, API gateways, service registries, and message brokers can also be supported easily. This allows developers to use the best tool for the job and also supports experimentation. Silvera uses microservice-tailored metrics to evaluate the architecture of the designed system. Besides TheArchitect, no other tool presented in this section supports architecture evaluation. However, metrics used by TheArchitect are mainly derived from _Object-Oriented_ design and, as such, are not fully applicable to microservice-based systems [46]. Additionally, in Silvera, users can easily provide custom evaluation functions (see Section 3.4.3).