Thursday, 24 April 2008

ICEfaces at JavaOne 2008


JavaOne 2008 is shaping up to be an excellent show. In particular, you should be sure to pre-register for Asynchronous Ajax for Revolutionary Web Applications on Wednesday at 9:30 AM. Jeanfrancois and I have distilled the key ideas behind Ajax Push/Comet so that you can understand the Asynchronous Web Revolution. We will even describe how the Resin API works (even better than the explanation we gave at AjaxWorld).

If you would like to have your copy of Ajax in Practice signed, stop by the JavaOne DigitalGuru on Tuesday at 2:30 PM. There's even a chance to win a reproduction of the nice hat the lady on the cover is wearing (ok, I'm joking about the hat, but I will be there to talk about Ajax and ICEfaces).

At the ICEfaces booth, we will have a full contingent of people ready to answer your questions about ICEfaces (from core framework to components) and to give you a chance to provide your comments and influence the project roadmap. It's always possible on the forums, of course, but often its easier to explain your ideas in person. Most importantly, you can pick up this year's ICEfaces T-shirt and enter our iPod Touch giveaway.

This year there are a number of interesting sessions relating to Ajax Push; here are a few that I've found (titles are abbreviated in some cases):

  • TS-5250: Asynchronous Ajax for Revolutionary Web Applications : Wed 9:30
  • TS-6482: Ajax and JavaServer™ Faces Technology: Wed 2:50
  • BOF-5661: Comet: The Rise of Interactive Web: Wed 6:30
  • BOF-4922: Using Google Web Tookit and Comet: Wed 7:30
  • BOF-6584: Using Comet to Create a Web Game: Wed 8:30
  • TS-5415: Java™ Servlet 3.0 API: Thu 10:50
  • BOF-5495: Untangling the Asynchronous Web: Thu 8:30
  • TS-4883: Java™ NIO Technology w/ Grizzly Framework: Fri 1:30

Technorati Tags:

Posted by ted.goddard at 6:45 PM in Entries by Ted Goddard

Wednesday, 23 April 2008

Ajax Pushed at fisl9.0


fisl9.0 turned out to be a far greater success than I could have imagined. With over 7000 participants and a few (beneficial) schedule changes, I had a chance to present with Alexandre Gomes (standing room only; be sure to check out his BOF on GWT at JavaOne), Francois Orsini and Gregg Spoar.

