icefaces-glassfish-jsf-090311173017-phpapp01 by samsoftdollar

VIEWS: 106 PAGES: 44

									www.icefaces.org

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

Agenda • Ajax Push Overview • Application Programming Basics • On the Wire • Code Walkthrough • Asynchronous Request Processing • Security • Custom Components (JSF 1.2 and JSF 2.0) • JSF 2.0 Ajax • JSF 2.0 Notable Enhancements • Summary

www.icefaces.org

Multi-user AuctionMonitor

www.icefaces.org

Multi-user AuctionMonitor

www.icefaces.org

Multi-user AuctionMonitor

www.icefaces.org

Multi-user Locking

Ted selects record for editing

www.icefaces.org

Multi-user Locking

Joe selects same record, requests lock

www.icefaces.org

Multi-user Locking

Ted responds, and accepts or denies

www.icefaces.org

Push in Portlets

Portal page with three portlets

www.icefaces.org

Push in Portlets

Joe searches for a city

www.icefaces.org

Push in Portlets

All three portlets are updated

www.icefaces.org

Ajax Push Illustrated

Ted

Server

Deryk www.icefaces.org

Ajax Push Illustrated

Ajax Request
Ted

Server

Deryk www.icefaces.org

Ajax Push Illustrated

Ted

JSF Lifecycle + DOM diff

Server

Deryk www.icefaces.org

Ajax Push Illustrated

Ajax Response
Ted

Server

Ajax Push
Deryk www.icefaces.org

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

Ajax Programming, Ideally. PageBean.java
public class PageBean { String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }

Page.xhtml
<f:view xmlns:f=“http://java.sun.com/jsf/core” xmlns:h="http://java.sun.com/jsf/html“ > <html> <body> <h:form> <h:inputText value=“#{pageBean.message}” /> </h:form> </body> </html> </f:view>

Presentation Model

Declarative User Interface

www.icefaces.org

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

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

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

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

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="_id0:_id5:0:chatText"> <span id="_id0:_id5:0:chatText">Howdy</span> </update> </updates>

www.icefaces.org

webmc.jspx
<f:view xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <html> <head> <title>WebMC</title> </head> <body> <h3>WebMC</h3> <h:form> <h:panelGrid columns="1"> <h:outputText value="Presentation"/> <h:graphicImage value="#{user.slideURL}"/> </h:panelGrid> <h:panelGrid columns="1" > <h:outputText value="Chat"/> <h:outputText value="#{user.chatLog}"/> <h:inputText value="#{user.chatInput}"/> <h:commandButton actionListener="#{user.submit}"/> </h:panelGrid>
www.icefaces.org

UserBean.java
public class UserBean { public String getSlideURL() { return slideURL; } public String getChatLog() { return chatLog; } public String getChatInput() { return chatInput; } public void setChatInput(String text) { chatInput = text; append(chatLog, text); } }
www.icefaces.org

Set by presentation moderator slide controls

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

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

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

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

Multiple Applications and Browser Connection Limits http:// host / ajaxpush / Glassfish
Asynchronous Connections
Grizzly

Ajax Push Server

ICEfaces Application

JMS

ICEfaces Application

www.icefaces.org

Security for Ajax Push

• Build security in layers
– Java – JavaServer Faces – SSL

• Script injection
– JavaScript – SQL

• Cross-site request forgery • Cross-site scripting
www.icefaces.org

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

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

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

Custom Components in JSF 2 (Use)

www.icefaces.org

Custom Components in JSF 2 (Definition)

www.icefaces.org

Ajax in JSF 2.0 • Resource Delivery Mechanism • Partial View Processing • Partial View Rendering • Ajax Client/Server • Ajax Enabled Components
In JSF 2.0 Spec In Component Library

www.icefaces.org

Ajax in JSF 2
Partial View Processing
Ajax Request execute:4,5
Restore View Apply Request Values Process Validations

1
2 4 3 5

Render Response

Invoke Application

Update Model Values

Execute Portion
www.icefaces.org

Ajax in JSF 2
Partial View Rendering
Ajax Request render:4,5
Restore View Apply Request Values Process Validations

1
2 4 3 5

Render Response

Invoke Application

Update Model Values

Render Portion
www.icefaces.org

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

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

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

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
ICESOFT TECHNOLOGIES INC.

www.icefaces.org www.icefaces.org

Thank You

Contact Us: Toll Free: +1 877 263 3822 USA International: +1 403 663 3322 product.support@icesoft.com

www.icefaces.org

44


								
To top