705 words
4 minutes
Quarkus 2.0 lançamento novidades e novidades
2021-07-04
No Tags

Quarkus 2.0#

No dia 28 de junho de 2021 foi lançado a versão 2.0 do Quarkus a página principal do anúncio está aqui. A notícia veio com uma live dentre todas as coisas que foram colocadas, vou tentar fazer um resumo do que mais me atraiu.

O que mais chama a atenção é, o cuidado que o time do framework tem com o lema para o prazer/alegria do programador. Funcionalidades que estavam meio confusas como a parte GraphQL parecem ter ganhado uma melhora. Vamos os tópicos mais interessantes.

GraphQL#

Como foi mostrado neste post tinha uma complexidade, que na minha visão, era um pouco desnecessária para fazer o GraphQL funcionar.

Agora utilizando Smallrye GraphQL, ficou bem mais simples criar uma API GraphQL. Basta acrescentar @GraphQLApi, e dentro de cada método dizer qual a query/mutation/subscription vai ser representado e pronto vai funcionar. Um exemplo de Api pode ser visto aqui.

import org.eclipse.microprofile.graphql.Description;
import org.eclipse.microprofile.graphql.GraphQLApi;
import org.eclipse.microprofile.graphql.Query;

import java.util.Arrays;
import java.util.List;

@GraphQLApi
public class BookResource {

    @Query("allBooks")
    @Description("This  query will return all books that we have")
    public List<Book> findAllBooks() {
        Book book = new Book();
        book.setAuthor("Luiz Leite");
        book.setName("A vida de Luiz");
        Book book1 = new Book();
        book1.setName("O blog de Luiz");
        book1.setAuthor("Luiz Leite");
        return Arrays.asList(book, book1);
    }

}

Além da implementação ter ficado bem mais simples, adicionaram nativo a parte de client com o GraphiQL, na documentação está dizendo que fica em http://localhost:8080/graphql-ui/, mas no meu caso ficou em http://localhost:8080/q/graphql-ui, Apesar de estar em outro lugar com a Dev-UI fica bem simples de identificar qualquer endpoint na aplicação. Para ver a documentação via terminal pode ser acessada seguinte chamada:

curl http://localhost:8080/graphql/schema.graphql

A documentação completa pode ser vista aqui.

Teste contínuo#

Foi feature adicionada que achei mais legal, agora executando mvn quarkus:test qualquer alteração pode ser vista, caso haja um teste que foi quebrado ou não em tempo de desenvolvimento. Para testar essa parte criei um service bem simples:

import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class GreetingService {



    public String sayHelloForSomeone(String name) {
        return "Hello " + name;
    }

    public String sayByeForSomeone(String name) {
        return "Bye "+ name;
    }

}

Para testar a seguinte classe de teste:

import static org.junit.jupiter.api.Assertions.assertEquals;

class GreetingServiceTest {

    private final GreetingService greetingService = new GreetingService();

    @Test
    public void testSayHello() {
        String name = "Luiz";
        assertEquals("Hello Luiz", greetingService.sayHelloForSomeone(name));
    }

    @Test
    public void testSayBye() {
        String name = "Luiz";
        assertEquals(greetingService.sayByeForSomeone(name),"Bye Luiz");
    }

}

Depois de rodar o comando mvn quarkus:dev no final mostra uma mensagem como a seguinte:

All 2 tests are passing (0 skipped), 2 tests were run in 194ms. Tests completed at 17:22:42.
Press [r] to re-run, [v] to view full results, [p] to pause, [h] for more options>

Agora sem alterar o teste e para o comando vamos alterar o método com.luizleiteoliveira.service.GreetingService#sayByeForSomeone com Bye bye ao invés de Bye, logo após salvar já aparece a mensagem no terminal:

: org.opentest4j.AssertionFailedError: expected: <Bye bye Luiz> but was: <Bye Luiz>
        at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:55)
        at org.junit.jupiter.api.AssertionUtils.failNotEqual(AssertionUtils.java:62)
        at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
        at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177)
        at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1124)
        at com.luizleiteoliveira.service.GreetingServiceTest.testSayBye(GreetingServiceTest.java:20)

2021-07-04 17:25:27,530 ERROR [io.qua.test] (Test runner thread) >>>>>>>>>>>>>>>>>>>> 1 TESTS FAILED <<<<<<<<<<<<<<<<<<<<


--
1 tests failed (1 passing, 0 skipped), 2 tests were run in 11ms. Tests completed at 17:25:27 due to changes to GreetingService.class.
Press [r] to re-run, [v] to view full results, [p] to pause, [h] for more options>

Existem também mais opções como:

[b] -> rodar apenas testes que quebraram.

[v] -> exibir erros que aconteceram na ultima vez que os tests rodaram.

[q] -> sair

Vertx 4.0#

Seguindo a onda reativa o Vertx 4 traz um suporte melhor para esta parte, além acrescentar uma melhoria em tracing bem significativa compatível com Zipkin.

Kotlin#

Essa é uma parte que eu nem sabia que não suportava, mas agora adicionaram suporte a coroutines, além REST Cliet e Reactive Messaging

Quarkus CLI#

Para tentar eliminar comandos de Maven e Gradle na nova versão foi disponibilizada uma ferramenta para linha de comando totalmente voltada para o Quarkus.

Conclusão#

Como pode ser visto, a ferramenta tem evoluído muito no sentido de tornar mais fácil alguns pontos para desenvolvedores, todas me agradaram muito, mas ainda precisamos ver alguns pontos como autenticação e autorização dentro do GraphQL, além disto, não é recomendável o upgrade para quem está dentro do Java 8.

Se quiser lembrar aqui está o post da época do 1.0 Quarkus 1.0

Todo o código que foi comentado está neste repositório no GitHub

Want to follow me?#

You can get in contact me on this social media.

GitHub: luizleite-hotmart

Twitter: luizleite_

Twitch: coffee_and_code

Linkedin: luizleiteoliveira

Quarkus 2.0 lançamento novidades e novidades
https://luizleiteoliveira.github.io/posts/2021-07-04-quarkus_2/
Author
Lorem Ipsum
Published at
2021-07-04