Please use this identifier to cite or link to this item: https://hdl.handle.net/1822/79920

TitleRefactoring Java monoliths into executable microservice-based applications
Other titlesRefactoring de monólitos em Java para aplicações baseadas em microsserviços executáveis
Author(s)Freitas, Francisco José Oliveira
Advisor(s)Cunha, Jácome
Ferreira, André Leite
KeywordsArquitetura de microsserviços
Aplicações baseadas em microsserviços
Decomposição de monólitos
Java
Refactoring
Microservice architecture
Microservice-based applications
Monolithic decomposition
Issue date17-May-2022
Abstract(s)Nos últimos anos assistiu-se a uma mudança drástica na forma como o software é desenvolvido. Os projectos de software de grande escala estão a ser construídos através de uma composição flexível de pequenos componentes possivelmente escritos em diferentes linguagens de programação e com os processos de deploy independentes – as chamadas aplicações baseadas em microsserviços. Isto tem sido motivado pelos desafios associados ao desenvolvimento, manutenção e evolução de grandes sistemas de software, mas também pelo aparecimento da cloud e pela facilidade que trouxe em termos de escalabilidade horizontal, reutilização e flexibilidade na propriedade e no deploy. O crescimento dramático da popularidade dos microsserviços levou várias empresas a aplicar grandes refactorings aos seus sistemas de software. Contudo, esta é uma tarefa desafiante que pode demorar vários meses ou mesmo anos. Esta dissertação propõe uma metodologia capaz de transformar automaticamente aplicações desenvolvidas em Java sob uma arquitetura monolítica em aplicações baseadas em microserviços. A metodologia proposta é direccionada para as aplicações que tiram partido da técnica ORM para relacionar classes com as entidades da base de dados, através de anotações no código fonte. A nossa abordagem recebe como input o código fonte e uma proposta de microsserviços, e aplica técnicas de refactoring às classes para tornar cada microsserviço independente. Esta metodologia cria uma API para cada chamada de métodos de classes que se encontram noutros serviços, e as entidades da base de dados também sofrem refactoring para serem incluídas no serviço correspondente. A metodologia proposta foi implementada através da construção de uma ferramenta que suporta o refactoring de aplicações desenvolvidas em Java Spring e que utilizam as anotações da JPA para o mapeamento entre as classes e as entidades. Realizou-se um análise quantitativa e qualitativa em 120 projetos open-source aleatoriamente recolhidos do GitHub. Na avaliação quantitativa procurou-se perceber a aplicabilidade da metodologia e na analise qualitativa, através da execução de testes unitários, procurou-se avaliar se aplicação original e a aplicação baseada em microserviços gerada são funcionalmente equivalentes. Os resultados são promissores sendo a metodologia capaz de realizar o refactoring em 69% dos projetos, sendo o resultado da execução dos testes unitários igual em ambas as versões dos projetos.
In the last few years we have been seeing a drastic change in the way software is developed. Largescale software projects are being assembled by a flexible composition of many (small) components possibly written in different programming languages and with independent deploy processes – the so-called microservice-based applications. This has been motivated by the challenges associated with the development, maintenance, and evolution of large software systems, but also by the appearance of the cloud and the ease it brought in terms of horizontal scaling, reusability and flexibility in ownership and deployment. The dramatic growth in popularity of microservice-based applications has pushed several companies to apply major refactorings to their software systems. However, this is a challenging task that may take several months or even years. This dissertation proposes a methodology to automatically evolve a Java monolithic application into a microservice-based one. The proposed methodology is directed to the applications that take advantage of the ORM technique to relate Java classes to database entities, through annotations in the source code. The methodology receives as input the Java source code and a proposition of microservices and refactors the original classes to make each microservice independent. The proposed methodology creates an API for each method call to classes that are in other services. The database entities are also refactored to be included in the corresponding service. The proposed methodology was implemented by building a tool that supports the refactoring of Java Spring applications that use JPA annotations for mapping between Java classes and database entities. We performed a quantitative and qualitative analysis on 120 open-source projects randomly selected from GitHub. In the quantitative evaluation we tried to understand the applicability of the methodology and in the qualitative analysis, through the execution of unit tests, we tried to evaluate if the original application and the application based on micro-services generated are functionally equivalent. The results are promising, with the methodology being able to refactor 69% of the projects, with the unit test results being the same in both versions of the projects.
TypeMaster thesis
DescriptionDissertação de mestrado integrado em Informatics Engineering
URIhttps://hdl.handle.net/1822/79920
AccessOpen access
Appears in Collections:BUM - Dissertações de Mestrado
DI - Dissertações de Mestrado

Files in This Item:
File Description SizeFormat 
Francisco Jose Oliveira Freitas.pdfDissertação de Mestrado2,36 MBAdobe PDFView/Open

This item is licensed under a Creative Commons License Creative Commons

Partilhe no FacebookPartilhe no TwitterPartilhe no DeliciousPartilhe no LinkedInPartilhe no DiggAdicionar ao Google BookmarksPartilhe no MySpacePartilhe no Orkut
Exporte no formato BibTex mendeley Exporte no formato Endnote Adicione ao seu ORCID