KM: Max, please tell us about yourself.
MK: I'm a Senior Systems Engineer at Exadel. I am responsible for technical support, training, and customer care. I also conduct online and onsite JavaServer Faces [JSF] training for our customers. I work closely with engineering, sales, and marketing to coordinate our products, services, and training. I studied computer science at University of California, Davis and got my start as a Java developer at Evite.com.
KM: What do you think is the key value of JSF?
MK: It's definitely the component-based approach to building web applications, and that it's a standard. JSF has introduced a new paradigm to web application development—building applications out of components. It allows developers to concentrate on application business logic rather than on little details of HTML and other plumbing that is common to all web applications.
Being a standard is very important for the community, and it helps vendors like Exadel create advanced visual tools. The component-based approach also gave rise to vendors building web components, which also benefits developers. Instead of spending two weeks on integrating a calendar feature into your application, you can now get a calendar component and concentrate on the business problem you're trying to solve.
KM: Some would argue that WebObjects, Tapestry, and ASP.NET introduced component-oriented web development first. Do you think JSF offers anything different than these frameworks?
MK: I wouldn't argue otherwise. I believe JSF builds on a lot of features from these frameworks such as component web development and Tapestry-like features with the Facelets extension. There are a few areas where JSF provides even more. For example, it's an open standard, which is very important. JSF also has a very large and growing community of support. Finally, JSF was created with extreme extensibility in mind. There are numerous projects and component libraries that extend JSF and enhance its functionality, including projects such as Facelets, Ajax4jsf, and jsf-extensions.
KM: What do you think of other frameworks such as Tapestry, Rife, Rails, Trails, Grails, and so on?
MK: These are good frameworks for some types of applications. Here is what's happening. Most of our customers are building enterprise web applications. They want to use a framework that is a standard, has very strong community and industry support, and has been tested and proven itself in real applications. That's where JSF comes in; it provides all of this.
KM: What do you think of Struts Action Framework 2.0, the successor to both Struts Action 1.x and WebWork?
MK: I think it's great for people who are still developing in Struts. It's good to see open source projects working together and creating better tools for developers.
KM: Can you explain products support for JSF at Exadel?
MK: We provide uniquely extensive support for JSF technology. This includes Exadel Studio Pro plug-in for Eclipse. It's an advanced enterprise-level development environment for building JSF-based applications. It provides advanced visual tools, advanced source editing, consistency checking, and unique customization features as well as Facelets support.
Then there is Ajax4JSF open source extension to JSF. Ajax4jsf is a rich component framework that has been created exclusively to bring rich user interface functionality to the JavaServer Faces world. Ajax4JSF is fully integrated with the JSF lifecycle and allows adding AJAX-capability to existing applications. In addition, component developers can create their own rich components with built-in AJAX support based on this open source framework. Ajax4jsf also provides a skinability feature. This feature allows the easy definition and management of different color schemes and other user interface characteristics through named skin parameters.
JSF is all about component-based development, so, in adding AJAX support, we followed the same paradigm. We have created a set of JSF AJAX components that will add AJAX to your application. This includes Exadel Visual Component Platform. It's a rich component library built on top of Ajax4jsf open source framework. It provides a number of ready-to-use JSF-AJAX components such as suggestionBox available right now and calendar coming up in next version. It provides powerful and unique components such as draggable and dropzone to allow developers to easily set up elements to drag and drop on a page. Exadel VCP comes with skinability enabled. It ships with over 14 pre-defined skins and allows developers to create new custom skins.
We also offer online and onsite JSF training. What's unique about our training is that we can completely customize it for customer requirements. If the customer wants to cover Facelets or MyFaces components, we can do it. If a customer wants to cover JSF with AJAX, Hibernate, and MySQL, we can also do that. With our Development Boost service, we help customers to jump-start their JSF development projects by providing in-person expertise on application architecture, design, and development.
KM: I think it's great that Exadel supports Facelets. How far does that support go? Is it as rich as your JSP support?
MK: The support for Facelets is very extensive in Exadel Studio. Exadel Studio was the first IDE to provide Facelets support and continues as the leader in Facelets support. The feature list is very long for this, so I will just mention the main points. Basically, you get all the rich support from the JSP editor in addition to more specific Facelets features and tools.
You get code assist for all Facelets tags as well as any custom tags along with code assist for the
jsfc attribute. You can add custom taglibs to the Exadel palette. Also, you have advanced JSF and JSP Expression Language (EL) code assist. In other words, you can get code assist in any place on a page, not just within JSF components. Exadel Studio supports drag and drop of Facelets components onto .xhtml pages. The visual page editor fully supports XHTML pages for design. In the Source view of the visual page editor, you can use OpenOn selection (hyperlink navigation) to select and click a reference to navigate to it in the IDE.
There are also some extra features that make our support for Facelets even more comprehensive. You can easily create JSF navigation rules for XHTML pages by dragging and dropping the XHTML pages onto the Diagram view. We always bundle the latest Facelets version, but users can always update to any new version by using our Custom Support feature. This is a very unique feature in Exadel Studio. Our users don't need to wait for us to update a particular library; they can customize Exadel Studio to create their own custom capabilities for a particular version of a particular technology. You can also create custom XHTML page templates as well as project templates for your Facelets environment.
KM: Does Exadel Studio support any third-party component libraries? How can developers add their own component libraries?
MK: Absolutely, Exadel Studio supports any third-party component library. That's what's so unique about Exadel Studio, the ability to totally customize your environment. Developers don't need to wait for us to add support for a new component library. Basically, all you have to do is drop the JAR file for the component library into your project. Exadel Studio has a special view that shows all TLD files in the project. Take the TLD file and drag and drop it onto the Exadel Studio palette. That's it. You can now insert components from this library into your pages. Of course, you get full code assist for the component library.
Additional advanced features in this area include the ability to define the design time look and feel as well as dynamic code assist (code assist based on JSF project data) for the custom component library.
KM: Let's talk about AJAX for a moment. What do you think makes JSF such a good fit for AJAX?
KM: There are several approaches to implementing AJAX with JSF. What approach does Ajax4jsf use?
MK: Ajax4jsf is fully integrated into the JSF lifecycle. While other frameworks only give you access to the managed bean facility, Ajax4jsf leverages the action and value change listeners and invokes server-side validators and converters during the AJAX request-response cycle. In addition, Ajax4jsf works with any custom JSF component library. There are no limitations that allow you to use it only with certain specific components.
KM: How does Ajax4jsf compare to other "add AJAX" solutions such as AjaxAnywhere or ICEfaces?
MK: Both are good frameworks but there are some fundamental advantages to using Ajax4jsf.
Regarding AjaxAnywhere, it's not a component-oriented framework; as its name implies, it's a general AJAX solution. In other words, it could work with any presentation technology, component based, non-component based, JSP, Struts, and JSF. Because it's a general solution, it doesn't provide natural integration with JSF. It's possible to use it with JSF, but it's not really providing any direct benefits when working with JSF. Basically, you would be working with component-based JSF and then the non-component-based AjaxAnywhere that you will then have to integrate with JSF—very complicated. You wouldn't be able to use the JSF page cycle and other JSF features easily. If you decide to use JSF, it helps a lot to build your pages fully out of JSF components. Mixing in other frameworks is generally not a good idea. With Ajax4jsf, you get pure JSF components that provide AJAX capabilities.
ICEfaces is a JSF component-based framework just like Ajax4jsf, but there is one major limitation. It's not easy to just use any JSF component library with ICEfaces. ICEfaces only works with components that have renderers provided by ICEfaces. You can use JSF standard components [and they have partial support for Apache MyFaces Tomahawk]. With Ajax4jsf you are free to use any JSF component library.
Another important difference is that Ajax4jsf is an open source framework. I believe being open source is very important the JSF/AJAX developers community. ICEfaces on the other hand doesn't have an open source version. With Ajax4jsf, you get full access to the source code. You can use the ajax4jsf project to create your own custom AJAX JSF components. ICEfaces does have a community edition, but it isn't open source.
If you look closely, Ajax4jsf actually provides a little bit from AjaxAnywhere and ICEfaces. AjaxAnywhere works with any technology but is not component-based framework. ICEfaces is a JSF component-based framework, but it doesn't allow to work easily with just any JSF component library. If you look at Ajax4jsf, it's a JSF component-based framework and works with any standard or custom JSF component library. There are really good examples of JSF and AJAX in action on java.net.
KM: Any thoughts on the AJAX approach presented by Ed Burns, Jacob Hookom, and Adam Winer (all JSF expert group members) at JavaOne? They're currently working on adding it to the jsf-extensions project, and are inviting the community to participate in extending it.
MK: It does provide a natural way to use AJAX with JSF by providing components that enable AJAX functionality. If you look at the Ajax4jsf project, both share the same view on how to use AJAX with JSF and thus complement each other very well. We are going to work on an integration solution for both.
KM: How do you think Exadel Studio compares to other Eclipse products, such as BEA Workshop Studio or Rational Application Developer?
MK: Both are good products, however, Exadel Studio provides much stronger JSF support. After all, our first JSF plug-in came out just one month after JSF 1.0 was released.
Exadel Studio is the only plug-in that supports Facelets and JSF 1.2. Exadel Studio provides advanced and unique visual and source editing, drag and drop, and open-on (hyperlink) functionality. Another unique area in Exadel Studio is its customization capability, allowing you to customize anything from page templates, to project templates, to JSF environments. Developers can create their own custom environments, which is a very powerful feature. You can't do this with BEA Workshop. Don't get me wrong, though. BEA Workshop is a great tool for Struts, but I believe that they are still behind in regards to JSF.
Another great advantage we have is that we have based the Exadel Studio plug-in on the Web Tools Project plug-in. This allows us to take advantage of WTP features while building advanced JSF tools and features on top of that. We always support the latest stable WTP version available, exactly what our customers want. On the other hand, IBM is based on a much older WTP version. IBM tries to be everything for everyone, while our value-add is JSF development and everything around it. That's what our customers want—powerful, lightweight JSF tool solutions.
But, if you look at pricing, BEA Workshop is almost five times more expensive and IBM is probably at least that expensive.
KM: Do you still see a strong demand for Struts support at Exadel?
MK: It's there, but not as strong as it was a year ago. The demand is a lot stronger for JSF support. A large percentage of the people that are downloading Exadel Studio now are using it to build JSF-based applications. Also, we are seeing a stronger demand for JSF training and services. We have a form on our website where people can request a web demo for Exadel Studio. Among these requests, 9 out of 10 are to see JSF tools and features in Exadel Studio. Based on our experience from the services side, virtually all developers are considering or are already using JSF for their new development projects. I believe it all boils down to just a few main reasons for why people are choosing JSF today. It's a standard. It's component based. It's now part of Java Enterprise 5. And, there is very strong community support that is still growing every day.