A Red Hat lançou o Quarkus, um framework Java nativo do Kubernetes feito sob medida para o GraalVM e OpenJDK HotSpot. O Quarkus visa tornar o java uma plataforma líder em ambientes serverless e Kubernetes, oferecendo aos desenvolvedores um modelo unificado de programação reativa e imperativa.
O Quarkus traz um framework full-stack aproveitando uma série de bibliotecas muito usadas por desenvolvedores Java, tais como Eclipse MicroProfile e Vert.x. A injeção de dependência do Quarkus é baseada no CDI, permitindo que os desenvolvedores usem JPA/Hibernate, JAX-RS/RESTEasy, e mais. Além disso, o Quarkus inclui uma extensão que permite que autores de frameworks terceiros possam aproveitar para estende-lo, essa extensão também compila para binário nativo do GraalVM.
De acordo com a RedHat, o Quarkus oferece eficiências de tempo de execução significativas, tais como um rápido startup permitindo escalar microservices em containers e Kubernetes tanto para cima como para baixo, baixo uso de memória ajudando a otimizar a densidade de containers em implantações de arquitetura de microsserviços, e aplicações menores.
(Imagem obtida de https://quarkus.io/)
O Quarkus é projetado para trazer sem problemas ambos os modelos imperativo e reativo, visando uma rápida adoção de tanto os desenvolvedores Java que estão familiarizados com o modelo imperativo e não querem aprender um novo paradigma, como os desenvolvedores que estão adotando uma abordagem reativa.
Estilo imperativo:
@Inject
SayService say;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return say.hello();
}
Estilo reativo:
@Inject @Stream("kafka")
Publisher reactiveSay;
@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public Publisher stream() {
return reactiveSay;
}
Também é possível implementar funções para serem usadas em ambientes serverless como o exemplo AWS Lambda a seguir:
public class HelloLambda implements RequestHandler {
@Inject
HelloGreeter greeter;
@Override
public String handleRequest(HelloRequest request, Context context) {
return greeter.greet(request.firstName, request.lastName);
}
}
O Quarkus foi projetado para ter pouca ou nenhuma configuração, trabalhando de maneira intuitiva, para isso, desenvolvedores podem montar um novo projeto da seguinte maneira:
mvn io.quarkus:quarkus-maven-plugin:0.12.0:create \ -DprojectGroupId=my-groupId \ -DprojectArtifactId=my-artifactId \ -DprojectVersion=my-version \ -DclassName="org.my.group.MyResource"
O Quarkus também traz uma funcionalidade chamada Live Coding, que permite que os desenvolvedores evitem o processo chato de Codificar → Compilar → Publicar → Atualizar o Browser → Repetir. Ao executar mvn compile quarkus:dev, o Quarkus será executado em modo de desenvolvimento, quando o Quarkus receber uma requisição HTTP, uma checagem para descobrir se algum arquivo foi alterado é disparada, caso algum arquivo tenha sido alterado, os arquivos alterados serão automaticamente compilados e publicados de forma transparente e então a requisição HTTP prosseguirá para a aplicação recém publicada.
O Quarkus parece ser no mínimo uma alternativa interessante na era cloud, em que containers, Kubernetes, microservices, functions-as-a-service (Faas) e aplicações cloud native estão fornecendo níveis mais altos de produtividade e eficiência
Maiores detalhes sobre o Quarkus podem ser encontrados em quarkus.io. Desenvolvedores que querem iniciar com o Quarkus podem acessar o guia de início, ou qualquer um dos outros guias disponíveis.