2009-10-15 15 views
9

Sto distribuendo un EJB che dovrebbe impostare un timer e attivarlo ogni 24 ore. Ma dove dovrei impostare il timer? @PostConstruct non aiuta - questo è un bean di sessione, quindi verrà invocato il metodo di post-costruzione quando viene creata l'istanza effettiva (questo non accade mai come l'unico scopo di questo bean è di tenere traccia del timer).Come ricevere notifiche sulla distribuzione EJB (per impostare un timer)?

C'è qualche altro modo per ricevere notifiche sulla distribuzione dei bean (non la creazione di istanze) per impostare il timer lì?

Grazie

risposta

1

La soluzione che ho trovato è brutto, ma altrettanto brutto come qualsiasi altra soluzione legale a questo problema (ad esempio, la soluzione da @fvu). Applicando l'annotazione @WebService al bean, JBoss lo istanzia immediatamente dopo la distribuzione (perché ha bisogno del modo di costruire il WSDL del bean), quindi verrà invocato il metodo @PostConstruct -marked. Sono stato in grado di impostare un timer da lì.

3

penso che la soluzione più semplice e più portatile è di aggiungere una web-application per la vostra impresa-applicazione con un contesto ascoltatore (contextInitialized event) che inizializza l'EJB.

Tra l'altro, questo è più o meno quello che il quarzo Scheduler fa pure (classe QuartzInitializerListener)

5

EJB 3.1 introduce lo Singleton bean. Sarà creato al deplyoment dell'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"); 
    } 
} 

Un'altra nuova funzionalità di EJB 3.1 che può essere utilizzato per eseguire periodicamente un'attività è il Schedule annotation.

Problemi correlati