Werden CDI-Ereignisse in JSF-Backing-Beans mit Sitzungsumfang beobachtet?

8

Ich frage mich, ob es möglich ist, ein CDI-Ereignis mit mehreren JSF 2.0-Session-Backbones zu beobachten. Ich dachte, dass ich Ereignis / Daten zu mehreren Sitzungen schieben könnte, indem ich das Ereignis beobachte.

Ich habe einen kleinen Test eingerichtet, mit dem der Benutzer das Ereignis mithilfe einer Schaltfläche auf der Seite auslösen kann (die an eine Methode in der sitzungsspezifischen Backed Bean gebunden ist, die das Ereignis tatsächlich auslöst). Ich dachte, wenn ich zwei verschiedene Browser öffne, würden zwei Sitzungen erstellt werden und das Ereignis würde jeden der sessionspezifischen Backing-Beans benachrichtigen.

Wenn ich jedoch meinen kleinen Test ausführe und auf die Schaltfläche klicke, um das Ereignis in einem der Browser auszulösen, sehe ich, dass das Ereignis nur eine der Session-abhängigen Beans benachrichtigt. Es benachrichtigt nur die Bean, von der das Ereignis ausgelöst wurde (dh - wenn ich auf die Schaltfläche in Browser 1 klicke, wird der Sitzungsumfang der Sitzung in Browser 1 benachrichtigt, und wenn ich auf die Schaltfläche in Browser 2 klicke, wird die Bean die Sitzung unterstützen Browser 2 wird benachrichtigt).

Ich hatte den Eindruck, dass Ereignisse alle Bean-Instanzen benachrichtigen würden. Dies scheint jedoch nicht der Fall zu sein. Sollte ich das können? Habe ich gerade etwas falsch eingerichtet?

UPDATE um zu zeigen, wie mein Code aussieht:

Ein Ausschnitt aus jsfpage.xhtml zum Auslösen eines Ereignisses und zum Anzeigen der sitzungsbezogenen Daten:

%Vor%

Die sitzungsspezifische Bean, die das Ereignis empfängt:

%Vor%

Eine Anwendungsbereichs-Bean zum Auslösen des Ereignisses:

%Vor%     
Captain Mingo 19.12.2010, 06:43
quelle

2 Antworten

2

Zuerst sollten Sie den Typ des Ereignisses angeben:

%Vor%

Abgesehen davon gibt es in der Spezifikation keine Hinweise, die die Bean-Instanzen einschränken würden, auf denen die Beobachtermethode aufgerufen wird. Ich würde ein Problem darüber (im Bugtracker der Implementierung, die Sie verwenden. Vielleicht Weld?) Einreichen.

    
Bozho 27.12.2010, 16:13
quelle
0

Ich habe festgestellt, dass alle registrierten Beobachter gefeuert werden.

Vor allem, wenn ich einen Beobachter auf einer Conversation Scoped Bean habe und diese Bean in der aktuellen Conversation nicht aktiv ist, dann wird, wenn das Event ausgelöst wird, speziell eine neue Instanz erstellt, um es zu empfangen!

    
Richard Corfield 19.10.2011 08:14
quelle

Tags und Links