Olá pessoal, tudo bom?
O artigo de hoje irá abordar os conceitos sobre Interceptors, um item muito importante na especificação CDI. Veja na continuação desse artigo.
Contextualizando…
Um código de software possui uma característica peculiar, pois uma mesma atividade pode ser repetida inúmeras vezes de formas diferentes por vários desenvolvedores que não se comunicam. Isso acontece ou porque não possuímos conhecimento para fazer de uma forma diferente, ou por que estamos tão ocupados corrigindo bugs e incidentes em produção que acabamos não verificando se determinada atividade já está presente dentro do código.
A Figura 01 mostra uma chamada ao método findById() da classe MusicaDAO a partir de uma classe Façade, antiga Business Controler.
Não temos a implementação do método aqui, mas vamos supor que no método findById foi colocado um cronometro, para verificar quanto tempo leva a execução do método em questão.
Só que esse cronometro está repetido em vários métodos de outras classes que também verificam o tempo de execução. Existe uma forma de melhorar isso?
Interceptors
O CDI possui um mecanismo de interrupção de código de execução de um método chamado Interceptor.
Ao realizar a chamada do método que foi anotado, o CDI transpõe essa chamada, executando o método que o interceptor implementou e se for o caso permite a chamada do método original o qual é executado normalmente.
Esse mecanismo é formado por uma annotation própria e uma classe com um método apropriado para executar isso. Observe a Figura 02.
No limiar da chamada do método findById(), o CDI entra em ação e intercepta a chamada, representada pelo retângulo amarelo antes da seta do método. Nesse momento o CDI chama a annotation @Cronometro e o método manage(), que realiza o start do cronometro e chama o método original, findById(). Ao final da execução do método o CDI obtém esse retorno e finaliza o cronometro, para enfim retornar a chamada ao método da classe MusicaFacade.
Com isso é possível utilizar a annotation @Cronometro em qualquer método que precise monitorar o tempo de execução e com isso esse código de medição de tempo ficará em um único lugar.
finnaly{
Em um post futuro vamos descrever como criar o interceptor @Cronometro.
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Leave a Reply