changes.
| h1. Definition |
| |
| Ajax Push allows the application to incrementally update any part of the page at any time, for any group of clients. This is a small change in terms of the technical capabilities of Ajax applications, but it is a revolutionary change in terms of what applications can actually provide to users. Ajax Push is the key to building collaborative multi-user applications for the web. |
| |
| h1. Under the Hood |
| |
| The intricacies of the Ajax Push implementation are completely transparent to the ICEfaces developer, as you work with a straightforward set of [APIs|Ajax Push - APIs]. It is, however, useful to understand the basic mechanics. Ajax Push in ICEfaces leverages an asynchronous notification mechanism called [ICEpush|http://www.icepush.org/product/overview.html]. Simply put, ICEpush uses [long polling|http://en.wikipedia.org/wiki/Push_technology#Long_polling] to provide asynchronous notification over standard HTTP, using only standard browser capabilities. The sequence of events involved in Ajax Push is illustrated below. |
| |
| !ICEfaces-2.0-Ajax-Push.png|align=center! |
| |
| # Some state change in the application triggers an Ajax Push event. |
| # ICEpush notification is delivered to the browser client over a dedicated ICEpush connection. |
| # Notification at client browser causes a JSF Ajax request with an empty execute phase. |
| # Render phase captures new state of client, and [Direct to DOM Rendering] delivers incremental page updates to client. |
| |
| The diagram shows a single client recipient of a push, but the mechanism supports named groups of clients that all receive notifications. ICEpush handles all aspects of the asynchronous blocking connections involved, including connection management/sharing, heartbeating, and Asynchronous Request Processing (ARP) integration. |
| |
| | !icefaces-services-wiki.png|align=center! |
| | [!icefaces-services-wiki.png|align=center!|http://www.icesoft.org/java/services/icefaces-professional-services.jsf] |
| |
| h1. Programming Model |
| |
| Ajax Push can be added to an application with just two lines of code. |
| |
| The _org.icefaces.application.PushRenderer_ pushes page updates to groups of pages. To cause all pages in "someGroup" to be updated with the current server state, call |
| |
| {code:java}PushRenderer.render("someGroup"); |
| {code} |
| The easiest way to assemble push groups is to push updates to all pages in a user's session using |
| {code:java}PushRenderer.addCurrentSession("someGroup"); |
| {code} |
| To distinguish between individual pages in a session, use |
| |
| {code:java}PushRenderer.addCurrentView("someGroup"); |
| {code} |
| It really is as simple as that to add real-time collaboration to your JSF application. Checkout the [full API|Ajax Push - APIs] for more details. |
| |
| h1. Deployment |
| |
| Because of the underlying asynchronous blocking connections used by the ICEpush notifications, there are a couple of deployment considerations for Ajax Push-enabled applications. |
| |
| h3. Asynchronous Request Processing (ARP) |
| |
| ICEpush relies on Servlet 3.0 standard ARP APIs. If they are not present in the deployment environment, normal thread blocking connections are used. |
| |
| h3. Enterprise Push Server |
| |
| For clustered and high-availability deployments of Ajax Push-enabled applications the [Enterprise Push Server|http://www.icefaces.org/main/ajax-java/enterprise-push-server.iface] (EPS) is required. It manages asynchronous blocking connections across the cluster and performs seamless fail over for mission-critical, high-availability deployments. EPS is available in [ICEfaces Enterprise Edition|http://www.icefaces.org/main/ajax-java/icefaces-ee.iface]. |