2009-10-15 8 views
9

Je suis en train de déployer un EJB qui devrait régler une minuterie et être déclenché par elle toutes les 24 heures. Mais où dois-je régler la minuterie? @PostConstruct n'aide pas - c'est un bean de session, donc la méthode post-construction sera invoquée quand l'instance réelle est créée (ceci n'arrive jamais car le seul but de ce bean est de suivre le timer).Comment recevoir une notification sur le déploiement d'EJB (pour configurer un temporisateur)?

Existe-t-il un autre moyen d'obtenir des notifications sur le déploiement du bean (et non sur l'instanciation) afin d'y configurer le temporisateur?

Merci

Répondre

1

La solution que je trouve est laid, mais tout aussi laid que toute autre solution juridique à ce problème (par exemple une solution de @fvu). L'application de l'annotation @WebService au bean fait que JBoss l'instancie immédiatement après le déploiement (car il a besoin de la façon de construire le WSDL du bean), donc la méthode @PostConstruct -marked sera invoquée. J'étais capable de régler une minuterie à partir de là.

3

Je pense que la solution la plus simple et la plus portable est d'ajouter une application Web pour votre entreprise-application avec un écouteur de contexte (contextInitialized event) qui initialise le ejb.

Soit dit en passant, c'est plus ou moins ce que le planificateur Quartz fait aussi bien (classe QuartzInitializerListener)

5

EJB 3.1 introduit le Singleton bean. Il sera créé au déplyoment de l'EJB.

@Singleton 
@Startup 
public class TimerSessionBean { 

    @Resource 
    TimerService timerService; 

    @PostConstruct 
    public void startTimer() { 
     Logger.getLogger(getClass().getName()).log(Level.INFO, 
       timerService.getTimers().size() + " timers running"); 

     Logger.getLogger(getClass().getName()).log(Level.INFO, "create a timer"); 

     timerService.createTimer(10000, 10000, "a timer"); 
    } 

    @Timeout 
    void doSomething(Timer timer) { 
     System.out.println("something"); 
    } 
} 

Une autre nouvelle fonctionnalité dans EJB 3.1 qui peut être utilisé pour exécuter une tâche est périodiquement le Schedule annotation.