Introdução ao MongoDB e Helidon
Avalie esse Início rápido
Este tutorial orientará você na criação de um aplicação Java usando o MongoDB e o Helidon. Helidon é uma estrutura de código aberto projetada para desenvolver microsserviços leves na nuvem. Ele apresenta um núcleo web poderoso e rápido suportado por threads virtuais Java , fornecendo uma base sólida para aplicativos modernos. Seguindo algumas etapas simples, você aprenderá como configurar um aplicação Java que se integra perfeitamente ao MongoDB, permitindo que você se concentre na criação de serviços escaláveis e de alto desempenho sem esforço.
1 git clone git@github.com:soujava/helidon-mongodb-introduction.git
Para este tutorial, você precisará de:
- Java 21.
- Maven.
- Um cluster do MongoDB.
- MongoDB Atlas (Opção 1)
- Docker (Opção 2)
Você pode usar o seguinte comando do Docker para iniciar uma instância MongoDB standalone:
1 docker run --rm -d --name mongodb-instance -p 27017:27017 mongo
Você também pode usar oMongoDB Atlas e experimentar a camada grátis M0 grátis para implantar seu cluster.
- No Fragrância, selecione Helidon MP e Avançar.
- No tipo de aplicação , selecione Início Rápido.
- No Suporte de mídia, selecione JSON-B.
- Defina o groupId, artefatoId, versão e nome do pacote conforme desejado.
- Configure seu projeto selecionando as opções desejadas, como o ID do grupo e do artefato.
- Gere o projeto, baixe o arquivo ZIP e extraia-o para o local de sua preferência. Lembre-se de que a estrutura do arquivo pode variar de acordo com diferentes versões do Helidon, mas isso deve ser suficiente para o tutorial. O foco principal será modificar o `pom.xml' arquivo e código fonte, que permanece relativamente consistente entre as versões. Quaisquer pequenas diferenças estruturas devem ser boas para o seu progresso, e você pode consultar a documentação específica da versão, se necessário, para uma experiência de aprendizado perfeita.
1 <dependency> 2 <groupId>org.eclipse.jnosql.databases</groupId> 3 <artifactId>jnosql-mongodb</artifactId> 4 <version>1.1.2</version> 5 </dependency>
Neste ponto, seu arquivo
pom.xml
deve estar assim:1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 <parent> 7 <groupId>io.helidon.applications</groupId> 8 <artifactId>helidon-mp</artifactId> 9 <version>4.1.1</version> 10 <relativePath/> 11 </parent> 12 <groupId>expert.os.samples</groupId> 13 <artifactId>intro-helidon-mongodb</artifactId> 14 <version>0.0.1</version> 15 16 17 <dependencies> 18 <dependency> 19 <groupId>org.eclipse.jnosql.databases</groupId> 20 <artifactId>jnosql-mongodb</artifactId> 21 <version>1.1.2</version> 22 </dependency> 23 <dependency> 24 <groupId>io.helidon.microprofile.bundles</groupId> 25 <artifactId>helidon-microprofile-core</artifactId> 26 </dependency> 27 <dependency> 28 <groupId>io.helidon.microprofile.openapi</groupId> 29 <artifactId>helidon-microprofile-openapi</artifactId> 30 </dependency> 31 <dependency> 32 <groupId>io.helidon.microprofile.health</groupId> 33 <artifactId>helidon-microprofile-health</artifactId> 34 </dependency> 35 <dependency> 36 <groupId>jakarta.json.bind</groupId> 37 <artifactId>jakarta.json.bind-api</artifactId> 38 </dependency> 39 <dependency> 40 <groupId>org.glassfish.jersey.media</groupId> 41 <artifactId>jersey-media-json-binding</artifactId> 42 <scope>runtime</scope> 43 </dependency> 44 <dependency> 45 <groupId>io.helidon.logging</groupId> 46 <artifactId>helidon-logging-jul</artifactId> 47 <scope>runtime</scope> 48 </dependency> 49 <dependency> 50 <groupId>io.smallrye</groupId> 51 <artifactId>jandex</artifactId> 52 <scope>runtime</scope> 53 </dependency> 54 <dependency> 55 <groupId>org.eclipse.microprofile.metrics</groupId> 56 <artifactId>microprofile-metrics-api</artifactId> 57 </dependency> 58 <dependency> 59 <groupId>io.helidon.microprofile.metrics</groupId> 60 <artifactId>helidon-microprofile-metrics</artifactId> 61 </dependency> 62 <dependency> 63 <groupId>org.junit.jupiter</groupId> 64 <artifactId>junit-jupiter-api</artifactId> 65 <scope>test</scope> 66 </dependency> 67 <dependency> 68 <groupId>io.helidon.microprofile.testing</groupId> 69 <artifactId>helidon-microprofile-testing-junit5</artifactId> 70 <scope>test</scope> 71 </dependency> 72 <dependency> 73 <groupId>org.hamcrest</groupId> 74 <artifactId>hamcrest-all</artifactId> 75 <scope>test</scope> 76 </dependency> 77 </dependencies> 78 79 <build> 80 <plugins> 81 <plugin> 82 <groupId>org.apache.maven.plugins</groupId> 83 <artifactId>maven-dependency-plugin</artifactId> 84 <executions> 85 <execution> 86 <id>copy-libs</id> 87 </execution> 88 </executions> 89 </plugin> 90 <plugin> 91 <groupId>io.smallrye</groupId> 92 <artifactId>jandex-maven-plugin</artifactId> 93 <executions> 94 <execution> 95 <id>make-index</id> 96 </execution> 97 </executions> 98 </plugin> 99 </plugins> 100 </build> 101 </project>
Usaremos a versão mais recente do Helidon com o Eclipse JNoSQL. Essa integração pode ser feita rapidamente porque ambos são baseados na especificação Java Enterprise, Jakarta. A Helidon usa o Eclipse Microprofile, que incorpora várias especificações de Jakarta, como o CDI. O Eclipse JNoSQL serve como base, implementando as especificações de Jakarta EE para NoSQL e dados.
Antes de iniciar a implementação, é essencial configurar seu banco de banco de dados MongoDB corretamente. No MongoDB, você geralmente deve definir credenciais e configurações específicas para se conectar à sua instância do banco de dados de dados. O Eclipse JNoSQL oferece um mecanismo de configuração flexível que permite gerenciar essas configurações de forma eficaz.
O repositório Eclipse JNoSQL Github contém configurações e configurações detalhadas para vários bancos de dados, incluindo MongoDB.
Configure o nome do banco de dados de dados e as propriedades no arquivo src/main/resources/META-INF/ microprofile-config.properties arquivo para executar seu aplicação localmente. Abra este arquivo e adicione a seguinte linha para especificar o nome do banco de dados de dados:
1 # configure the MongoDB client for a replica set of two nodes 2 quarkus.mongodb.connection-string=mongodb://localhost 3 4 # mandatory if you don't specify the name of the database 5 jnosql.document.database=tools
Esta configuração habilitará seu aplicativo para:
- Use o banco de dados “tools”.
- Conecte-se ao cluster MongoDB disponível na connection string fornecida.
Habilite o controle de acesso e imponha a autenticação na produção. Para obter mais detalhes, consulte a lista de verificação de segurança.
É importante observar que o Eclipse JNoSQL usa o Eclipse MicroProfile Configuration para simplificar o desenvolvimento de aplicativos 12-factor, especialmente no gerenciamento de configurações. Isso permite que você substitua propriedades usando variáveis de ambiente, alternando perfeitamente entre diferentes configurações para desenvolvimento, teste e produção sem modificar seu código. Essa flexibilidade é um aspecto valorizado na criação de aplicativos resilientes e facilmente implementáveis.
Agora que seu banco de dados de dados está configurado, você pode prosseguir com o tutorial e criar sua API RESTful com Helidon e Eclipse JNoSQL para MongoDB.
Nesta etapa, criaremos uma entidade simples de ferramenta que terá quatro atributos:
- Nome: o nome da ferramenta (por exemplo,Martelo, Chave de rosca)
- Tipo: o tipo ou categoria a que a ferramenta pertence (por exemplo, Ferramentas manuais, Ferramentas elétricas)
- SKU: um identificador exclusivo para a ferramenta (Unidade de manutenção de estoque)
- Quantidade: o número de unidades dessa ferramenta disponíveis no armazém
Crie uma nova classe no diretório `src/main/Java' chamado `Tool'.
1 import jakarta.nosql.Column; 2 import jakarta.nosql.Entity; 3 import jakarta.nosql.Id; 4 5 6 public record Tool ( String sku, String name, String type, int quantity) 7 { }
Criar um repositório de ferramentas
Após criar a entidade Ferramenta, a próxima etapa é definir a interface de comunicação com o banco de dados de dados; nesta amostra, usaremos as interfaces de repositório da especificação de dados de Jakarta, que permitem uma única interface que permitirá interações com um banco de dados de dados compatível com bancos de dados relacionais, usando o Jakarta Persistence, e bancos de dados NoSQL, usando o Jakarta NoSQL.
Este ToolRepository, uma vez estendido para o `BasicRepository', permite várias operações de banco de dados de dados, como salvar, localizar e método pela query.
1 import jakarta.data.repository.BasicRepository; 2 import jakarta.data.repository.Repository; 3 4 5 public interface ToolRepository extends BasicRepository<Tool, String> { 6 }
Agora, vamos criar uma API RESTful para gerenciar registros de desenvolvedores. Crie uma nova classe em `src/main/Java' chamada `ToolResource'.
1 import jakarta.data.Direction; 2 import jakarta.data.Order; 3 import jakarta.data.Sort; 4 import jakarta.data.page.PageRequest; 5 import jakarta.inject.Inject; 6 import jakarta.ws.rs.Consumes; 7 import jakarta.ws.rs.DELETE; 8 import jakarta.ws.rs.DefaultValue; 9 import jakarta.ws.rs.GET; 10 import jakarta.ws.rs.POST; 11 import jakarta.ws.rs.Path; 12 import jakarta.ws.rs.PathParam; 13 import jakarta.ws.rs.Produces; 14 import jakarta.ws.rs.QueryParam; 15 import jakarta.ws.rs.WebApplicationException; 16 import jakarta.ws.rs.core.MediaType; 17 import jakarta.ws.rs.core.Response; 18 19 import java.util.List; 20 import java.util.logging.Logger; 21 22 23 24 25 public class ToolResource { 26 27 private static final Logger LOGGER = Logger.getLogger(ToolResource.class.getName()); 28 29 private final ToolRepository toolRepository; 30 31 32 public ToolResource(ToolRepository toolRepository) { 33 this.toolRepository = toolRepository; 34 } 35 36 37 38 public List<Tool> findAllTools( long page, 39 int size, 40 String order, 41 Direction direction) { 42 43 LOGGER.info("Find all tools, page: " + page + ", size: " + size + ", order: " + order + ", direction: " + direction); 44 var pageRequest = PageRequest.ofPage(page).size(size); 45 return toolRepository.findAll(pageRequest, Order.by(Sort.of(order, direction, false))).content(); 46 } 47 48 49 public void save(Tool tool) { 50 LOGGER.info("Save tool: " + tool); 51 toolRepository.save(tool); 52 } 53 54 55 56 public Tool findById( String id) { 57 LOGGER.info("Find tool by id: " + id); 58 return toolRepository.findById(id).orElseThrow(() -> new WebApplicationException("Tool not found", Response.Status.NOT_FOUND)); 59 } 60 61 62 63 public void deleteById( String id) { 64 LOGGER.info("Delete tool by id: " + id); 65 toolRepository.deleteById(id); 66 } 67 68 69 }
Agora que criamos nossa API RESTful para gerenciar registros de desenvolvedores, é hora de testá-la. Mostraremos como interagir com a API usando várias solicitações HTTP e ferramentas de linha de comando.
Iniciar o projeto:
1 mvn package 2 java -jar target/intro-helidon-mongodb.jar
Usaremos o `curl' para saber mais sobre paginação usando as URLs fornecidas. É uma ferramenta de linha de comando frequentemente usada para enviar solicitações HTTP. Os URLs fornecidos são usados para acessar um endpoint de REST API que busca páginas de frutas usando paginação offset. Cada URL solicita uma página diferente, permitindo-nos observar como a paginação funciona por meio da API. Abaixo está como você pode interagir com esses endpoints usando a ferramenta 'curl':
Inserindo dados
Este comando gerará ferramentas do 10 no banco de banco de dados:
Este comando gerará ferramentas do 10 no banco de banco de dados:
1 curl -X POST http://localhost:8080/tools -H "Content-Type: application/json" -d '{"sku": "SKU006", "name": "Pliers", "type": "Hand Tools", "quantity": 75}' 2 curl -X POST http://localhost:8080/tools -H "Content-Type: application/json" -d '{"sku": "SKU007", "name": "Cordless Screwdriver", "type": "Power Tools", "quantity": 50}' 3 curl -X POST http://localhost:8080/tools -H "Content-Type: application/json" -d '{"sku": "SKU008", "name": "Chisel", "type": "Hand Tools", "quantity": 90}' 4 curl -X POST http://localhost:8080/tools -H "Content-Type: application/json" -d '{"sku": "SKU009", "name": "Power Drill", "type": "Power Tools", "quantity": 60}' 5 curl -X POST http://localhost:8080/tools -H "Content-Type: application/json" -d '{"sku": "SKU010", "name": "Tape Measure", "type": "Measuring Tools", "quantity": 120}' 6 curl -X POST http://localhost:8080/tools -H "Content-Type: application/json" -d '{"sku": "SKU011", "name": "Level", "type": "Measuring Tools", "quantity": 45}' 7 curl -X POST http://localhost:8080/tools -H "Content-Type: application/json" -d '{"sku": "SKU012", "name": "Wrench Set", "type": "Hand Tools", "quantity": 30}' 8 curl -X POST http://localhost:8080/tools -H "Content-Type: application/json" -d '{"sku": "SKU013", "name": "Circular Saw", "type": "Power Tools", "quantity": 20}' 9 curl -X POST http://localhost:8080/tools -H "Content-Type: application/json" -d '{"sku": "SKU014", "name": "Angle Grinder", "type": "Power Tools", "quantity": 35}' 10 curl -X POST http://localhost:8080/tools -H "Content-Type: application/json" -d '{"sku": "SKU015", "name": "Allen Wrench", "type": "Hand Tools", "quantity": 200}'
Obtendo um elemento por ID
Este comando permite encontrar um banco de dados de dados usando o ID:
Este comando permite encontrar um banco de dados de dados usando o ID:
1 curl --location 'http://localhost:8080/tools/SKU006'
Remover um elemento por ID
Este comando remove uma ferramenta usando o ID:
Este comando remove uma ferramenta usando o ID:
1 curl --location --request DELETE 'http://localhost:8080/tools/SKU005'
Obtenha ferramentas com paginação
Esta solicitação permite pesquisar ferramentas usando paginação, onde você pode definir a página, o tamanho, a direção e a propriedade:
1 curl --location 'http://localhost:8080/tools/' 2 curl --location 'http://localhost:8080/tools/?page=2' 3 curl --location 'http://localhost:8080/tools/?page=3' 4 curl --location 'http://localhost:8080/tools/?size=10' 5 curl --location 'http://localhost:8080/tools/?size=10&order=name'
Neste tutorial, você aprenderá como configurar um aplicação Java usando o Helidon e o MongoDB, e aproveitando a simplicidade e o poder do Jakarta NoSQL. Começamos gerando um projeto básico usando o Helidon Starter, configurando-o para integração com o MongoDB e construindo um sistema completo de gerenciamento de ferramentas. Você obteve informações práticas sobre o desenvolvimento de microsserviços leves e escaláveis que podem interagir eficientemente com bancos de dados NoSQL por meio da criação de APIs RESTful, do tratamento de entidades de banco de dados de dados e da implementação de técnicas de paginação.
Seguindo as etapas descritas neste tutorial, você pode expandir seu aplicação para incluir funcionalidades avançadas como autenticação, monitoramento e sistema de nuvem usando o MongoDB Atlas. O Helidon, combinado com o MongoDB e o Jakarta NoSQL, fornece uma estrutura sólida para a criação de microsserviços modernos, de alto desempenho e fáceis de desenvolver. Você pode continuar pesquisando essas tecnologias para explorar totalmente seus recursos robustos para aplicativos de nível empresarial.
Acesse o código-fonte usado neste tutorial.
Referências:
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.