2012-06-28 12 views
6

Tengo Glassfish 3.1.2 que se ejecuta en un clúster y una aplicación EJB 3.1. Y necesito dos tipos de métodos programadas en mi solicitud:¿Cómo ejecutar un método programado en un clúster para un nodo y para todos?

  • un tipo que se ejecuta sólo una vez (en un solo nodo) una vez al día
  • y otro tipo que se ejecuta en todos los nodos (cada 1-2 minutos) - ¡NO necesitan ejecutar una forma sincronizada! El requisito es que este tipo se ejecute en cada nodo.

No tengo ni idea de cómo empezar con este clúster - problema, ¿es posible con @Schedule (y cómo) o necesito algo más?

+0

Hay una respuesta a esta pregunta en esta respuesta : http://stackoverflow.com/a/11465568/280244 – Ralph

Respuesta

8

Me enfrenté exactamente al mismo problema (necesito un temporizador cluster y un temporizador per node) y me encontré con esta pregunta. Por lo tanto, para cualquier persona interesada:

Si se declara el temporizador con @Schedule (..., persistente = true), recibirá un temporizador cluster almacenada en la base de datos del temporizador (que se pueden migrar)

Si usted declara el temporizador con @Schedule (..., persistente = falso), obtendrá un temporizador node no almacenado en el temporizador db (que no se puede migrar)

+0

¿Es solo una observación, o hay algún documental? – Ralph

+0

@Ralph Este comportamiento se verifica en mi aplicación (se ejecuta en un clúster de Glassfish 3). No puedo encontrar la documentación exacta, pero puedo explicar el comportamiento: Si el temporizador es persistente en la base de datos del temporizador (una base de datos MySQL en mi caso, no puede usar el db incorporado en un clúster), se compartió para todos nodos a través de la base de datos. Para un temporizador no persistente, cada nodo no tiene manera de saber que el temporizador existe en otros nodos, por lo tanto, se crea un nuevo temporizador en cada nodo. – Cascader

+0

También puede leer [esto] (http://www.java.net/forum/topic/glassfish/glassfish/non-persistent-singleton-timers-clustered-environment-using-gf31) – Cascader

0

Podría consultar el uso de JMS. Para el método que necesita ejecutarse en un solo nodo, use una cola y para los que necesitan ejecutarse en todos los nodos use un tema.

Cuestiones relacionadas