## 3 Shared Data Access Microservice
### S1 Generation of the Spring Boot Project  
Using the Spring Initializr [60], generating multiple types of projects is possible. It offers JVM-based skeleton projects, which are related to different tools for building software projects, like Maven or Gradle, and through the usage of a variety of programming languages such as Java, Kotlin, and Groovy. The utility tool Spring Initializr can be used through the command line or through the custom Web UI (Figure 3). Some of the minimal settings that were selected for the current example are:  
1. _Maven_ as a build tool. Even if the developers use an IDE for writing code, the extended control of the project dependencies requires that they may constantly consult and correct the entries and their versions into the pom.xml file, which is created and maintained in the case of Maven projects. Maven offers many archetype projects, and it is used inside integrated development environments such as Eclipse. 2. Programming language selection: _Java_. Although the ownership of Java software development kits has become more complicated nowadays, it is still a good programming language, which has support for many types of web technologies and web projects. 3. Spring Boot version selection. Over time, many technologies and libraries have been created in the Java ecosystem. It yields that, in order to build a complex web project, the user simply needs to combine them and maintain compatibility between their versions. Spring Boot was conceived as a framework that assists the developer in creating stand-alone projects easily. Figure 2: Class diagram for data service. (4) Project packing type selection: _war_. A web application contains multiple classes, which can be easily handled by packing them into libraries and archives. An application archive may contain multiple other libraries. Spring Boot embeds the Tomcat web application server in order to run the project as a default Servlet container. By default, due to its configuration, it is possible for the application to be started as a Spring Boot application inside the Tomcat server. If the user wants to use another java Servlet container, the archive that contains the application must be deployed on that server. One of the first steps during the application deployment is represented by the unpacking of the application archive into proper installation directories. The created microservice is accessible through the defined endpoints, and it does not actually require the graphical user interface. Considering that a simple web application has been created, and the WildFly web server (Servlet container) has been used for its deployment, the archive type war (web archive) is chosen. (5) Select the targeted Java version for the project (in the current case, _Java_17). (6) Establish and select the dependencies (Web, Thymeleaf, JPA, database drivers, etc.) The Java web projects use the existing Java libraries to create and add new functionalities to the business processes. Maven uses the dependency concept to describe a library or a library package with some functionalities already implemented, which the project depends on. For example, the Apache Log4j library contains the logging functions for handling log messages and log files, and it can be used as a Maven dependency. The generation of the necessary web project implies that the following dependencies are selected:  
1. Spring Web--web application based on the Spring MVC framework;
2. Lombok--annotation library for avoiding boilerplate code;
3. Thymeleaf--server-side Java template engine;
4. Spring Data JPA--API for data persistence;  
Figure 3: Use of the Spring Initializr for initial project setup. * PostgreSQL Driver--Java SQL driver for connecting to PostgreSQL database server.