ICEfaces and JSF 2.0 on GlassFish

Preview:

DESCRIPTION

In depth presentation on ICEfaces/JSF on GlassFish. Also includes how to JSF 2.0 will apply to ICEfaces

Citation preview

www.icefaces.org

www.icefaces.org

ICEfaces is…

Easy Ajax for Java developers

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

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

Deryk

Server

www.icefaces.org

Ajax Push Illustrated

Ted

Deryk

Server

AjaxRequest

www.icefaces.org

Server

Ajax Push Illustrated

Ted

Deryk

JSF Lifecycle +DOM diff

www.icefaces.org

Ajax Push Illustrated

AjaxResponse

Deryk

Server

AjaxPush

Ted

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.

public class PageBean { String message;

public String getMessage() { return message; }

public void setMessage(String message) { this.message = message; }

}

<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

PageBean.java Page.xhtml

www.icefaces.org

Ajax Push Programming

presentation.setSlide(7);SessionRenderer.render(“GlassFishTV”);

Asynchronously and elsewhere in the application ...

To keep track of groups of users:

SessionRenderer.addCurrentSession(“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.1Accept: */*Cookie: JSESSIONID=75CF2BF3E03F0F9C6D2E8EFE1A6884F4Connection: keep-aliveHost: vorlon.ice:18080

www.icefaces.org

Long Polling over HTTP

GET /auctionMonitor/block/receive-updates?icefacesID=1209765435 HTTP/1.1Accept: */*Cookie: JSESSIONID=75CF2BF3E03F0F9C6D2E8EFE1A6884F4Connection: keep-aliveHost: vorlon.ice:18080

Chat message “Howdy”

www.icefaces.org

Long Polling over HTTP

GET /auctionMonitor/block/receive-updates?icefacesID=1209765435 HTTP/1.1Accept: */*Cookie: JSESSIONID=75CF2BF3E03F0F9C6D2E8EFE1A6884F4Connection: keep-aliveHost: vorlon.ice:18080

Chat message “Howdy”

HTTP/1.1 200 OKContent-Type: text/xml;charset=UTF-8Content-Length: 180Date: Tue, 10 Mar 2009 22:49:49 GMTServer: 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.javapublic 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); }}

Set by presentation moderator slide controls

www.icefaces.org

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

• 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

Ajax Components with ICEfaces

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

GlassFishSuspend 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);}

presentation.setSlide(7);cometContext.notify(message);

Asynchronously and elsewhere in the application ...

www.icefaces.org

Multiple Applications and Browser Connection Limits

ICEfacesApplication

Ajax PushServer

Glassfish

Asyn

chro

nous

Con

nect

ions

ICEfacesApplicationJMS

Grizzly

http:// host / ajaxpush /

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

Restore View

Process Validations

Update Model Values

Ajax Request

execute:4,5

Execute Portion

Partial View Processing

Apply Request Values

InvokeApplication

RenderResponse1

2 3

544 5

www.icefaces.org

Ajax in JSF 2

Restore View

Process Validations

Update Model Values

Ajax Request

render:4,5

Partial View Rendering

Apply Request Values

InvokeApplication

RenderResponse

Render Portion

1

2 3

544 5

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.orgICESOFT TECHNOLOGIES INC. www.icefaces.org

SummaryThe 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.org44

Thank You

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

Recommended