2012-06-28 24 views
6

Mam Glassfish 3.1.2, który działa w klastrze i aplikacji EJB 3.1. I muszę dwa rodzaje metod zaplanowanych w mojej aplikacji:Jak uruchomić Zaplanowaną metodę w klastrze dla jednego węzła i dla wszystkich?

  • jednego rodzaju, który działa tylko raz (na jednym węźle) raz dziennie
  • i innego rodzaju, który działa na wszystkich węzłach (co 1-2 minuty) - NIE muszą uruchamiać syncronów! Wymóg jest taki, że ten rodzaj działa na każdym węźle.

Nie mam pojęcia, jak zacząć od tego klastra - problem, czy jest to możliwe z @Schedule (i jak) lub czy potrzebuję czegoś innego?

+0

Istnieje odpowiedź na to pytanie w tej odpowiedzi : http://stackoverflow.com/a/11465568/280244 – Ralph

Odpowiedz

8

Napotkałem dokładnie ten sam problem (potrzebowałem jednego timera cluster i zegara per node) i natrafiłem na to pytanie. Więc dla wszystkich zainteresowanych:

Jeśli zadeklarujesz timer z @Schedule (..., uporczywy = true), to dostanie cluster czasowy zapisany w db timera (które można migrować)

Jeśli deklarujesz timer za pomocą @Schedule (..., persistent = false), otrzymasz licznik node nie zapisany w dzienniku timera (którego nie można przenieść)

+0

Czy to tylko spostrzeżenie, czy jest jakiś dokument? – Ralph

+0

@Ralph To zachowanie zostało zweryfikowane w mojej aplikacji (działającej na klastrze Glassfish 3). Nie mogę znaleźć dokładnej dokumentacji, ale mogę wyjaśnić zachowanie: Jeśli licznik czasu jest trwały w bazie danych timera (baza danych MySQL w moim przypadku nie można używać wbudowanego db w klastrze), udostępniona dla wszystkich węzły przez bazę danych. W przypadku nietrwałego zegara każdy węzeł nie ma możliwości sprawdzenia, czy licznik istnieje w innych węzłach, dlatego w każdym węźle tworzony jest nowy zegar. – Cascader

+0

Możesz także przeczytać [this] (http://www.java.net/forum/topic/glassfish/glassfish/non-persistent-singleton-timers-clustered-environment-using-gf31) – Cascader

0

Można patrzeć na używanie JMS. Dla metody, która musi działać na pojedynczym węźle, użyj kolejki, a dla tych, które muszą działać na wszystkich węzłach, użyj tematu.