Refactoring Java monoliths into executable microservice-based applications

Detalhes bibliográficos
Autor(a) principal: Freitas, Francisco José Oliveira
Data de Publicação: 2022
Tipo de documento: Dissertação
Idioma: eng
Título da fonte: Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)
Texto Completo: https://hdl.handle.net/1822/79920
Resumo: Dissertação de mestrado integrado em Informatics Engineering
id RCAP_48c3929ec76df364669e0da1e7206988
oai_identifier_str oai:repositorium.sdum.uminho.pt:1822/79920
network_acronym_str RCAP
network_name_str Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)
repository_id_str 7160
spelling Refactoring Java monoliths into executable microservice-based applicationsRefactoring de monólitos em Java para aplicações baseadas em microsserviços executáveisArquitetura de microsserviçosAplicações baseadas em microsserviçosDecomposição de monólitosJavaRefactoringMicroservice architectureMicroservice-based applicationsMonolithic decompositionEngenharia e Tecnologia::Engenharia Eletrotécnica, Eletrónica e InformáticaDissertação de mestrado integrado em Informatics EngineeringNos ú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.This work is supported by the national funds through the Portuguese Funding Agency (FCT - Fundação para a Ciência e a Tecnologia, within project UIDB/50014/2020)Cunha, JácomeFerreira, André LeiteUniversidade do MinhoFreitas, Francisco José Oliveira2022-05-172022-05-17T00:00:00Zinfo:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesisapplication/pdfhttps://hdl.handle.net/1822/79920eng203017846info:eu-repo/semantics/openAccessreponame:Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)instname:Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informaçãoinstacron:RCAAP2023-12-09T01:20:38Zoai:repositorium.sdum.uminho.pt:1822/79920Portal AgregadorONGhttps://www.rcaap.pt/oai/openaireopendoar:71602024-03-19T19:31:21.999156Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos) - Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informaçãofalse
dc.title.none.fl_str_mv Refactoring Java monoliths into executable microservice-based applications
Refactoring de monólitos em Java para aplicações baseadas em microsserviços executáveis
title Refactoring Java monoliths into executable microservice-based applications
spellingShingle Refactoring Java monoliths into executable microservice-based applications
Freitas, Francisco José Oliveira
Arquitetura de microsserviços
Aplicações baseadas em microsserviços
Decomposição de monólitos
Java
Refactoring
Microservice architecture
Microservice-based applications
Monolithic decomposition
Engenharia e Tecnologia::Engenharia Eletrotécnica, Eletrónica e Informática
title_short Refactoring Java monoliths into executable microservice-based applications
title_full Refactoring Java monoliths into executable microservice-based applications
title_fullStr Refactoring Java monoliths into executable microservice-based applications
title_full_unstemmed Refactoring Java monoliths into executable microservice-based applications
title_sort Refactoring Java monoliths into executable microservice-based applications
author Freitas, Francisco José Oliveira
author_facet Freitas, Francisco José Oliveira
author_role author
dc.contributor.none.fl_str_mv Cunha, Jácome
Ferreira, André Leite
Universidade do Minho
dc.contributor.author.fl_str_mv Freitas, Francisco José Oliveira
dc.subject.por.fl_str_mv Arquitetura de microsserviços
Aplicações baseadas em microsserviços
Decomposição de monólitos
Java
Refactoring
Microservice architecture
Microservice-based applications
Monolithic decomposition
Engenharia e Tecnologia::Engenharia Eletrotécnica, Eletrónica e Informática
topic Arquitetura de microsserviços
Aplicações baseadas em microsserviços
Decomposição de monólitos
Java
Refactoring
Microservice architecture
Microservice-based applications
Monolithic decomposition
Engenharia e Tecnologia::Engenharia Eletrotécnica, Eletrónica e Informática
description Dissertação de mestrado integrado em Informatics Engineering
publishDate 2022
dc.date.none.fl_str_mv 2022-05-17
2022-05-17T00:00:00Z
dc.type.status.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.driver.fl_str_mv info:eu-repo/semantics/masterThesis
format masterThesis
status_str publishedVersion
dc.identifier.uri.fl_str_mv https://hdl.handle.net/1822/79920
url https://hdl.handle.net/1822/79920
dc.language.iso.fl_str_mv eng
language eng
dc.relation.none.fl_str_mv 203017846
dc.rights.driver.fl_str_mv info:eu-repo/semantics/openAccess
eu_rights_str_mv openAccess
dc.format.none.fl_str_mv application/pdf
dc.source.none.fl_str_mv reponame:Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)
instname:Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informação
instacron:RCAAP
instname_str Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informação
instacron_str RCAAP
institution RCAAP
reponame_str Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)
collection Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos)
repository.name.fl_str_mv Repositório Científico de Acesso Aberto de Portugal (Repositórios Cientìficos) - Agência para a Sociedade do Conhecimento (UMIC) - FCT - Sociedade da Informação
repository.mail.fl_str_mv
_version_ 1799132821806120960