segunda-feira, 18 de dezembro de 2017

MicroProfile Config: Um padrão para acesso a propriedades em sua aplicação

Para acessar propriedades hoje precisamos criar nosso próprio meio usando propriedades do sistema ou criar Producer CDI para ler um arquivo ou outra fonte. O MicroProfile Config facilita o acesso a configurações e cria um padrão para ser usado em aplicações que seguem a especificação MicroProfile ou mesmo qualquer aplicação Java. Vamos mostrar nesse breve artigo como funciona.


Como acessar a configuração com MicroProfile Config?


Com MicroProfileConfig você pode acessar a configuração:


  • Com código Java: Não precisa de API adicional, simplesmente use o seguinte código:
Optional<String> value = ConfigProvider.getConfig().getOptionalValue(propertyName, String.class);

ou

String value = ConfigProvider.getConfig().getValue(propertyName, String.class);

  • Usando CDI e a anotação @ConfigProperty: Se sua aplicação já tem CDI você pode então injetar qualquer propriedade que será convertida para o tipo alvo (incluindo objetos customizados). Você pode configurar um valor padrão para a propriedade;
  • Usando CDI e injetando o objeto Config: Com o objeto Config você tem acessa as configurações também.


Qual a origem da configuração?


Cada fonte de configuração tem um prioridade, a fonte com maior prioridade toma procedência caso haja conflito (mesma propriedade definida em duas fontes diferentes. As configurações podem vir (por padrão) de:

  • Uma propriedade de sistema: São aquelas que modificamos com System.setProperty ou quando iniciamos a aplicação passando o parâmetro -Dpropriedade=valor . Prioridade é 400;
  • Propriedades de System.env: Tem prioridade 300.
  • Propriedades do arquivo META-INF/microprofile-config.properties: Esse é o arquivo padrão lido para se acessar valores de propriedades;
Há também a possibilidade de criar sua propria fonte de armazenamento de propriedade que pode ser qualquer coisa que possa ser acessível do código java: um arquivo, um banco de dados, um web service e mais.

Exemplo


Vamos mostrar agora um exemplo muito simples de um Web Service que tem uma configuração injetada e que permite ler qualquer configuração. A configuração é bem simples, você pode baixar um aplicação de exemplo no site do wildfly swarm que tenha a dependência MicroProfile e começar a codar. 

Gerando um projeto Wildfly Swarm


Só um aviso sobre a versão, usem a versão version.wildfly.swarm como 2017.12.1 ou mais nova. Você já poderá rodar seu código usando mvn clean package wildfly-swarm:run. No nosso caso temos um único Web Service que mostra:

1. Como injetar uma propriedade
2. Como injetar o objeto Config e pegar propriedades dele.

Veja abaixo o código do nosso Web Service:


O código completo poderá ser encontrado no github desse blog.
Veja abaixo o resultado de cada método do Web Service:

Interagindo com a API de configuração usando HTTP


Conclusão


Vimos como essa nova especificação funciona e os conceitos básicos. Há pontos mais avançados a serem estudados, como o uso de Converter e uma fonte de propriedades customizável, mas vamos deixar isso mais para frente. No próximo post falamos sobre alguma das outras especificações parte do MicroProfile. Até mais!


terça-feira, 12 de dezembro de 2017

O que é o Eclipse MicroProfile?

Algumas (ótimas) mudanças estão acontecendo com o Java EE e é obrigação desse blog informar.

Para começar o Java EE agora vai ser "tocado" pela Eclipse Foundation, a Oracle não é mais quem toca a especificação, mas faz parte das empresas que ajudam a criar as JSRs .



Resultado de imagem para eclipse microprofile
Foi também criado o Eclipse MicroProfile, que é uma versão micro do java EE com mais algumas specs. Esse conjunto de APIs também é atualizado muito mais rápido do que o Java EE. Nesse momento o Eclipse MicroProfile está na versão 1.2, na sexta (dia 15/12) ele já estará na versão 1.3! Para entender como anda rápido, veja que a média de commits no projeto da especificação é aproximadamento 100 por mês, e essa é a média, chegando a mais de 200 em meses mais movimentados.

Número de commits nos últimos 12 meses


O MicroProfile é uma maravilha, pois é focado em MicroServices e contém um conjunto reduzido de APIs. O mais bacana: já temos empresas criando implementações e contribuindo, ou seja, você já pode usar com o seu vendor favorito.
Empresas que contribuiram com o projeto nos últimos 3 meses 

Quais APIs são parte do Microprofile

Atualmente o Eclipse MicroProfile está na versão 1.2 e em breve deve sair a versão 1.3, mas já há planos para a versão 2.0. Veja abaixo as APIs que farão parte de cada versão (há também um post em inglês bem detalhado, de onde peguei as imagens):




Acima vocês verão alguns nomes bem conhecidos que já abordamos aqui, como CDI, JAX-RS, JSON-PJSON-B. As outras iremos abordar aos poucos por aqui.

Como crio projetos baseado nas APIs do Eclipse MicroProfile?


Cada instituição que decide implementar o MicroProfile terá sua forma, mas presumo que todos serão baseados em Maven. Nesse blog, no entanto, utilizamos os projetos da JBoss, principalmente o Wildfly Swarm.


Lembram quando fizemos um CRUD em 7 passos usando o Wildfly Swarm? Pois bem, você pode gerar um projeto usando o mesmo swarm para criar um projeto microprofile usando o generator.



Vamos parar por aqui, mas em breve teremos mais postagens com pequenos exemplos utilizando o Eclipse MicroProfile com o Wildfly Swarm. Até mais, pessoal!



sexta-feira, 24 de fevereiro de 2017

Vídeo: Segurança em APIs REST usando JAAS

Já falamos sobre segurança nesse blog, ontem fizemos uma transmissão ao vivo com o JUG Vale para falar sobre isso e também sobre as anotações RolesAllowed, DenyAll e PermitAll. Vejam: