ICEpush Overview

ICEpush represents a foundational technology upon which various ICEfaces and ICEmobile push functionality is based. ICEpush was engineered to allow integration across multiple technologies (JSF, Spring, GWT …) and was made available as a community project in 2010.
ICEpush is based on a lightweight, asynchronous Notification Core that leverages long polling over HTTP, and standard browser capabilities to enable Ajax Push in any Java EE deployment. The Core handles all intricacies associated with long polling, including connection management/sharing, and Asynchronous Request Processing - allowing developers to focus on the application of Ajax Push, not it's underlying implementation. ICEpush integration bundles include:
- ICEfaces/ICEmobile
- JSP
- Spring MVC
- GWT
- Wicket
- JavaScript (raw)
- jQuery
- Prototype
These integration bundle have everything you need to get started with ICEpush using your web development technology of choice. Each technology-specific bundle includes a complete integration, and sample applications that illustrate the various features available in the bundle. Complete documentation is also included, so you will be productively developing Ajax Push features into your applications in no time.
Architecture
The diagram below illustrates the basic architecture of ICEpush. Central to it is the ICEpush Core which implements an asynchronous notification mechanism capable of triggering client-side JavaScript logic from server-based triggers. As a pure notification mechanism, the Core delivers no application-specific payload, leaving this to either an integration layer or application-specific business logic. This payload-free approach has key advantages related to scalability and security.

Notification Core
The ICEpush Core implements the asynchronous notification mechanism using long polling over HTTP. Key characteristics of the mechanism are:
- Lightweight: The mechanism is purely for notification and carries no application-specific payload, making it extremely lightweight, and massively scalable.
- Reliable: The mechanism guarantees delivery of notifications, and supports fault-tolerant/high-availability deployments.
- Secure: Because the mechanism carries no application data, it is not readily exploitable.
Long polling introduces a number of idiosyncrasies related to inversion of the HTTP protocol, and the need to maintain blocking connections capable of returning asynchronous notifications. The Core handles all the intricacies related to management of the required blocking connections, including:
- Connection Sharing: ICEpush ensures that the browser only uses a single blocking connection for notifications. When multiple browser windows are connected to push-enabled web applications in the same domain, the blocking connection is shared between all windows.
- Connection Refresh: The reliability of a blocked connection can deteriorate over time, so it is necessary to continuously refresh that connection when idle. The ICEpush mechanism periodically forces a reconnect on the blocking connection to ensure it remains healthy.
- ARP: Servlet 3.0 includes optional Asynchronous Request Processing that is fully integrated with the ICEpush mechanism, and can improve the scalability of blocking connections under certain deployment scenarios.
Integration Layer
The low-level Notification Core provides basic push capability to an application, but must be integrated with the application business logic differently, depending on what technology that business logic is implemented with. An integration layer provides the glue between the core mechanism and the particular web development technology used to implement the application. The features of any particular integration layer are tailored to the programming model for the associated development technology. An integration layer may provide some general-purpose payload retrieval and processing capabilities, or may defer payload processing entirely to application-specific business logic.


