Ballerina, uma linguagem de programação na jvm focada em Integração de serviços

Odilio Noronha
RapaduraTech
Published in
5 min readApr 23, 2022

Ballerina é uma linguagem de programação de propósito geral de código aberto que é desenvolvida pela WSO2. Ballerina se concentra principalmente em integrações de APIs e, portanto, possui um modelo de programação simples, mas poderoso. A implementação atual do Ballerina é executada na JVM. A linguagem de programação Ballerina, incluindo o compilador, bibliotecas e todas as ferramentas, é totalmente gratuita e de código aberto e está disponível no github.

A linguagem inclui abstrações de sintaxe para concorrencia e network, e tem correspondencia aos diagramas de sequência — o que permite o mapeamento bidirecional para qualquer código-fonte Ballerina entre sua representação textual e sua representação gráfica como um diagrama de sequência.

Isso significa que os desenvolvedores podem alternar entre a codificação com texto ou diagramas, enquanto a equipe menos técnica pode usar o Ballerina em uma abordagem low code para o desenvolvimento de aplicativos, mantendo total fidelidade ao código.

O aspecto de low code do Ballerina é o plugin VS Code que desenha um diagrama de sequência do código. O diagrama é atualizado para cada alteração de código salvo, portanto, está sempre atualizado. Uma visão do código está sempre disponível para referência.

Alguns recursos da linguagem:

  • Tem um sistema de tipo estrutural (semântico), o que significa que os nomes dos tipos não importam, apenas a forma do tipo é considerada. Isso a torna mais semelhante às linguagens dinamicamente tipadas, enquanto fornece a segurança e o suporte de ferramentas de linguagens estaticamente tipadas.
  • É null safe.
  • Tem um modelo de threading leve, onde pode-se escrever código de maneira simples e fazer com que seja executado em paralelo.
  • Podemos gerar artefatos de implantação de Docker e Kubernetes com uma configuração simples.
  • Tem um sistema de gerenciamento de configuração embutido.

Demonstrando a linguagem

escrevendo um serviço gRPC Ballerina simples e invocando o serviço por meio de um aplicativo cliente gRPC Ballerina.

Primeiro, instale o software da ballerina fazendo o download nesse link https://ballerina.io/learn/install-ballerina/set-up-ballerina/

Tambem instale o plugin do ballerina para o vs code https://marketplace.visualstudio.com/items?itemName=WSO2.ballerina

Em um programa RPC, você primeiro define a interface de serviço usando uma Interface Definition Language (IDL) para criar a definição de serviço (ou seja, o boilerplate.proto). O gRPC geralmente usa Protocol Buffers como o IDL. Você compila o arquivo de definição de serviço (ou seja, boilerplate.proto) e gera o código-fonte para os aplicativos de serviço e cliente. No Ballerina, você pode gerar o código-fonte usando a ferramenta Protocol Buffers to Ballerina integrada.

Criando o service definition

Primeiro vamos criar uma pasta para nosso projeto

mkdir grpc

dentro dessa pasta crie um arquivo de definição do grpc com o nome de boilerplate.proto, o arquivo precisa ser similar a imagem abaixo.

Implementando o GRPC Service

Primeiro, crie o projeto do serviço grpc

bal new greeter_service

Voce deve ver a confirmação de que o projeto foi criado

Created new package 'greeter_service' at greeter_service.

Deve ser criada uma pasta com o greeter_service dentro dela devera ter arquivos como na imagem abaixo.

main.bal é um arquivo de código do ballerina, com um teste simples de print, abra o arquivo, ele devera ser como esse

Ao clicar no botão de play verde, no canto superior direito o código será compilado e executado, e deverá printar “Hello, World!” no seu terminal.

Podemos deletar esse arquivo, não utilizaremos ele, vamos gerar o código para o nosso teste grpc tendo essa pasta como destino, e usando o comando abaixo

bal grpc — mode service — input boilerplate.proto — output greeter_service/

Esse comando deverá criar dois arquivos, greeter_service.bal e boilerplate_pb.bal, a pasta ficará parecida com isso

boilerplate_pb.bal file é o arquivo stub, que contém classes que o cliente/serviço usa para conversar entre si e os tipos Ballerina correspondentes às mensagens de request e response.

greeter_service.bal file é o arquivo de modelo de serviço, que contém serviço(s) com todos os métodos remotos definidos no arquivo .proto.

o serviço é gerado com um erro por não ter um retorno no método sayHello, adicione como retorno

return {message: “Hello “ + value.name};

Nesse código temos

  • Um listener que cria um service gRPC com a porta 9090. O listener é a entidade que escuta a entrada que chega à porta e entrega para o(s) serviço(s) correto(s).
  • Cria um service e atribue o listener a ele, a anotação cria um mapeamento interno entre a declaração e o .proto
  • Define uma função remote de acordo com o que foi definido no .proto

Agora podemos executar usando o comando

bal run

Com isso o servidor grpc já está rodando na porta 9090

Criando o client GRPC

Voltemos para a pasta raiz e vamos criar o ballerina project do nosso client

bal new greeter_client

Com o projeto criado vamos criar agora o stub do greeter client com um comando similar ao service, mas com o mode client

bal grpc — mode client — input boilerplate.proto — output greeter_client/

Dentro do método main adicione o código de chamada do service

HelloReply sayHello = check ep->sayHello({name: “Ballerina”});
io:println(`Response : ${sayHello.message}`);

Agora execute o client para vermos o resultado da chamada do service

bal run

O print deverá most -Response : Hello Ballerina

Isso foi só uma introdução a linguagem Ballerina, que é extremamente voltada para integração e seu poder de expressividade, cada vez mais tem se mostrado importante possuir recursos como esse no leque de desenvolvimento de um time moderno de microserviços, obvimente não se aplica a todos os cenários e não parece necessario para projetos menores, mas possui grande relevancia para cenários mais complexos de integração, vale a pena dar uma olhadinha.

https://ballerina.io/

--

--