Potrzebuję zachować prosty licznik, który jest unikalny w aplikacji, dla wszystkich użytkowników i wszystkich węzłów w środowisku klastrowym. Myślałem o użyciu singleton sesji fasola adnotacji javax.ejb.Singleton tak:W jaki sposób singleton jest javax.ejb.Singleton w środowisku klastrowym?
package foo;
import javax.ejb.Singleton;
@Singleton
public class Bean {
private int counter;
[...]
}
Wygląda to proste, ale nie mogę znaleźć odpowiedzi, czy to działa zgodnie z oczekiwaniami w środowisku klastrowym. Czy każdy węzeł klastra ma własną instancję, czy nie?
Oczywiście mógłbym utrzymać zawartość fasoli w bazie danych, ale tak naprawdę to tylko licznik, a to byłoby przesadą. Ponadto chcę, aby licznik zresetował awarię aplikacji lub uruchomił się ponownie, więc utrzymanie go spowoduje więcej problemów niż rozwiązuje.
Nawet jeśli zdecydujesz się go utrzymać, rozwiązanie może nie być pełnym dowodem. Co się stanie, gdy pojawi się żądanie w węźle 2, a węzeł 1 będzie zajęty utrzymaniem zaktualizowanej wartości licznika? :-) – Abhishek
Jeśli używasz db, który obsługuje sekwencje, możesz z nich korzystać. Czemu? Ponieważ uważam, że jest to najlepsze niezawodne rozwiązanie. W swoim singleton można użyć adnotacje cyklu życia do wykonania operacji resetowania sekwencji, czy na starcie lub zniszczyć, zależy od ciebie. – Raman
Muszę policzyć i obniżyć, a serwer aplikacji ma inny cykl życia niż baza danych, więc to nie działa, ale dzięki. –