Conhecendo o Apache Tamaya

Daniel Dias
Sep 16, 2019 · 6 min read

Nesse post vamos conhecer um outro projeto bacana para configurar nossas aplicações bem similar ao MicroProfile Config e a JSR-382 .

Esse post vai ser curto, é somente para conhecer o projeto .


Introdução ao Apache Tamaya

Apache Tamaya prover uma flexível e poderosa solução de configuração para Desenvolvedores Java , bem como para os Cenários mais complexo como Cloud e Jakarta EE. Ele prover uma moderna api de configuração baseada em propriedades type-safe, combinado com um poderoso modelo de ambiente e uma flexível SPI .

Alguns dos seus recursos são :

  • API de configuração unificada
  • Back-ends de configuração conectável
  • Diretivas de configuração aplicáveis
  • Validação e documentação de configuração
  • Integração corporativa perfeita

Além disso Apache Tamaya fornece extensões através de módulos como :

  • MicroProfile
  • JSON
  • Yaml
  • Spring
  • CDI
  • Hazelcast
  • etc ..

Algumas considerações sobre Tamaya :

  • Útil : É fornecido com um tipo seguro, fácil de usar API e SPI, que pode ajudá-lo a separar seu código de preocupações com a configuração.
  • Flexível: Independentemente de trabalhar com o Java SE ou com OSGI ou Jakarta EE, o Tamaya pode ser a ferramenta de escolha para suas preocupações de configuração.
  • Extensível: Vem com uma API de núcleo enxuto. Recursos adicionais podem ser facilmente adicionados simplesmente adicionando-os ao caminho de classe do projeto, conforme necessário. Tamaya não enche sua memória com coisas que você nunca precisará.
  • Fácil: vem com um mecanismo flexível de autodescoberta para procurar as fontes de propriedade e define seu significado individual.
  • Independente de tempo de execução: o Tamaya é executado em todas as plataformas da JVM, pois o núcleo é escrito em Java puro.
  • Bem Documentado: tanto a API quanto as extensões são todas bem documentadas
  • melhor de tudo ele é Apache: Tamaya é comunidade, sem vendor lock-in, sem membro pagos , apenas APACHE : )

Bem feita essa breve apresentação, vamos montar um projeto e utilizar o Tamaya .


Maven Dependências

Aqui estarei usando o Java 12, mais também funciona com Java 8 .

Também criaremos dois projetos bem simples, um utilizando a configuração programatica e a outra utilizando o modulo CDI.

Para o primeiro exemplo inclua as seguinte Dependências :

Aqui estaremos utilizando a última versão do Tamaya, porém para utiliza-la é necessario inserir o repositorio do Apache para o maven pegar o jar da última versão .

Agora vamos criar uma simples classe Main da seguinte forma :

Aqui utilizamos a interface Configuration e em seguida chamamos o método estático current() que retorna uma instância do Configuration, desta forma podemos obter os valores da nossa configuração.

A parte de obter os valores é feita utilizando o método get(String key) , onde passamos a nossa chave que para puxa o valor da nossa configuração .

Para que o essa classe funcione corretamente, o Tamaya precisa saber aonde busca o arquivo de configuração, no nosso caso o arquivo javaconfiguration.properties , é nele que ficam armazenadas nossas configurações por CHAVE/VALOR .

Então vamos criar nosso arquivo na seguinte pasta META-INF/javaconfiguration.properties e o seu contéudo :

esse arquivo é composto de chave/valor, para obter os seus valores, passamos a chave para o nosso config.get() para cada um do itens .

Vamos executar nossa classe :

podemos também passar valores para JVM da seguinte forma, no Eclipse :

e a nova saida é:

esse foi um simples exemplo de uso do Tamaya em modo programatico, bem similar a alguns providers de configuração em microframeworks com Helidon.

Vejamos como podemos utilizar o CDI no nosso projeto, então vamos para o segundo exemplo, para isso adicione as seguintes Dependências :

A primeira é a implementação de Referecia no caso Weld para CDI.

As outras duas são extensões do Tamaya :

  • tamaya-cdi : prover integração com CDI, gerenciamento do carregamento de componentes SPI como PropertiySources, PropertySourceProviders,etc .
  • tamaya-injection: prover funcionalidades para injectar valores configuravies dentro dos Beans ou criando instancias de templates de configurações.

Se não sabe o que é CDI , o leitor(a) pode assistir essa palestra Fantástica sobre o assunto :

Enfim, vamos ao nosso projeto, uma vez baixado os novos Jar, vamos a configuração :

1 — crie um arquivo beans.xml na pasta META-INF com o seguinte contéudo:

2 — Ainda na pasta META-INF, crie outra pasta chamada services e dentro dela um arquivo chamado : javax.enterprise.inject.spi.Extension com o seguinte contéudo :

esse arquivo é necessario para ativar a extensão do CDI no Tamaya. Repare que temo um classe comentada , pois no Tamaya-cdi temos dois tipos para injetar :

Se você deseja usar a injeção padrão de CDI (usando @Inject @Config), ative org.apache.tamaya.cdi.TamayaCDIInjectionExtension como uma extensão CDI.

Se você deseja usar a injeção baseada em SE (usando @Config sem @Inject), ative org.apache.tamaya.cdi.TamayaSEInjectionExtension.

no nosso caso estamos usando o TamayaSEInjectionExtension .

feita essa configuração vamos criar a classe Palestrante que fará uso do @ Config :

aqui estamos usando a anotação @ Config() que recebe um chave, que no caso é a mesma passada no arquivo de configuração . Bem simples não .

Agora vamos criar nossa Main :

A classe é bem simples, na linha 11, criamos nosso container CDI para Java SE e a inicializamos, em seguida, passamos o nosso Bean Palestrante que recebe o nosso container que vai chamar o método select passando para ele a nossa classe Palestrante e no fim damos um get() desta forma temos uma instancia de Palestrante e em seguida chamamos os getters de cada atributo contendo o valores do nosso javaconfiguration , então ao rodar nosso main a saida vai ser :

Daniel Dias

SouJava Board Member, JCP Member, JSR-354 (Money), JSR-371 (MVC 1.0), JSR-382 (Configuration 1.0) specifications contributors, Expert Group JSR-385 (UoM 2.0) and Eclipse Committer, is taking the first steps in contributing Open Source projects.

Daniel Dias

Written by

SouJava Board Member, JCP Member, JSR-371 (MVC 1.0), JSR-382 (Config) specifications contributor, EG JSR-385 (UoM) and Eclipse Committer .

Daniel Dias

SouJava Board Member, JCP Member, JSR-354 (Money), JSR-371 (MVC 1.0), JSR-382 (Configuration 1.0) specifications contributors, Expert Group JSR-385 (UoM 2.0) and Eclipse Committer, is taking the first steps in contributing Open Source projects.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade