olá pessoal,
Estou com um problema aqui na empresa. Preciso que algumas chamadas de métodos sejam interceptadas para fazer alguns testes (onde posso delegar o restante da execução para um outro objeto) e gerar alguns logs. Sobre a possibilidade de delegar a execução de um método a outro objeto, esse cenário não será uma constante… é possível que, dentro do mesmo cenário, a execução seja ou não delegada, essa decisão será tomada por meio de algumas configurações. Quanto aos logs, creio que seja uma questão muito trivial para vocês. O meu problema começa no fato de ter que fazer uma alteração “não-intrusiva” nos componentes existentes. Não posso simplesmente modificar toda a lógica dos componentes para adequar à nova realidade.
Li sobre algumas formas de interceptar um método, mas todas ocorrem em aplicações que fazem uso de EJB, Spring, etc… mas esse não chega a ser o nosso caso…
Tentei utilizar CGLIB para interceptar os métodos, mas precisaria fazer algumas mudanças nos componentes interceptados (o fato de não poder usar new nos objetos que teriam os métodos interceptados se tornou um grande problema) e acabei achando que essa seria uma forma que me custaria muito desempenho. Acabei não procurando por outras soluções parecidas pensando que esbarraria num problema de desempenho.
Pensei então em utilizar AOP através do AspectJ, mas esbarrei no fato de que os pointcuts são resolvidos em tempo de compilação e isso geraria uma mudança no ambiente dos desenvolvedores envolvidos (coisa q a empresa tem grande desconfiança). Por isso comecei a buscar por implementações onde eu pudesse resolver esses pointcuts em tempo de execução, mas não encontrei nada até o momento.
Gostaria de saber se existe alguma outra forma de interceptar a execução de um método ou alguma forma de utilizar AOP de forma que os pointcuts sejam resolvidos em tempo de execução (espero não estar querendo demais…)?
Estamos migrando para o java6 (eu sei… eu sei… já fui muito apedrejado por ainda estar no java4) mas muitos de nossos clientes não estão dispostos a mudar para o java6, então a minha solução precisa funcionar no java4.
Fico grato pela atenção
[]s