Conhecendo o Apache Tamaya

Daniel Dias
Daniel Dias
Published in
6 min readSep 16, 2019

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
Daniel Dias

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