Concrete Logo
Hamburger button

Introdução ao Vert.x com Java

  • Blog
  • 12 de Janeiro de 2018
Share

Você sabia que existe uma alternativa ao node.js que roda na JVM? Pois é! O framework Vert.x foi criado por Tim Fox, engenheiro da VMware, para aplicações web. Apesar de não ser específico para Java, podemos usá-lo com Javascript, Ruby, Groovy, Ceylon, Scala e até Kotlin. O framework segue os princípios do paradigma reativo para que sua aplicação consiga se recuperar de falhas, e além disso é elástico (se adequa à demanda/carga e uso de múltiplos cores e múltiplos servidores), tem sistemas compostos de gerenciadores de eventos assíncronos e não bloqueantes em vez de compor aplicações por múltiplas threads síncronas e é responsivo, ou seja, atende aplicações que oferecem interações ricas e em “tempo real” com usuários.

Quer saber mais sobre programação reativa? Dá uma olhada aqui nesse link. Além da concorrência, o framework inclui servidores e clientes que utilizam o protocolo TCP/SSL HTTP/HTTPS e dá suporte a WebSockets e SockJS.

Por fim, vale dizer que o Vert.x tem um conceito chamado Verticle, que nada mais é uma instância de uma aplicação “deployada” e implementada. Esses “Verticles” gerenciam um pequeno número de threads, uma para cada núcleo disponível no servidor. Os Verticles podem se comunicar entre si (desde que estejam em uma mesma instância) ou podem se comunicar com outros, em instâncias diferentes, por meio de um barramento específico de mensagens.

No site oficial é possível encontrar exemplos de implementações em outras linguagens, mas neste post vou mostrar como montar uma simples REST API com o uso do Vert.x e Java. Bora lá?

Pré-resquisitos

  • Java 8
  • Eclipse
  • Maven

Criando o projeto

No Eclipse, vá em File > New > Maven Project e marque o checkbox “Create a Simple Project (skip archetype selection)” conforme a imagem abaixo, e depois clique em NEXT.

Na próxima janela, preencha as informações desta forma:

Agora é só clicar em Finish e seu projeto Maven será gerado.

O próximo passo é adicionar as dependências necessárias para que nossa aplicação funcione corretamente com o Vert.x. Para isso, procure pelo arquivo pom.xml e adicione as dependências do vertx core e o vertx web. Vai ficar assim:

Com o nosso projeto configurado, mãos à obra! Vamos programar!
A princípio vamos criar uma classe responsável por colocar o nosso Server no ar.
Crie o pacote “com.concrete.vertxapi.server” dentro de src/main/java e dentro dele crie a classe ServerVerticle.java, dessa forma:

Repare que para implementar um verticle criamos uma classe e fizemos o extends de AbstractVerticle. Também fizemos a sobreposição do método start, criando uma rota para a raiz da nossa aplicação. Por fim, criamos o server http que utiliza a porta 9000.

Temos nossa classe de Server criada, mas ainda precisamos rodar a aplicação. Para isto basta criar uma Main class que instancie o Vertx e faça o deploy de um verticle. Assim:

Agora execute a aplicação clicando com o botão direito sobre classe Run e em seguida escolha a opção Run As > Java Application. Abra o seu navegador de preferência e acesse http://localhost:9000. Você vai ver a seguinte mensagem:

Para incrementar nossa aplicação

Agora que temos nosso Server verticle criado e funcionando, vamos adicionar as rotas que vão transformar nossa aplicação em uma REST API. Dentro da nossa classe  ServerVerticle.java, vamos fazer a simulação de uma API que vai disponibilizar endpoints necessários para um CRUD de contatos. Primeiro vamos criar a classe que representa a entidade Contato. Ela deve ficar dentro do pacote com.concrete.vertxapi.entities, assim:

Agora é só adicionar o trecho responsável por expor o endpoint de criação de um novo contato na classe ServerVerticle.java. Para isso, abaixo da criação da rota da raiz da aplicação (“/”) vamos adicionar as seguintes linhas de código:

A primeira linha serve para decodificar o body que será recebido na requisição. Repare que na segunda linha dentro do handler é esperado o método addContato. Vamos criá-lo também dentro dessa classe com o seguinte conteúdo:

Repare que existe um Map de contatos, basta criá-lo na classe para simular um repositório de dados “fake”.

Pronto? Então vamos testar. Suba o servidor por meio da classe Run.java e abra uma ferramenta REST (POSTMAN, por exemplo). Faça uma requisição para o endereço: http://localhost:9000/api/contatos utilizando o verbo POST e adicione o seguinte conteúdo ao body da requisição:

Se deu tudo certo você vai receber uma resposta com o statusCode 201.

Para recuperar a lista de todos os contatos cadastrados você deve adicionar uma linha abaixo da linha da rota de adição de contatos, deixando o bloco de código assim:

Como no fluxo de adição de um novo contato é necessária a criação do método esperado dentro do handler da rota GET implementada, você deve adicionar o seguinte método dentro da classe:

O restante dos métodos, como busca de contato por id, por exemplo, devem seguir praticamente o mesmo fluxo dos métodos criados anteriormente. O código completo da aplicação, se você tiver interesse, está aqui.

E é isso! Espero que tenham aprendido um pouco sobre o Vert.x e como utilizá-lo de maneira simples. Para saber mais sobre o framework recomendo a leitura da documentação das principais dependências core e webNeste post também tem algumas informações interessantes sobre o Vert.x. Ficou alguma dúvida ou tem algo a dizer? Aproveite os campos abaixo. Até a próxima!

É desenvolvedor Java e gostaria de trabalhar em um time ágil e multidisciplinar? Mande um email para trabalheconosco@concrete.com.br.