Here I am, showing WebMC on the iPhone. The trick to giving web-based demos on the iPhone (when the server is on your laptop and a WiFi network may or may not be available) is to enable connection sharing on your Mac (even if you don't have a connection to share). This works much better than creating an ad-hoc network from the Airport menu. You can even use multicast DNS names from the iPhone, such as "icefaces.local".

Technorati Tags:

Posted by ted.goddard at 6:07 PM in Entries by Ted Goddard

Monday, 14 April 2008

ICEfaces 1.7 - Something for Everyone

ICEfaces 1.7 is here!

A lot of sweat and a few tears went into it, and it took a little longer to arrive than many of us would have liked, but I think you'll be very pleased with how it turned out. The culmination of over 45 enhancements, 110 improvements, and 300 bug fixes, there's no question that it's a major leap forward in the evolution of ICEfaces.  With significant enhancements and improvements in every direction you look, there is truly something here for everyone.

Perhaps the most visible changes are the 7 entirely new components (e.g. context menu, rich text editor, media player, Google map, split-pane, etc.), with an additional 6 subcomponents for Google Maps alone. Additionally, there have been a whopping 47 component enhancements made as well, including user-resizable table columns, multi-column / multi-row table headers, row-span grouping of table data, auto-positioning for popup panels - the list goes on and on. An entirely new theme has been added too, called "Rime", which provides a fresh new face for the  ICEfaces Component Suite.  I'm pleased to report that in this release we've been able to address most of the highest-ranked new component features as voted for by the ICEfaces community.

To better demonstrate all the new component features the Component Showcase sample applications have been completely redeveloped. The new Component Showcase features improved code-samples, more consistent styling and layout, and improved component demos for many components. It also provides additional links to component documentation and resources, tutorials, etc., providing an excellent starting point for anyone looking to learn more about the components. 

Less visible, but equally important to everyone leveraging ICEfaces' asynchronous update features (Ajax-push) in wide-scale deployments is the addition of out-of-the-box support for 5 leading Asynchronous Request Processing (ARP) implementations, such as Glassfish "Grizzly" and Tomcat 6 / JBoss 4.2 NIO. By leveraging these ARP implementations ICEfaces applications can  immediately benefit from reduced server-side resource consumption for asynchronous applications, resulting in increased scalability of asynchronous apps. on the same hardware and software. Special thanks to Jean-Francois Arcand at Sun for all his help with the Glassfish Grizzly integration.

In addition, we've re-engineered the JavaScript bridge to handle asynchronous connection management between multiple viewports using a robust connection sharing implementation that eliminates issues related to using multiple async. views between browsers and to the same host due to the HTTP 2-connection limit. The Asynchronous HTTP Server (AHS) has also been added into the core ICEfaces bundle for this release, along with a new servlet deployment mode that makes it easier to configure and use.

The changes above were a key enabler for ICEfaces much improved support for JSR-168 portlets, including full support for multiple ICEfaces portlets on a the same page, async. or synchronous, from a single .war file or several. ICEfaces 1.7 has been verified with 5 leading Java portal containers, including Liferay Portal, BEA WebLogic Portal, and JBoss Portal. Some really outstanding work has been done to bring robust portlet support to the ICEfaces community. I'd like to give a shout-out of thanks to our friends at Liferay in particular, who have been fantastic supporters of ICEfaces and continue to work with us to bring the best portlet development experience possible to the combined ICEfaces and Liferay communities.

New features are nice but without excellent documentation and examples they can be difficult to use effectively. On this front we've put a concerted effort in to review and upgrade the ICEfaces documentation in this release, beyond simply refreshing references, etc. for 1.7.  The net result is we've added of 8 entirely new sections and 2 new appendices. We've really tried to fill in some gaps in the and react to community suggestions for improvements. I'd strongly recommend to everyone to check out the new docs, it will save you time in the long run and allow to get the most out of what ICEfaces has to offer.

There really is far too much that's new and improved in 1.7 for me to cover here, updates to Tool integrations, new Seam sample applications, etc., etc..  Check out the Release Notes for the complete picture.

Finally, I'd need to highlight how greatly 1.7 has benefited from all the community involvement along the way. A special thank-you to everyone who's been working with the ICEfaces 1.7 early-access releases and reporting issues, offering suggestions, and making contributions. It's been a very challenging, yet satisfying release, and that's best kind, really. 

Technorati Tags:

Posted by ken.fyten at 12:23 PM in Entries by Ken Fyten

Thursday, 10 April 2008

Ajax Push Comes of Age

Ajax Push has always been an integral capability of the ICEfaces framework, but for the longest time it was not a primary consideration of the average technology evaluator. We always found this surprising, because the impact that push can have on a web application is far more profound than Ajax's primary claim to fame - eliminating the full page refresh. In recent months, however, we have seen a marked change in demand for push technology within the ICEfaces community, and we are now involved with a large number of projects where Ajax Push is front and center on the requirements list. So when people are evaluating their options for achieving web-based push, what makes them decide on ICEfaces?

Simply put - ICEfaces provides the most comprehensive open source solution in the industry for lightweight (plugin-free), push for web applications. Now, I will back up that statement with the supporting facts.

To begin with, while there are hundreds of open source Ajax libraries out there, only a small handful offer push capabilities - namely Dojo/Cometd, DWR/Reverse Ajax, and ICEfaces/Ajax Push. All three mechanisms are based on the same fundamental concept of HTTP protocol inversion - holding an open request from the browser, and responding to that request when something is available to be pushed. Normal and inverted HTTP connections are illustrated in the figure below.

Normal HTTP Connection

So if all push mechanisms are based on this low-level protocol inversion, then how can they be fundamentally different from the developer's perspective? With ICEfaces we have strived to provide a natural extension to the JSF programming model in support of push style application development, and have sheltered the developer from the low-level mechanics for Ajax-based push. ICEfaces provides an application-level managed bean, the RenderHub, that orchestrates push events within the JSF lifecycle. Basically, you define groups of client sessions that need to receive the same push events, and register those render groups with the hub. Some trigger point in application logic can then request a render on a given render group, and the hub will make it all happen. The hub is responsible for executing the render phase for each session in the group, coalescing requests and maximizing throughput with multiple parallel render threads. Furthermore, the RenderHub architecture supports clustered deployments. This basic push architecture is illustrated below.

ICEfaces Push Architecture

From the developer's perspective, it is a clean, natural mechanism for implementing push logic using pure Java programming techniques. What is less obvious (and rightly so) are some of the intricacies that the underlying push mechanism handles. The first relates to the browser and connection limits for the same URL. One connection from the browser is required for the push channel, and a second is required to handle user initiated requests, so an application requires 2 connections, which happens to be the maximum allowable in Internet Explorer. The connection usage for a single view onto the application is illustrated in the leftmost schematic in the diagram below.

Now if you attempt to open multiple views onto the same web application you will not have sufficient connections to support it, as each view needs a connection to support its push channel. With ICEfaces, the push mechanism in the Ajax Bridge provides connection sharing that allows multiple views to share a single connection for push updates. It is based on shared cookies where a single view marshals updates for all views, and if the controlling view is closed, another view takes over. The connection sharing for multiple views support is illustrated in the center schematic in the diagram below.

The connection problem is amplified in a portal deployment where you might have multiple portlets from different web applications looking to share the same push connection. In this case, not only do you need connection sharing at the browser, but also at the server. And because the server side connection management needs to communicate with multiple web applications you need some IPC mechanism to support it. With ICEfaces we have adapted the Asynchronous HTTP Server to handle connection management for portlets. The portal deployment support is illustrated in the rightmost schematic in the diagram below.

Normal HTTP Connection

Now if we turn our attention fully to the server-side connection issues related to push we see scalability concerns with multiple open connections at the Servlet level. Each connection requires a dedicated threat to handle it, so thread exhaustion can occur quickly within the application server. Efforts to address the asynchronous communication path within application serves has begun, and will ultimately be standardized under JSR 315. To date we have seen independent solutions emerge for Tomcat 6, Jetty 6, and most recently Glassfish/Grizzly.

 App Servers

All of these application servers support scalable asynchronous communication, and ICEfaces is integrated to work will all of them. Additionally, ICEfaces includes the Asynchronous Http Server, that can be deployed along side any application server and provides scalable handling of the push requests.

Because ICEfaces handles all of the connection related intricacies at the framework level, the developer is free to focus on application development, and to that end, has a straightforward Java API to work with. Without question, ICEfaces is the only solution in the market that provides such a comprehensive feature set and an easy to use programming model. The industry is definitely catching on to the revolutionary value of push, and when enterprises decide they need push, they are flocking to ICEfaces. Ajax Push has definitely come of age in ICEfaces.

Technorati Tags:

Posted by steve.maryka at 9:55 AM in Entries by Steve Maryka

Monday, 7 April 2008

Ajax Push at fisl9.0


I'll be presenting a comprehensive overview of Ajax Push (aka Comet) at fisl9.0 next week. Asynchronous Ajax for Revolutionary Web Applications will cover a wide spectrum on the complete push stack. Java servers and development will be certainly be emphasized, but Jeanfrancois and I have included information that is of interest to more than just Java developers. The talk allows you to compare the development environments available for applications with Dojo, DWR, and ICEfaces and the server APIs available to frameworks on Tomcat, Jetty, and GlassFish.

I'm not sure it's time to coin Web3.0 yet, but the combination of incremental page update and push is really a fundamental, revolutionary change for the web because it changes the way that communication and collaboration can take place.



Technorati Tags:

Posted by ted.goddard at 3:12 PM in Entries by Ted Goddard

Tuesday, 1 April 2008

Ajax Calendar component with Spacetime extensions


ICEfaces 1.7 will contain a number of enhancements; in particular, we've greatly improved the Calendar component (or "selectInputDate") to full spacetime support. Currently, ice:selectInputDate allows you to choose a date in your current locale:

This has now been extended to full spacetime selection with ice:selectInputSpacetime (simply a four-dimensional generalization of one-dimensional time selection) with accommodations for special and general relativity (without singularities; support for singularities is considered to be relevant only to large-scale commercial deployments, such as those exceeding 20 solar masses, and requires a support contract ).

Ajax Push works well with this new component, since it has both input and output aspects; for instance, to choose the location of a meeting while it is being scheduled by the other participants. Future enhancements to the component will allow spacetime range selection in the form of arbitrary but convex, bounded regions.

Technorati Tags:

Posted by ted.goddard at 4:21 PM in Entries by Ted Goddard