Ich muss einen einfachen Zähler beibehalten, der innerhalb der Anwendung für alle Benutzer und alle Knoten in einer Clusterumgebung eindeutig ist. Ich dachte über das Singleton Session Bean Anmerkung javax.ejb.Singleton mit etwa so:Wie Singleton ist javax.ejb.Singleton in einer Clusterumgebung?
package foo;
import javax.ejb.Singleton;
@Singleton
public class Bean {
private int counter;
[...]
}
Das sieht einfach, aber ich konnte keine Antwort finden, wenn diese in einer Cluster-Umgebung wie gewünscht funktioniert. Würde jeder Knoten des Clusters eine eigene Instanz haben oder nicht?
Natürlich könnte ich die Bean in einer Datenbank persistieren, aber es ist wirklich nur ein Zähler und dies wäre Overkill. Außerdem möchte ich, dass der Zähler beim Absturz der Anwendung oder bei einem Neustart zurückgesetzt wird. Wenn Sie also fortfahren, würde dies zu mehr Problemen führen, als gelöst werden können.
Auch wenn Sie es beibehalten möchten, ist die Lösung möglicherweise kein vollständiger Beweis. Was passiert, wenn eine Anforderung auf Knoten 2 auftritt, während Knoten 1 beschäftigt ist, den aktualisierten Zählerwert beizubehalten? :-) – Abhishek
Wenn Sie db verwenden, das Sequenzen unterstützt, können Sie sie verwenden. Warum? Weil ich denke, es ist die beste zuverlässige Lösung. In Ihrem Singleton können Sie Lebenszyklus-Annotationen verwenden, um einen Vorgang zum Zurücksetzen der Sequenz auszuführen, egal ob beim Start oder bei der Zerstörung, abhängig von Ihnen. – Raman
Ich muss hoch und runter zählen und der App-Server hat einen anderen Lebenszyklus als die Datenbank, also funktioniert das nicht, aber danke. –