2012-08-24 50 views
6

Necesito ejecutar una tarea programada simple que se iniciará cada 200 ms y hará algo simple.¿Cuál es una forma adecuada de iniciar tareas programadas en la plataforma Java EE 5 (JBoss)?

¿Es Executors.newSingleThreadScheduledExecutor() la forma correcta de obtener el servicio de ejecutor programado en JBoss?

Se dice que no se recomienda engendrar subprocesos no administrados en la plataforma Java EE. Parece que este hilo será no administrado.

Por otro lado, no quiero declarar MBeans, etc. para algo tan simple.

Edición

Hay algo tan org.jboss.resource.work.JBossWorkManager pero no puedo encontrar un ejemplo de trabajo programado.

+0

¿Estás usando Spring por casualidad? – Eugene

+0

No, es solo Java EE 5 + Seam (antiguo) –

Respuesta

4

Llamar a Executors.newSingleThreadScheduledExecutor() no es terrible, pero es mejor evitarlo en contenedores EE. En Java EE 5 use TimeoutService:

@Stateless 
public class TimerSessionBean implements TimerSession { 
    @Resource 
    TimerService timerService; 

    public void startTimer() { 
     Timer timer = timerService.createTimer(200, "Created new timer"); 
    } 

    @Timeout 
    public void timeout(Timer timer) { 
     logger.info("Timeout occurred"); 
    } 
} 

en Java EE 6 que tengas a mano @Schedule annotation.

+0

¿No hay forma de hacerlo adecuadamente sin EJB? (Estoy en JBoss 4.x, camino largo a Java EE 6) –

+0

@PiotrGwiazda: ['TimerService'] (http://docs.oracle.com/javaee/6/api/javax/ejb/TimerService.html) se introdujo en EJB 2.1, por lo que debería estar bien en JBoss 4.x. –

Cuestiones relacionadas