BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Oracle Apresenta Helidon - Um Framework Leve para Microservices Java

Oracle Apresenta Helidon - Um Framework Leve para Microservices Java

A Oracle apresentou um novo framework chamado Project Helidon, composto por uma coleção de bibliotecas Java projetadas para criar aplicações baseadas em microservices, que unem o Payara Micro, Thorntail (antiga WildFly Swarm), o OpenLiberty, e o TomEE a família MicroProfile.

Chamado originalmente de J4C (Java for Cloud), o Helidon foi projetado para ser simples e rápido e é composto de duas versões: a Helidon SE e a Helidon MP. A versão Helidon SE apresenta três núcleos de APIs para criar aplicações baseadas em microservices, um web server, um núcleo de configuração e um outro de segurança. A versão Helidon SE não precisa de um servidor de aplicação. A versão Helidon MP suporta a especificação MicroProfile na versão 1.1 para construir aplicações baseadas em microservices.

Web Server

Inspirado no Node.JS e no framework do Java, o web server do Helidon é uma API assíncrona e reativa que é executado utilizando o Netty. A interface WebServer inclui suporte para a configuração, roteamento, manipulação de erro e a construção de endpoints de métricas e saúde.

O exemplo de código abaixo demonstra como iniciar um servidor web simples para apresentar o texto "It works!" em uma porta randomicamente disponível:

    
// starts the server on a random available port
public void startWebServerUsingRandomPort() throws Exception {
    WebServer webServer = WebServer
           .create(Routing.builder()
                   .any((req,res) -> res.send("It works!" + "\n"))
                   .build())
           .start()
           .toCompletableFuture()
           .get(10,TimeUnit.SECONDS);
    System.out.println("Server started at: http://localhost:" + webServer.port() + "\n");
    webServer.shutdown().toCompletableFuture();
    }
    

Configuração

O componente de configuração Config carrega e processa a configuração das propriedades no formato chave/valor. Por padrão, a configuração das propriedades será lida de um arquivo definido application.properties ou application.yaml localizado no diretório /src/main/resources.

O exemplo de código abaixo demonstra como utilizar o Config e constrói sob o exemplo anterior ao ler o arquivo applications.yaml para especificar a porta em que o Web server iniciará.

    
// application.yaml
server:
 port: 8080
 host: 0.0.0.0

// starts the server on a port defined in application.yaml
public void startWebServerUsingDefinedPort() throws Exception {
    Config config = Config.create();
    ServerConfiguration serverConfig = ServerConfiguration.fromConfig(config.get("server"));
    WebServer webServer = WebServer
           .create(serverConfig,Routing.builder()
                   .any((req,res) -> res.send("It works!" + "\n"))
                   .build())
           .start()
           .toCompletableFuture()
           .get(10,TimeUnit.SECONDS);
    System.out.println("Server started at: http://localhost:" + webServer.port() + "\n");
    webServer.shutdown().toCompletableFuture();
    }
    

Segurança

A classe de Segurança disponibiliza suporte para autenticação, autorização e auditoria. Alguns provedores de segurança foram implementados para serem usados em aplicações com o Helidon: de um construtor, por configuração ou um híbrido dos dois.

O exemplo de código abaixo mostra como implementar uma instância de Segurança, como usar o Config para obter autenticação de um usuário (com senha encriptada), e como mostrar a hora do servidor.

    
// application.yaml
http-basic-auth:
 users:
   login: "mpredli"
   password: "${CLEAR=somePassword}"
   roles: ["user","admin"]

Config config = Config.create();
Security security = Security.builder()
       .config(config)
       .addProvider(...)
       .build();
String user = config.get("http-basic-auth.users.login").asString();
String password = config.get("http-basic-auth.users.password").asString();
System.out.println("\n");
System.out.println("INFO: user = " + user);
System.out.println("INFO: password = " + password);
SecurityTime time = SecurityTime.builder().build();
time = security.getServerTime();
System.out.println("INFO: server time = " + time.toString());
System.out.println("\n");
    

Mais exemplos sobre segurança podem ser encontrados no GitHub.

A arquitetura do Helidon

O relacionamento entre o Helidon SE e o Helidon MP é apresentado no diagrama de arquitetura.

O gráfico abaixo mostra onde o Helidon SE é o Helidon MP se encaixam nas categorias de frameworks de microservices.

Getting Started

