# ICEfaces

ICEfaces ist ein auf JavaServer Faces (JSF) basierendes Ajax-Framework für Java, welches durch ICEsoft entwickelt wird. Seit November 2006 steht das Projekt bis und mit Version 2 neben einer kommerziellen Lizenz auch unter der Mozilla Public License (MPL) zur Verfügung. Die aktuelle Version von IceFaces (Version 3) enthält viele Komponenten, wovon einige jedoch erweiterte Kopien von PrimeFaces sind. Aus diesem Grund musste IceFaces auch ihre Lizenz von MPL auf die von PrimeFaces benutzte Apache-Lizenz ändern.
ICEfaces verfügt über eine umfangreiche Bibliothek an Komponenten für die Benutzerschnittstelle mit eingebauter Ajax-Funktionalität. Dazu gehören beispielsweise Bäume, Tabs und Menüs. Diese Komponenten können in einer standardkonformen JSF-Seite verwendet werden. Im Gegensatz zu den üblichen Komponenten einer Webseite können diese jedoch über Ajax mit dem Webcontainer kommunizieren und bei Bedarf Daten nachladen, ohne dass die gesamte Webseite neu geladen wird. Der Entwickler muss sich dabei nicht um die Details dieser Kommunikation kümmern, da diese im Hintergrund transparent abläuft. Mit ICEfaces lassen sich so Rich Internet Application (RIA) entwickeln, ohne JavaScript programmieren zu müssen. Der schlussendlich im Browser ausgeführte JavaScript-Code wird durch das Framework zur Laufzeit generiert.
ICEfaces baut auf einigen Web-Standards der Jakarta EE (Java EE 8) Architektur auf. Zu diesen Standards gehören wie bereits oben erwähnt JavaServer Faces, aber auch Facelets und Portlets. Für die Entwicklung können die herkömmlichen Java-Entwicklungsumgebungen eingesetzt werden und es sind keine Erweiterungen wie z. B. ein spezielles Plug-in notwendig. Zum Ausführen einer ICEfaces-Applikation im Browser sind ebenfalls keinerlei Plug-ins notwendig.

## ICEfaces im Überblick
### Rich Client Funktionalität

    Mit ICEfaces lassen sich Rich Client basierte Jakarta-EE (Java EE 8)-Anwendungen erstellen. Hierzu stehen mehr als 50 Komponenten zur Verfügung.

### Open Source

    Die Icefaces-Community hat mehr als 45.000 registrierte Nutzer. Das Forum wird aktiv von Icesoft-Mitarbeitern betreut. Das Geschäftsmodell von Icesoft basiert allerdings auf kostenpflichtiger technischer Unterstützung und Schulungen.

### Standardorientiert

    ICEfaces ist eine reine auf JSF basierte Java-Enterprise-Lösung. Entwicklern ist es somit möglich, in ihrer gewohnten Entwicklungsumgebung zu arbeiten. Hinzu kommen Plugins für bekannte Entwicklungsumgebungen wie Eclipse oder NetBeans.

### Transparentes Ajax

    ICEfaces bietet mit Komponentenbibliotheken die Möglichkeit für Java/JSF Entwickler, Ajax-Anwendungen mit wenig Aufwand zu erstellen. Dazu soll kein JavaScript, sondern nur JSF-Erfahrung benötigt sein.

### Integrationsfähigkeit

    ICEfaces ermöglicht die gemeinsame Nutzung gängiger Java Frameworks, IDEs und Application Server sowie Komponenten von Drittanbietern und JavaScript-Effect-Bibliotheken.

### Ajax Push

    Die als Ajax Push bezeichnete Technologie ermöglicht ein serverbasiertes Rendering von Inhalten auf dem Browser. Ajax Push ermöglicht die asynchrone Kommunikation zwischen Client Browser und Server, sodass ein Nachladen von geändertem Inhalt ohne das Absenden eines neuen Requests ermöglicht wird.

## Vergleich mit GWT

Wie das Google Web Toolkit (GWT) und andere vergleichbare Techniken unterstützt auch IceFaces die komponentengestützte Entwicklung von „Rich Internet Applications“. Das dynamische Verhalten basiert in beiden Fällen auf asynchroner Kommunikation zwischen Client (Webbrowser) und Server (Web- bzw. Applikationsserver) (Ajax). Ein wichtiger Unterschied zwischen beiden Ansätzen ist die client- bzw. serverseitige Generierung des UI-Markups. IceFaces erzeugt das „Markup“ serverseitig und integriert es dann dynamisch mittels einfacher JavaScript-Funktion in den aktuellen Dokumentenbaum. Das GWT überträgt nicht das „Markup“ selbst, sondern die Daten, die zu seiner Erzeugung nötig sind z. B. Datenbankinformationen. Das „Markup“ wird dann clientseitig erzeugt und aktualisiert. Daraus ergeben sich folgende Differenzen:
* höhere Anforderungen und Rechenlast für den Client durch das GWT, die bei Mobilbrowsern (z. B. iPhone, iPad oder Windows Mobile-Systemen) Probleme bereiten können
* höhere Netzwerklast bei der Verwendung von IceFaces, da das „Markup“ umfangreicher ist als die Anwendungsdaten
* längere Erstladezeiten beim GWT und schnellere Reaktion auf Nutzeraktionen innerhalb der Sitzung (Reaktionsverhalten ähnlich Desktopanwendungen)
* GWT-Anwendungen sind unabhängiger vom Server und damit auch bei Unterbrechung der Client-Server-Verbindung länger funktionsfähig