2009-10-15 10 views
9

Estoy implementando un EJB que debe establecer un temporizador y ser activado por él cada 24 horas. Pero, ¿dónde debería configurar el temporizador? @PostConstruct no ayuda: se trata de un bean de sesión, por lo que se invocará el método post-construcción cuando se cree la instancia real (esto nunca ocurre ya que el único propósito de este bean es rastrear el temporizador).¿Cómo recibir notificaciones sobre la implementación de EJB (para configurar un temporizador)?

¿Hay alguna otra forma de recibir notificaciones sobre el despliegue del bean (sin instanciación) para configurar el temporizador allí?

Gracias

Respuesta

1

La solución que he encontrado es feo, pero tan feo como cualquier otra solución legal a este problema (por ejemplo, solución de @fvu). Al aplicar la anotación @WebService al bean, JBoss crea una instancia inmediatamente después de la implementación (porque necesita la forma de construir el WSDL del bean), por lo que se invocará el método de @PostConstruct. Pude configurar un temporizador desde allí.

3

creo que la solución más fácil y más portátil es agregar una aplicación web para su empresa a la solicitud en un oyente contexto (contextInitialized event) que inicializa el EJB.

Por cierto, eso es más o menos lo que hace el programador de cuarzo, así (QuartzInitializerListener clase)

5

EJB 3.1 presenta el Singleton bean. Se creará en el momento del despliegue del 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"); 
    } 
} 

Otra nueva característica de EJB 3.1 que puede ser utilizado para ejecutar una tarea periódica es la Schedule annotation.

Cuestiones relacionadas