Contact Information:

Product Inquiry:

ICEpush Overview

ICEpush is a foundational technology that provides Ajax Push capabilities to ICEfaces and ICEmobile. ICEpush is based on a lightweight, asynchronous Notification Core that leverages long polling over HTTP, and standard browser capabilities to enable Ajax Push. The Core handles all intricacies associated with long polling, including connection management/sharing, and ARP - allowing developers to focus on the application of Ajax Push, not it's underlying implementation.

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.

ICEpush Architecture

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. Integration required to support ICEfaces and ICEmobile includes:

  • Servlet: The ICEpush core provides a Servlet 3.0 compliant servlet that handles all ICEpush related connections, including optional ARP support.
  • JSF: ICEfaces provides a JSF integration layer to the ICEpush core, and exposes push capabilities through the ICEfaces Ajax Push APIs. For JSF, ICEmobile leverages the ICEfaces core and inherits Ajax Push capabilities from it.
  • JSP: ICEpush provides a JSP tag library that exposes Ajax Push Capabilities to JSP-based applications. ICEmobile integrates ICEpush capabilities along side JSP/Spring MVC integration to provide a comprehensive mobile development platform for JSP/Spring MVC developers.

Cloud Push
For mobile clients, ICEpush augments the basic HTTP-based notification mechanism with Cloud Push - an alternate transport mechanism for asynchronous notifications. Different cloud push connectors support platform-specific asynchronous notification for Android, Apple, and Blackberry devices, ensuring that critical notification can always be delivered to users, even when they are not actively engaged with the web application. Learn more...