2012-08-24 12 views
6

Ich muss eine einfache geplante Aufgabe ausführen, die alle 200ms startet und etwas Einfaches tut.Was ist ein ordnungsgemäßer Start der geplanten Aufgabe auf Java EE 5 (JBoss) -Plattform?

Ist Executors.newSingleThreadScheduledExecutor() der richtige Weg, einen geplanten Executor-Service auf JBoss zu erhalten?

Es wird gesagt, dass das Erstellen nicht verwalteter Threads auf Java EE-Plattform nicht empfohlen wird. Es scheint, dass dieser Thread nicht verwaltet wird.

Auf der anderen Seite möchte ich MBeans etc. für so einfache Sache nicht deklarieren.

bearbeiten

Es gibt etwas wie org.jboss.resource.work.JBossWorkManager aber ich kann nicht ein Beispiel für geplante Arbeit finden.

+0

verwenden Sie zufällig Spring? – Eugene

+0

Nein, es ist nur Java EE 5 + Naht (alt) –

Antwort

4

Aufruf Executors.newSingleThreadScheduledExecutor() ist nicht schrecklich, aber besser vermeiden Sie es in EE-Containern. 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 haben Sie praktisch @Schedule annotation.

+0

Keine Möglichkeit, es ohne EJB proprietär zu tun? (Ich bin auf JBoss 4.x, langer Weg zu Java EE 6) –

+0

@PiotrGwiazda: ['TimerService'] (http://docs.oracle.com/javaee/6/api/javax/ejb/TimerService.html) wurde in EJB 2.1 eingeführt, Sie sollten also auf JBoss 4.x in Ordnung sein. –