2012-08-24 4 views
6

Ho bisogno di eseguire una semplice operazione pianificata che inizierà ogni 200 ms e farà qualcosa di semplice.Qual è un modo corretto per avviare l'attività pianificata sulla piattaforma Java EE 5 (JBoss)?

Executors.newSingleThreadScheduledExecutor() è il modo corretto di ottenere il servizio di esecuzione di un programma su JBoss?

Si dice che non è consigliata la generazione di thread non gestiti sulla piattaforma Java EE. Sembra che questa discussione sarà non gestita.

D'altra parte non voglio dichiarare MBeans ecc. Per una cosa così semplice.

Modifica

C'è qualcosa come org.jboss.resource.work.JBossWorkManager, ma non riesco a trovare un esempio di lavoro programmato.

+0

stai usando Spring per caso? – Eugene

+0

No, è solo Java EE 5 + Seam (vecchio) –

risposta

4

Chiamare Executors.newSingleThreadScheduledExecutor() non è terribile, ma è meglio evitarlo nei contenitori EE. In 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"); 
    } 
} 

in Java EE 6 si ha a portata di mano @Schedule annotation.

+0

Non c'è modo di farlo senza EJB? (Sono su JBoss 4.x, long way to Java EE 6) –

+0

@PiotrGwiazda: ['TimerService'] (http://docs.oracle.com/javaee/6/api/javax/ejb/TimerService.html) è stato introdotto in EJB 2.1, quindi dovresti stare bene su JBoss 4.x. –