ICEfaces gets open sourced

As far as JSF Ajax frameworks are concerned, there seems to be two major players: Ajax4jsf and ICEfaces. I don't know that either one is a true open source project (where developers are from multiple companies), but Spring isn't either, so I don't know that it actually matters. I think it interesting that both products don't seem to care about capitalization, but I digress.

Today, ICEsoft announced they've open-sourced ICEfaces. Was this inspired by Java going GPL?1 I doubt it, these things take time and it's likely that ICEsoft had this one in the cooker for quite a while. I do think it's interesting that the major JSF component vendors (Oracle, Exadel and now ICEsoft) have all open-sourced their products. Must be a tough market out there.

Apparently, ICEfaces works with Facelets, so it should work with AppFuse and Equinox. Looking through ICEfaces documentation and sample apps, they seem to be missing a straight-forward "here's how to integrate it into your existing application" guide. They do show how to modify your web.xml, but there doesn't seem to be a short, concise guide to what configuration settings you need to add to your faces-config.xml. I was somewhat motivated to write such a guide this morning, but lost motivation quickly as I realized it might be quite the effort. If someone wants to create the Maven bundles for ICEfaces, I'll try to carve out some time later this week to write up instructions for integrating ICEfaces into Equinox and AppFuse.

Unfortunately, integrating ICEfaces into your project is only the beginning. The hard part is choosing which is a better Ajax toolkit: ADF Faces/Trinidad, Ajax4jsf or ICEfaces? Trinidad and ICEfaces seem to be more about components, whereas Ajax4jsf is more about Ajaxifying regular ol' JSF components. So I think Ajax4jsf still remains, and ICEfaces looks like a better out-of-the-box component library than Trinidad. I guess time will tell.

Update: I forgot to mention Infragistics NetAdvantage as a JSF Ajax framework. OpenLogic decided to use Infragistics in the project I started for them. I was able to get it working in AppFuse fairly easily, but it's kinda ugly from a setup standpoint. They require you to copy a bunch of static files (images, stylesheets and scripts) into your project. Yech.

[1] Stephen O'Grady has an excellent writeup on this: And Sun Said, Set My Java Free: The Open Source Q&A.

Posted in Java at Nov 14 2006, 10:27:07 AM MST 8 Comments
Comments:

Maven metadata for ICEfaces does exist (it was created for an important customer application) but at the time made sense only for their internal repository. What maven features are required for Equinox and AppFuse (if it's just packaging up the .jar files, we could do that in short order)?

In terms of modifying faces-config.xml for ICEfaces, really nothing is required by the developer. The ICEfaces .jar files contain the appropriate faces-config.xml settings that install the ICEfaces factory and ViewHandler. We can provide an article on icefaces.org that explains the extension points.

There is optional configuration in faces-config.xml that you will likely want to make use of, however. ICEfaces provides RenderManagers that can be set up through dependency injection. The various RenderManagers allow you to schedule Ajax Push in a scalable fashion (using a bounded number of threads to handle arbitrarily many clients).

Note that ICEfaces does heavily emphasize Ajaxifying regular ol' JSF components -- the ICEfaces RenderKit provides "Direct-to-DOM" implementations of the standard JSF components. In this way, you can turn a standard JSF application into an Ajax application simply by adding icefaces.jar. (No code or page changes whatsoever.) Such applications will not benefit from Ajax Push (because there is no standard JSF API for initiating a render outside of a request) but they will benefit from incremental page update. This quality of ICEfaces is particularly interesting when combined with the component templating capabilities of Facelets because it allows new Ajax components to be created from component templates that are oblivious to Ajax.

Posted by Ted Goddard on November 14, 2006 at 03:58 PM MST #

Thanks for your detailed reply Ted! As far as Maven features for Equinox and AppFuse, all we need is the JARs packaged up with the proper transitive dependencies. I haven't used ICEfaces on a project, but I'm looking forward to doing so. Nice work.

Posted by Matt Raible on November 14, 2006 at 04:03 PM MST #

hey matt - two quick things: first, very happy that you got something out of the writeup - definitely let me know if there are questions you didn't get answered. second, having seen a demo of ICEFaces recently, i can definitely second that it's excellent technology. the demo actually consisted of slides pushed via the technology; no client download necessary. very interesting stuff, and good to see it open sourced.

Posted by stephen o'grady on November 14, 2006 at 10:45 PM MST #

Matt, ICEfaces is certainly unique in a lot of ways (especially AJAX push), but pretty much all of the commercial JSF component suites have some sort of AJAX support. So, in addition to NetAdvantage, there's also ECruiser, QuipuKit, WebGalileo, and others. See http://www.jsfcentral.com/products/components/.

Posted by Kito D. Mann on November 15, 2006 at 06:38 AM MST #

From Comment 1. above: What about all those folks out there who are already using maven 2 and would like to use IceFaces? I'm sure uptake would grow dramatically if it was available from an "open" maven 2 repository. I KNOW it would help me!!!

Posted by Alan Lewis on January 04, 2007 at 05:56 AM MST #

ICEfaces is about components while A4J is for ajaxifying your JSF components. So why don't we use both ICEfaces and A4J?

Posted by Thai Dang Vu on March 26, 2007 at 04:27 AM MDT #

Also from comment 1 above: We are about to decide to use IceFaces for a project but there is still nothing available in public M2 repositories. Do that, guys, it would make it so much easier!!

Posted by Hendrik Beck on July 23, 2007 at 04:53 AM MDT #

Has any progress been made on pushing icefaces up to a maven 2 repository? I work on a number of open source and commercial projects and without having an easy way to integrate icefaces into the maven build I am hard pressed to use the technology. It is not that hard to push jars and dependency poms up to a repository but until then manually installing jars for a maven build it a real pain in the .... I am excited to use icefaces on more projects as I have used it on a couple with great success. It would be killer to be able to integrate it into all my appfuse based projects but we need the jars on a repo and they must be kept current. I am more than happy to help if anyone wants to get this started. I was a little confused on the statement above about only needing the faces-config from the icefaces jar. It seems to use icefaces for facelets you would need to copy that xml file contents to your own project and add the icefaces view renderer or am i missing something.

Posted by Scott Ryan on November 01, 2007 at 06:47 PM MDT #

Post a Comment:
  • HTML Syntax: Allowed