Desenvolvendo aplicações cloud-native com Java — parte 2

Os conceitos e tecnologias por trás do TJF

Roger Steuernagel
TOTVS Developers
4 min readJan 15, 2020

--

Dando sequência aos artigos sobre o TJF, faremos um mergulho no framework, abordando suas características de forma mais detalhada. Este artigo visa apresentar as principais tecnologias e conceitos que sustentam o TOTVS Java Framework, bem como elas são aplicadas nos seus componentes.

Se você ainda não leu o primeiro artigo desta jornada você pode acessá-lo aqui .

Visão geral da arquitetura

Tecnologias e conceitos

O TJF é desenvolvido sobre o Spring Framework, um framework de código aberto amplamente conhecido e utilizado pela comunidade Java. Por consequência, o TJF adota várias tecnologias e conceitos que esses componentes utilizam, tais como JPA, Dependency Injection, IoC, AOP, JMS, AMQP, logging, etc.

Plataformas

Por tratar-se de um framework voltado ao desenvolvimento de aplicações distribuídas que possam ser hospedadas em nuvens públicas ou até mesmo privadas, o TJF faz uso de outros projetos e plataformas como o Spring Cloud Framework e o Kubernetes.

Persistência

No que diz respeito à camada de persistência de dados, graças ao uso da especificação JPA e do Hibernate, o suporte aos bancos de dados é praticamente ilimitado. Outro recurso interessante do TJF é capacidade da manipulação de entidades schemaless sem a necessidade do provisionamento de banco NoSQL. Atualmente, esse suporte é feito por meio do tipo de dados JSONB do PostgreSQL.

Mensageria

Em relação à camada de integração, o TJF utiliza o Spring Cloud Stream, um framework para o desenvolvimento de aplicações de alta escalabilidade baseadas em Microsserviços orientados a eventos conectados por um sistema de mensageria compartilhado, com suporte a brokers de mensageria, como o RabbitMQ, Kafka e Amazon Kinesis, entre outros.

Segurança

Falando um pouco sobre segurança, o TJF utiliza o Spring Security e o padrão OAuth2, por meio de JSON Web Tokens, para controlar a autenticação e autorização de acesso às APIs REST expostas pelas aplicações com ele desenvolvidas. O padrão OAuth2 é amplamente utilizado pelo mercado, incluindo empresas como Google, Microsoft, Facebook e Twitter.

Metodologias e Padrões de Desenvolvimento

O TJF incorpora e incentiva o uso de conceitos arquiteturais como Domain-driven Design (DDD), que resumidamente define que uma aplicação deve possuir um contexto delimitado (Bounded Context) referente à um determinado domínio (Domain Model) definido por meio de uma linguagem ubíqua (Ubiquitous Language).

Outro padrão recomendado pelo TJF é o Command Query Segregation Pattern (CQRS), que define que uma aplicação deve separar o modelo de atualização de informações do modelo de leitura. Esse modelo de leitura tem, entre outros benefícios, a performance por meio de consultas pré-formatadas que podem ser escaladas de forma independente no ambiente.

Transações Distribuídas

Orquestração e Coreografia são as duas formas de se implementar uma SAGA, um fluxo de transações distribuídas (e atômicas) que representam um determinado processo de negócio. No TJF os comandos e eventos referentes a cada uma das etapas desse fluxo são representados por meio de mensagens assíncronas no broker de mensageria.

As orquestrações são definidas e implementadas por meio de padrões como o Business Process Model and Notation (BPMN), Decision Model and Notation (DMN) e o Case Management Model and Notation (CMMN), e estas definições podem ser customizadas para cada um dos Tenants hospedados pela aplicação.

Ambiente Compartilhado

O TJF facilita a implementação de aplicações com suporte a Multi-Tenancy, que é capacidade de uma mesma instância da aplicação suportar vários Tenants (clientes ou empresas). O Tenant corrente é extraído dos tokens JWT e das mensagens recebidas pelo broker de mensageria e automaticamente configura a camada de persistência, filtrando os dados por uma coluna nas tabelas ou selecionando o schema do Tenant em questão.

Testes

O framework ainda possui um módulo para o desenvolvimento de testes unitários e integrados utilizando o JUnit. Este módulo ainda oferece um conjunto de emuladores de componentes de infra-estrutura como um broker de mensageria em memória e um mini servidor OAuth2 para a geração de tokens de autenticação e autorização.

Desenvolvimento do TJF

Cabe aqui comentar também sobre as tecnologias e conceitos envolvidos no desenvolvimento do TJF, como DevOps, Git, Semantic Versioning, Gitflow, Automated Testing, Agile, SonarQube, etc. Tais tecnologias e conceitos foram adotadas com o objetivo de dar agilidade e segurança no desenvolvimento de novas funcionalidades. Todas as inovações e manutenções são realizadas por meio de Pull-Requests que devem ser revisados por pares do projeto, depois de terem sido submetidos aos testes unitários e integrados que praticamente cobrem a totalidade dos códigos do framework.

Conhecendo ainda melhor o TJF

No próximo artigo conheceremos melhor todos os componentes que o TOTVS Java Framework oferece aos desenvolvedores visando facilitar a utilização das tecnologias que acabamos de mencionar acima.

Até o próximo artigo!

--

--