2012-06-28 14 views
6

Possiedo un Glassfish 3.1.2 che viene eseguito in un cluster e un'applicazione EJB 3.1. E ho bisogno di due tipi di metodi pianificati nella mia domanda:Come eseguire un metodo pianificato in un cluster per un nodo e per tutti?

  • un tipo che viene eseguito solo una volta (su un singolo nodo) una volta al giorno
  • e l'altro genere che funziona su tutti i nodi (ogni 1-2 minuti) - Non hanno bisogno di eseguire un modo sincrono! Il requisito è che questo tipo venga eseguito su ogni nodo.

Non ho idea di come iniziare con questo cluster - problema, è possibile con @Schedule (e come) o ho bisogno di qualcos'altro?

+0

C'è una risposta a questa domanda in questa risposta : http://stackoverflow.com/a/11465568/280244 – Ralph

risposta

8

Ho affrontato lo stesso identico problema (è necessario un timer cluster e un timer per node) e ho trovato questa domanda. Quindi, per chiunque sia interessato:

Se si dichiara il timer con @Schedule (..., persistente = true), si otterrà un timer cluster memorizzato nel db timer (che può essere migrato)

Se dichiari il timer con @Schedule (..., persistent = false), riceverai un timer node non memorizzato nel timer db (che non può essere migrato)

+0

Questa è solo un'osservazione, o c'è qualche documentario? – Ralph

+0

@Ralph Questo comportamento è verificato sulla mia applicazione (in esecuzione su un cluster Glassfish 3). Non riesco a trovare la documentazione esatta ma posso spiegare il comportamento: Se il timer è persistente nel database del timer (un database MySQL nel mio caso, non è possibile utilizzare il db incorporato su un cluster), è condiviso per tutti nodi attraverso il database. Per un timer non persistente, ciascun nodo non ha modo di sapere che il timer esiste su altri nodi, quindi viene creato un nuovo timer su ciascun nodo. – Cascader

+0

Puoi anche leggere [questo] (http://www.java.net/forum/topic/glassfish/glassfish/non-persistent-singleton-timers-clustered-environment-using-gf31) – Cascader

0

Si potrebbe guardare utilizzando JMS. Per il metodo che deve essere eseguito su un singolo nodo, utilizzare una coda e per quelli che devono essere eseguiti su tutti i nodi utilizzare un argomento.