Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Métodos interceptadores funcionam com métodos @Schedule?

Eu segui o conteúdo da aula e tentei implementar a ideia dos métodos interceptadores em cima de métodos temporizados com a notação

@Schedule(second = "*/2", minute = "*", hour = "*")

Mas apenas nos métodos com essa notação a interceptação não é acionada. Nos métodos do DAO, de serviços, todos funcionam. Alguém pode me ajudar? Não achei nenhuma dica na documentação.

5 respostas

Gabriel,

Cheque se a classe está anotada como um EJB. @Startup preferencialmente, pra ser um @Singleton que é inicializado logo que a aplicação subir.

Oi Alexandre, obrigado pela reposta. Eu não estava seguindo a aplicação da aula, eu estava fazendo uma própria. Assim estava usando o bean com a notação @EJB na classe e @Schedule no método que eu gostaria de rodar de 2 em 2 segundos. Mesmo assim a interceptação não ocorreu.

Você tentou com @Stateless, @Singleton ou @Singleton @Startup?

O uso da anotação @EJB na classe é um pouco curioso. Acho que nunca vi usado no mercado!

Agora, usar @EJB em um atributo é mais comum.

No fim das contas, você não está transformando sua classe em um EJB. Você está declarando uma dependência a um EJB que será colocada não em um atributo, mas no contexto JNDI [1].

[1] https://stackoverflow.com/questions/6180144/declaring-resource-and-ejb-at-the-class-level-in-java-ee6

solução!

Oi Alexandre, eu me expressei mal na pergunta e quis dizer a referência a outro classe EJB foi feita com a notação @EJB. Descobri que o motivo do problema era não usar a notação @AroundTimeout com métodos anotados com @Schedule. O código completo está nessa pergunta:

https://stackoverflow.com/questions/46869017/why-my-interceptor-class-doesnt-work-with-schedule-methods

Ah, beleza! Bem diferente do que eu tinha entendido! :)