This page (revision-41) was last changed on 04-Sep-2014 13:44 by Dieter Käppel

This page was created on 21-Aug-2013 14:14 by Dieter Käppel

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
41 04-Sep-2014 13:44 35 KB Dieter Käppel to previous

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 563 added 55 lines
!!!AJAX Push
[JSF Ext] arbietet optional mit AJAX Push. Damit können über WebSockets oder Long-Polling Daten direkt an den Browser übertragen werden. Das Atmosphere-Framekwork verwaltet am Server die Verbindungen zu den Clients, sodass nur noch über einen sogenannten Channel kommuniziert werden braucht.
Dazu ist folgende Dependency zum Projekt hinzuzufügen:
{{{
<dependency>
<groupId>org.atmosphere</groupId>
<artifactId>atmosphere-runtime</artifactId>
<version>2.1.0-beta1</version>
</dependency>
}}}
__Hinweis:__ Das Feature ist voll funktional, befindet sich noch im Beta-Stadium, die Version kann sich daher gelegentlich ändern.
!!Der Socket-Tag
Dies ist die direkteste Variante, Push in [JSF] zu integrieren. Dazu wird einfach ein sogenannter Socket in die XHTML-Seite integriert:
{{{
<e:socket channel="/test">
<f:ajax render=":push-form:chat"/>
</e:socket>
}}}
__Hinweis:__ In vielen Fällen reicht die reine Benachrichtigung des Client aus, weil dieser dann per AJAX-Call eine Server-Anfrage startet. Dies bietet den Vorteil, dass die Session und der FacesContext des entsprechenden Benutzers verfügbar ist.
Die Socket-Component unterstützt folgende Attribute und Behaviors:
||Attribut||Beschreibung
|channel|Das Attribut wird benötigt und beschreibt den Kommunikationskanal zum Server. Indem der Server diesen Channel informiert, wird im Browser eine Nachricht ausgeliefert. Die Besonderheit am Channel ist, dass dieser von beliebig vielen Browsern d.h. eingeloggten Benutzern abonniert werden kann. Der Server braucht daher nicht zu wissen, wieviele Clients überhaupt die Nachricht empfangen werden.
|onopen|Der Event wird beim Öffnen des Channels ausgelöst. Der Client weiß so immer, ob er verbunden ist oder nicht. Dadurch kann dem Nutzer auch ein Verbindungsstatus angezeigt werden.
|onclose|Das Gegenstück zu onopen, wird aufgerufen, wenn die Verbindung abbricht. Im normalen Produktivbetrieb wird diese Methode nur in Ausnahmefällen aufgerufen.
|onmessage|Dies ist der eigentliche Push-Aufruf. Wenn am Server PushContext.push() aufgerufen wird, wird am Client dieses JavaScript-Behavior ausgelöst.
|onerror|Hier kann eine Fehlerbehandlung hinzugefügt werden, zum Beispiel dem Benutzer angezeigt werden, wenn ein Problem mit der Verbindung auftaucht.
!!Push-Context
Auf der Server-Seite gibt es die Klasse com.intersult.jsf.push.PushContext. Um eine Nachricht zu einem Tag <e:socket channel="/test"> zu schicken, wird hier ein entsprechender Methodenaufruf durchgeführt:
{{{
PushContext.instance().push("/test");
}}}
!!Push-Parameter
Optional kann der Aufruf auch mit einem Parameter erfolgen, der wird dann JSON-Serialisiert und an den Client übertragen:
{{{
PushContext.instance().push("/test", parameter);
}}}
Auf der Client-Seite kann der Parameter dann wie folgt entgegen genommen werden:
{{{
<e:socket channel="/test" onmessage="alert(response.responseBody);">
}}}