O Helidon possui exemplos de início rápido que demonstram as diferenças entre o Helidon SE e o Helidon MP. Os comandos Maven e Java abaixo irão gerar e empacotar um exemplo do Helidon SE que cria um serviço REST usando o web server do Helidon.

    
$ mvn archetype:generate -DinteractiveMode=false \
    -DarchetypeGroupId=io.helidon.archetypes \
    -DarchetypeArtifactId=helidon-quickstart-se \
    -DarchetypeVersion=0.10.1 \
    -DgroupId=io.helidon.examples \
    -DartifactId=quickstart-se \
    -Dpackage=io.helidon.examples.quickstart.se

$ cd quickstart-se
$ mvn package
$ java -jar target/quickstart-se.jar
    

Os comandos Maven e Java abaixo irão gerar e empacotar um exemplo do Helidon MP que cria um serviço REST usando a API JAX-RS do MicroProfile.

    
$ mvn archetype:generate -DinteractiveMode=false \
    -DarchetypeGroupId=io.helidon.archetypes \
    -DarchetypeArtifactId=helidon-quickstart-mp \
    -DarchetypeVersion=0.10.1 \
    -DgroupId=io.helidon.examples \
    -DartifactId=quickstart-mp \
    -Dpackage=io.helidon.examples.quickstart.mp

$ cd quickstart-mp
$ mvn package
$ java -jar target/quickstart-mp.jar
    

Uma vez que o servidor está executando, os comandos seguintes podem ser executados:

O projeto completo do Helidon pode ser encontrado no GitHub.

Dmitry Kornilov, gerente sênior de desenvolvimento de software na Oracle falou com o InfoQ sobre este novo projeto.

InfoQ: O que inspirou a Oracle a desenvolver este novo framework para microservices?

Dmitry Kornilov: O trabalho no Helidon começou a algum tempo atrás, quando a arquitetura de microservices começou a se tornar muito popular para criar serviços na nuvem, a experiência no desenvolvimento também precisava mudar. O Java EE é uma tecnologia estável mas possui muito código legado. Então, ao invés de construir os microservices usando o Java EE, nós percebemos que precisávamos de um novo framework que fosse projetado para construir os microservices do zero. Foi assim que o Helidon nasceu.

InfoQ: O que torna o Helidon único em meio às outras implementações do MicroProfile como o OpenLiberty, Thorntail, Payara Micro e TomEE?

Kornilov: O Helidon não é apenas uma implementação do MicroProfile. Ele vem com dois sabores: o Helidon SE e o Helidon MP.

O Helidon SE forma o núcleo do Helidon. É um leve conjunto de bibliotecas que podem ser usadas separadas, mas quando usadas juntas fornecem a base que um desenvolvedor precisa para criar um microservice: a configuração, segurança e um servidor web, o que traz uma abordagem mais moderna e reativa que os desenvolvedores gostam. Nós tentamos deixar isto bem claro: não é usada nenhuma injeção "mágica", que faz com que a aplicação com o Helidon SE seja fácil de debugar. Não há um formato especial do jar, sem classloaders especiais. Sua aplicação é apenas uma aplicação vanilla do Java SE. Isto também significa que é compatível com todas as IDEs sem nenhum plugin necessário.

O Helidon MP é a nossa implementação MicroProfile e é construída com o Helidon SE, não é derivada de uma aplicação. Então não há um modelo de publicação, empacotamento do Java EE ou coisas extras que você não precisa.

InfoQ: Por que foi implementada a especificação 1.1 do MicroProfile ao invés de uma versão mais recente?

Kornilov: o desenvolvimento do Helidon iniciou há algum tempo atrás e nós decidimos manter a versão do MicroProfile que era a mais recente na época. Nós estamos evoluindo continuamente o Helidon e o suporte para uma versão mais recente do MicroProfile virá em breve.

InfoQ: Quais as previsões para o Helidon especialmente em termos de suporte ao Jakarta EE é versões mais recentes da especificação MicroProfile?

Kornilov: Já estamos trabalhando no suporte de uma versão mais recente do MicroProfile. Quando tivermos visibilidade do novo Jakarta EE nós iremos nos juntar a eles no desenvolvimento e suportá-los com o Helidon. Nós também planejamos adicionar funcionalidades do Oracle Cloud Integration ao Helidon, suporte a HTTP client, um projeto de web app inicial, e melhorar constantemente nossos exemplos e documentação.

Referências

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT