Conhecendo o Apache Tamaya
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 :
Bem isso é tudo que eu tinha que apresentar sobre o Apache Tamaya, como disse anteriormente, é um post curto, mais o leitor(a) pode explorar os recurso do projeto , bem como experimentar outras extensões.
Código: