2. ICEfaces is…
ICEfaces is an Ajax framework that allows developers to easily
create rich Internet applications (RIA) in pure Java.
• Open source
• Standards-based
• Extends JavaServer Faces
• Develop rich Web Applications in pure Java,
not JavaScript
• Integrated with GlassFish and Friends
– Provides NetBeans IDE Plugin
• Endorsed migration for Woodstock users
– Supports Ajax Push applications via Grizzly
– Leverages enterprise capabilities of GlassFish
• Security, Scalability: Clustering, Load Balancing and Failover
– Integrates with 3rd Party frameworks and middleware
• WebSpace, WebStack
Easy Ajax for Java developers
www.icefaces.org
17. What is Ajax Push For?
• Distance learning
• Collaborative authoring
• Auctions
• Shared WebDAV filesystem
• Blogging and reader comments
• SIP-coordinated mobile applications
• Hybrid chat/email/discussion forums
• Customer assistance on sales/support pages
• Multi-step business process made collaborative
• Shared trip planner or restaurant selector with maps
• Shared calendar, “to do” list, project plan
• Games
• Enterprise shared record locking and negotiation
www.icefaces.org
18. Ajax Programming, Ideally.
PageBean.java Page.xhtml
<f:view
public class PageBean {
xmlns:f=“http://java.sun.com/jsf/core”
String message;
xmlns:h=quot;http://java.sun.com/jsf/html“ >
public String getMessage() {
<html>
return message;
<body>
}
<h:form>
<h:inputText
public void
value=“#{pageBean.message}” />
setMessage(String message) {
</h:form>
this.message = message; </body>
} </html>
} </f:view>
Presentation Model Declarative User Interface
www.icefaces.org
19. Ajax Push Programming
To keep track of groups of users:
SessionRenderer.addCurrentSession(“GlassFishTV”);
Asynchronously and elsewhere in the application ...
presentation.setSlide(7);
SessionRenderer.render(“GlassFishTV”);
www.icefaces.org
20. Ajax Push Techniques
• Poll
– send a request to the server
at some interval
– response is “empty” if there is
no update
• Http Streaming
– send a request and wait for
response
– write “endless” response in
chunks
• Long Poll
– send a request to the server
and wait for response
– indistinguishable from “slow”
server
www.icefaces.org
21. Long Polling over HTTP
GET /auctionMonitor/block/receive-updates?icefacesID=1209765435 HTTP/1.1
Accept: */*
Cookie: JSESSIONID=75CF2BF3E03F0F9C6D2E8EFE1A6884F4
Connection: keep-alive
Host: vorlon.ice:18080
www.icefaces.org
22. Long Polling over HTTP
GET /auctionMonitor/block/receive-updates?icefacesID=1209765435 HTTP/1.1
Accept: */*
Cookie: JSESSIONID=75CF2BF3E03F0F9C6D2E8EFE1A6884F4
Connection: keep-alive
Host: vorlon.ice:18080
Chat message “Howdy”
www.icefaces.org
23. Long Polling over HTTP
GET /auctionMonitor/block/receive-updates?icefacesID=1209765435 HTTP/1.1
Accept: */*
Cookie: JSESSIONID=75CF2BF3E03F0F9C6D2E8EFE1A6884F4
Connection: keep-alive
Host: vorlon.ice:18080
Chat message “Howdy”
HTTP/1.1 200 OK
Content-Type: text/xml;charset=UTF-8
Content-Length: 180
Date: Tue, 10 Mar 2009 22:49:49 GMT
Server: Sun Java System Application Server 9.1_01
<updates>
<update address=quot;_id0:_id5:0:chatTextquot;>
<span id=quot;_id0:_id5:0:chatTextquot;>Howdy</span>
</update>
</updates>
www.icefaces.org
25. UserBean.java
public class UserBean {
public String getSlideURL() {
Set by presentation moderator
return slideURL;
slide controls
}
public String getChatLog() {
return chatLog;
}
public String getChatInput() {
return chatInput;
}
public void setChatInput(String text) {
chatInput = text;
append(chatLog, text);
}
}
www.icefaces.org
26. UserBean.java (Ajax Push)
import com.icesoft.faces.async.render.SessionRenderer;
public class UserBean {
String presentationName;
public UserBean() {
presentationName = LoginBean.getPresentationName();
SessionRenderer.addCurrentSession(presentationName);
}
public void submit() {
SessionRenderer.render(presentationName);
}
}
www.icefaces.org
27. Ajax Components with ICEfaces
• Automatic Ajax updates
• No JavaScript Development
• Easy Ajax Component Suite
– No JavaScript component wiring
– No manually defined update regions
• Ajax transport handled by ICEfaces
• Woodstock conversion: utilities and compatible components
• ---
– Asynchronous application-driven browser updates
– All 50+ components are Ajax Push aware
www.icefaces.org
28. A Thread for Every Client?
• Blocking requests with Servlet 2.5 consumes threads
• GlassFish/Grizzly, Tomcat 6, Jetty, and Servlet 3.0
provide asynchronous request processing
• Many connections handled with a small thread pool
www.icefaces.org
29. GlassFish
Suspend with Grizzly.
CometContext context =
CometEngine.getEngine().register(contextPath);
context.setExpirationDelay(20 * 1000);
SuspendableHandler handler = new SuspendableHandler();
handler.attach(response);
cometContext.addCometHandler(handler);
class SuspendableHandler implements CometHandler {
public void onEvent(CometEvent event) {
response.getWriter().println(event.attachment());
cometContext.resumeCometHandler(this);
}
Asynchronously and elsewhere in the application ...
presentation.setSlide(7);
cometContext.notify(message);
www.icefaces.org
32. Custom Components (JSF 1.2)
• Implement MyComponent.java extending UIInput
• Implement MyComponentRenderer.java
• Implement MyComponentTag.java
• Add component and renderer to faces-config.xml
• Add MyComponentTag to TLD
www.icefaces.org
33. Facelets in JSF 2
• Facelets now part of JSF standard
• Also know as the Page Declaration Language (PDL)
• First non-JSP PDL designed for JSF
• Some differences from JSP:
– Pages compiled to abstract structure
– Builds JSF component view when executed
– Don't need TLD for tag attributes
– Page templating
• Opens the door for easier component development
www.icefaces.org
34. Custom Components in JSF 2
• Components built via markup templates
• Also known as composite components
• Composite Component: any Facelet markup file that
resides in a resource library
• Custom components can also be developed in Java as
per JSF 1.2
www.icefaces.org
40. Ajax in JSF 2
• Standard JavaScript API
– jsf.ajax.request, jsf.ajax.response
– jsf.ajax.addOnError, jsf.ajax.addOnEvent
– jsf.getProjectStage, jsf.getViewState
• Standard Response Format
– XML based
– “instruction set” for:
– updating DOM, attribute changes, script execution
– inserting into DOM, deleting DOM nodes, extensions
• Standard Subtree Execution and Rendering
– frameworks may also plug in their own traversal strategy
• Declarative Ajax (f:ajax)
• Net result is Ajax component interoperability
www.icefaces.org
41. Enhancements in JSF 2
• System Events
– Represent specific points in time for a JSF application
– For example, listen for:
– when a component was added to parent
– when a component is about to be rendered
– Listeners implement javax.faces.event.SystemEventListener
• “view” scope
– allows attributes to be associated with a view
– attributes persist until a new view is navigated to
– can be accessed via EL (like request or session)
• Annotations
– An alternative to XML configuration
– @FacesComponent, @FacesConverter, @ManagedBean
– @RequestScoped, @SessionScoped, @ApplicationScoped
www.icefaces.org
42. Enhancements in JSF 2
• Resources
– Facility for serving resources (CSS, JavaScript, images, etc..)
– Can be packaged under web application
– Under “resources” directory
– Or into classpath under META-INF/resources
– Typically reside in libraries
– Resources can be versioned
• Exceptions
– Exception handling facility allows queuing of exceptions
– Also leverages System Event facility
– publish ExceptionEvent(s); subscribe to ExceptionEvent(s)
www.icefaces.org
43. Summary
The Asynchronous Web Revolution is Now
• Ajax Push will revolutionize human interaction
• Ajax Push is the key to enterprise collaboration for the
Web
• JSF 2.0 is the language for developing web applications
• Ajax Push can scale on GlassFish with Asynchronous
Request Processing
• ICEfaces provides the high-level capabilities for
enterprise collaboration features in your application
www.icefaces.org
www.icefaces.org
ICESOFT TECHNOLOGIES INC.
44. Thank You
Contact Us:
Toll Free: +1 877 263 3822 USA
International: +1 403 663 3322
product.support@icesoft.com
www.icefaces.org
44