2012-05-01 12 views
6

Qualcuno sa come eseguire l'annotazione @Schedule su JBoss AS 7?JBoss AS 7.1 - pianificazione in esecuzione con annotazione @Schedule

So che su Glassfish-3.1.2 funziona immediatamente.

provo questo:

@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"); 
    } 

} 

mi aspetto ricevere un messaggio di log ogni minuto, ma niente;)

ho controllato queste discussioni del forum, ma niente aiuta:

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

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

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

A hanno JBoss AS 7.1.1-Finale

Forse ho dimenticato qualcosa, si prega di qualcuno mi può puntare a modo giusto?

UPDATE:

So che JBoss registrare il mio EJB a JNDI:

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

E 'stato risolto, come indicato nei commenti di servizio

+3

Vedi questa discussione, in particolare il parametro "ora": http://stackoverflow.com/questions/10246606/java-ee-scheduler- non-è-chiamato –

+1

Problema risolto impostando il parametro dell'ora.Tuttavia, ho provato prima con valori esatti come @Schedule (minute = "18", hour = "15") ma non succede nulla.Grazie. – rkosegi

risposta

6

Timer è il servizio EJB. ImportStatementSchedule deve essere un bean di sessione @Stateless o @Singleton. Dalla specifica EJB 3.1, Sezione 18.2:

Per i timer creati automaticamente, il metodo di timeout può essere un metodo annotato con l'annotazione di pianificazione. I timer possono essere creati per i bean di sessione stateless, i bean di sessione singleton, i bean basati sul messaggio e i bean di entità 2.1. Non è possibile creare timer per bean di sessione con stato.

L'istruzione del registro INFO è fuorviante. JBoss non registra un EJB. E 'appena utilizza lo stesso schema di denominazione come definito dal @ManagedBean di annotazione (Javadoc):

[..] nomi bean gestito deve essere univoco all'interno di un modulo Java EE. Per ciascun bean gestito denominato, i contenitori Java EE devono rendere disponibili le seguenti voci in JNDI, utilizzando lo stesso schema di denominazione utilizzato per i componenti EJB. Nel namespace applicazione:

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

Nel namespace del modulo del modulo che contiene il bean gestito:

java:module/<bean-name>

+0

+1 per un buon riferimento, ma ho provato prima entrambe le annotazioni Stateless o Singleton, ora so che il problema era come @Nick Wilson menzionato nel parametro dell'ora. – rkosegi

+0

thx, @rkosegi. vuol dire che puoi usare '@ Schedule' senza usare' @ Stateless' o '@ Singleton'? – kraftan

+0

No, significa che non sono riuscito a farlo funzionare finché non ho impostato il parametro dell'ora su "*". Attualmente sto usando l'annotazione Stateless e funziona. – rkosegi

4

posso aggiungere, che se si scrive

@Schedule(minute="*")

sparerà solo a mezzanotte. Perché il parametro dell'ora è predefinito: .

Prova: @Schedule(minute = "/1", hour = "") o qualcosa di simile. Nel mio caso ha aiutato.

0

È necessario specificare ore, provare:

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