2012-05-01 6 views
6

Wer weiß, wie man @Schedule-Annotationsarbeit auf JBoss AS 7 macht?JBoss AS 7.1 - laufender Zeitplan mit @Schedule-Annotation

Ich weiß, dass auf Glassfish-3.1.2 es Out-of-Box funktioniert.

Ich versuche dies:

@ManagedBean 
@Stateless(name="ImportStatementSchedule") 
public class ImportStatementSchedule implements Serializable{ 
private Logger _log = Logger.getLogger(this.getClass()); 

    @Schedule(minute="*") 
    public void executeImport(){ 
     _log.info("Scheduled task started"); 
    } 

} 

Ich erwarte, dass jede Minute Protokollmeldung angezeigt, aber nichts;)

ich diese Themen im Forum überprüft, aber nichts hilft:

https://community.jboss.org/message/623574

https://community.jboss.org/message/621893

https://community.jboss.org/message/637567

A haben JBoss AS 7.1.1-Finale

Vielleicht etwas, das ich vergessen, kann mir bitte jemand richtigen Weg zeigen?

UPDATE:

Ich weiß, dass JBoss meine EJB JNDI registrieren:

11:07:05,548 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-6) JNDI bindings for session bean named ImportStatementSchedule in deployment unit deployment "finadv.war" are as follows: 

    java:global/finadv/ImportStatementSchedule!finadv.bean.ImportStatementSchedule 
    java:app/finadv/ImportStatementSchedule!finadv.bean.ImportStatementSchedule 
    java:module/ImportStatementSchedule!finadv.bean.ImportStatementSchedule 
    java:global/finadv/ImportStatementSchedule 
    java:app/finadv/ImportStatementSchedule 
    java:module/ImportStatementSchedule 

UPDATE2

Es wurde gelöst, wie in den Kommentaren erwähnt

+3

dieses Thema Siehe, insbesondere die "Stunde" Parameter: http://stackoverflow.com/questions/10246606/java-ee-scheduler- is-not-called –

+1

Problem gelöst durch Einstellung Stunde Parameter.Jetzt habe ich versucht, mit genauen Werten wie @Schedule (Minute = "18", Stunde = "15"), aber nichts passiert.Danke. – rkosegi

Antwort

6

Timer Service ist EJB-Service. ImportStatementSchedule sollte eine @Stateless oder @Singleton Session-Bean sein. Aus der EJB 3.1-Spezifikation Abschnitt 18.2:

Bei automatisch erstellten Zeitgebern kann es sich bei der Zeitüberschreitungsmethode um eine Methode handeln, die mit der Annotation Schedule kommentiert wird. Timer können für Stateless-Session-Beans, Singleton-Session-Beans, Message-Driven-Beans und 2.1-Entity-Beans erstellt werden. Für Stateful-Session-Beans können keine Timer erstellt werden.

Die Protokollanweisung INFO ist irreführend. JBoss registriert kein EJB. Es verwendet nur das gleiche Namensschema wie durch die @ManagedBean Anmerkung (Javadoc) definiert:

[..] Managed Bean Namen innerhalb eines Java EE-Modul eindeutig sein muss. Für jede benannte Managed Bean müssen Java EE-Container die folgenden Einträge in JNDI bereitstellen, wobei das gleiche Namensschema verwendet wird wie für EJB-Komponenten. Im Anwendungsnamensraum:

java:app/<module-name>/<bean-name>

Im Modul Namensraum des Moduls die Managed Bean enthält:

java:module/<bean-name>

+0

+1 für gute Referenz, aber ich versuchte, bevor beide Stateless oder Singleton Annotation, jetzt weiß ich, dass das Problem war, wie @Nick Wilson im Stundenparameter erwähnt. – rkosegi

+0

thx, @rkosegi. bedeutet das, dass Sie "@ Schedule" verwenden können, ohne "@ Stateless" oder "@ Singleton" zu verwenden? – kraftan

+0

Nein, es bedeutet, dass ich es nicht arbeiten konnte, bis ich den Stundenparameter auf "*" gesetzt habe. Derzeit verwende ich Stateless Annotation und es funktioniert. – rkosegi

4

ich hinzufügen, dass, wenn Sie schreiben

@Schedule(minute="*")

wird nur um Mitternacht ausgelöst. Da der Stundenparameter der Standardwert ist: .

Versuchen Sie: @Schedule(minute = "/1", hour = "") oder so ähnlich. In meinem Fall hat es geholfen.

0

Sie Stunden angeben müssen, versuchen:

@Schedule(hour="\*", minute="\*")