vraptor3: Posso usar event listeners? [resolvido]

Boa tarde,

Há no vraptor3 como eu invocar métodos como no JPA usando listeners? Por exemplo, eu tenho um bean qualquer com escopo @ApplicationScoped. Então quero quando ele for inicializado chamar algum método, assim como quando ele for destruído. Porém esse meu bean não é persistente, ou seja, nem sequer passa pelo contexto JPA. Nesse caso o vraptor3 consegue invocar esses métodos nos eventos especificados?

[code]@ApplicationScoped
public final class Foo {
private String xpto;

@PostConstruct
public void eventInit() {
    xpto = "Aha";
    System.out.println("hello");
}

@PreDestroy
public void eventDestroy() {
    System.out.println("goodbye");
}

}[/code]

[code]@ApplicationScoped
public final class Foo {
private String xpto;
private final EntityManagerFactory factory;

public Foo(final EntityManagerFactory factory) {
    this.factory = factory;
}

@PostConstruct
public void eventInit() {
    xpto = "Aha";
    System.out.println("hello");
     EntityManager em = factory.createEntityManager();
     //faça o que quiser.
     em.close();
}

@PreDestroy
public void eventDestroy() {
    System.out.println("goodbye");
     EntityManager em = factory.createEntityManager();
     //faça o que quiser.
     em.close();
}

}[/code]

usei Dependencia do EntityManagerFactory, por se tratar de um escopo de aplicativo… não da pra saber quando será rodado o construction ou destroy, e assim, vc pode usar um Entitymanager quando for criar ou destruir

Lavieri, aí que está. Eu não possuo um entity manager, e nem quero ter. Eu estou em um contexto web-only, onde o JPA e controlado por um contexto EJB separado da aplicação web.

Talvez na pressa eu não expliquei direito. Mas eu tenho um bean qualquer bem simples, e quero apenas chamar alguns métodos no init e destroy do bean pelo vraptor, ou seja, chamar métodos quando o vraptor iniciar e matar meu bean. No caso do application-scoped não faz sentido, mas em um session-scoped faz sentido você chamar um método quando ele for removido da session.

Quanto ao init e destroy padrão do bean eu entendo que realmente nunca sabemos quando o destroy será chamado. Por isso pensei na annotation.

Abraços, e obrigado.

Os listeners funcionam pra qualquer componente do VRaptor (classes anotadas com @Component)

Talvez não funcione para @SessionScoped no PicoContainer… pois o Pico não tem controle de escopo, é tudo feito pelo VRaptor… e é meio difícil saber quando a sessão foi terminada (ou invalidada) sem context listeners…

@RequestScoped e @ApplicationScoped funciona bem

[]'s

Enfim, fiz os testes usando o Spring como provider e funcionou de maneira muito satisfatória.

Usei isso em uma classe pós JAAS authentication, onde essa classe pega os dados que vem do JAAS e deixa como session-scoped os dados como nome, ultimo login e tudo mais. Quando a http-session cai, o método anotado com @PreDestroy é invocado, avisando ao meu módulo EJB que o usuário foi desconectado.

:thumbup: