Newsletter sign-up
View all newsletters

Enterprise Java Newsletter
Stay up to date on the latest tutorials and Java community news posted on JavaWorld

Sponsored Links

Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs

JSF frameworks: Shale and Seam

Enhanced techniques for building JavaServer Faces applications

  • Print
  • Feedback

JavaServer Faces (JSF) brings a new paradigm to developing Web-based applications in Java. Released a few years ago, but now slated to become part of Java Enterprise Edition 5 (Java EE is Sun's new name for J2EE), JSF will gradually supplant the old manner of structuring Java Web tier applications in JavaServer Pages (JSP) and servlets. JSF, whether by standardizing multi-device renderable UI components for delivering specific device markup, or allowing interfaces to be defined by prebuilt parts—widgets, buttons, menus, among other things—or tightening the link between client-side events and server application logic, is an embodiment of lessons learned from Java Web development throughout the years.

However, its out-of-the-box state is not without its faults. In this article, I illustrate how a particular set of frameworks—specifically, Shale from the Apache Software Foundation and Seam from JBoss—has already stepped up to fill in the gaps of this up-and-coming Java technology. With that said, you should realize that JSF represents an elaborate technology in and of itself, so if you are unfamiliar with its core concepts, you are advised to check out the links in Resources to get up to speed on the terminology used in our exploration, as we will jump right into the deep end of JSF.

JSF in isolation

No technology evolves in a vacuum, and Java is testament to this. More than 300 working groups are trying to incorporate the latest and most innovative approaches to using Java for particular software development tasks, and JSF composes just one of these many groups. The latest milestone release for JSF represented by the 1.2 version has two reference implementations: the Apache Software Foundation's MyFaces and Sun Microsystems' de facto reference implementation.

While JSF's working group tries to pack as much functionality as possible in each release, three primary reasons hinder the inclusion of interesting and powerful features and give way to frameworks such as Shale and Seam:

  • Consensus: Most Java working groups are composed of various industry players. While this guarantees compatibility among many different products, it also slows the adoption process for features that might be considered unique to particular vendors' needs.
  • Cross functionalities: Java specifications, more often than not, need to play well together with other Java specifications; this leads to open-ended scenarios that in turn require ad hoc bridging techniques to tailor an adequate solution.
  • Scope creep: Like any technology, release points have to be defined, where unfortunately the next big thing has to wait until the next release cycle.


Given these aforementioned facts, let's look at what can actually be done with JSF in its 1.2 release. As we move on, we will modify this application, addressing what features can make JSF development more efficient through particular offerings in Seam and Shale.

Our application allows users to reserve flights by providing their email addresses along with departure dates and destination cities—you can observe a snapshot of this application in the figure below. Things are kept relatively simple, but this initial iteration does try to pack a few standard features so even uninitiated JSF users can grasp the capabilities behind the technology. Listing 1 shows the JSF markup page that generates the output presented in the illustration.

  • Print
  • Feedback

Resources