Andy Bosch - JavaServer Faces in the cloud

Post on 29-Nov-2014

1.155 views 5 download

description

 

Transcript of Andy Bosch - JavaServer Faces in the cloud

JavaServer Faces in the Cloud

Andy BoschIndependent consultant and trainer

Using Google App Engine for your JSF 2.x web application

Agenda

� Clouds and the Google App Engine

� A first HelloWorld with GAE

� Introducing JSF 2.0

� JSF 2.0 and GAE

� Component libraries and GAE

� Conclusion

Who am I?

� Name: Andy Bosch

� Trainer, coach, developer, …

� Specialized on JSF and portlets

� Expert Group member of JSR-301 and JSR-329

� Working with JSF since 2004

Agenda

� Clouds and the Google App Engine

� A first HelloWorld with GAE

� Introducing JSF 2.0

� JSF 2.0 and GAE

� Component libraries and GAE

� Conclusion

Everything is in the Cloud

Software

- SaaS - Platform

- PaaS -- PaaS -

Infrastructure

- IaaS -

What is GAE?

� Google App Engine

lets you run your web applications

on Google's infrastructure.

Why should I use it?

� App Engine applications are easy to build, easy to

maintain, and easy to scale as your traffic and data

storage needs to grow.

With App Engine, there are no servers to maintain:

You just upload your application, and it's ready to

serve your users.

More details, please

� AppServer which supports most of the common

technologies

� Automatic scaling and load balancing

� Transactional and highly scalable database model

� Integration into Google accounts through APIs

The environment

� In the background, Jetty is used

� To be more precise: 10s of thousands of Jettys

���� A servlet container, not an application server!

Full Java support?

� Almost, but there are some restrictions:

• Cannot write to the file system

• Cannot open socket connections

• Cannot start new threads• Cannot start new threads

• …

� The restrictions are build into the Java runtime

environment

� If there are security violations, runtime exceptions are

thrown

Tooling environment

� Eclipse with plug-ins

� SDK with web server application that emulates all of

the App Engine services

� Admin console

� Plenty of online documentations

Five steps to a hello world

1. Install SDK

2. Create GAE account

3. Create the application3. Create the application

4. Create project

5. Upload project

Agenda

� Clouds and the Google App Engine

� A first HelloWorld with GAE

� Introducing JSF 2.0

� JSF 2.0 and GAE

� Component libraries and GAE

� Conclusion

Introducing JSF 2.1

� XHtml instead of JSP

� Ajax Integration

� Resource Handling� Resource Handling

� Annotation Support

� View templating

� Composite Components

JSF 2.0 and GAE

� During the first months of JSF 2.0, there were several

issues causing some troubles

� Nowadays, both Mojarra and MyFaces can be used

with GAEwith GAE

� A couple of minimal things have to be considered

A simple JSF page

<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"

xmlns:f="http://java.sun.com/jsf/core”>

<h:head>

<title>JSF 2.0 Hello World</title><title>JSF 2.0 Hello World</title>

</h:head>

<h:body>

<h:form>

<h:outputText value=”Hi there” />

</h:form>

</h:body>

</html>

EL-bug

� Known bug in JSP support

� Google AppEngine Issue 1506 (marked as fixed)

� JSP 2.1 not fully supported� JSP 2.1 not fully supported

� Workaround with explicitly defined el factory

<context-param>

<param-name>com.sun.faces.expressionFactory</param-name>

<param-value>com.sun.el.ExpressionFactoryImpl</param-value>

</context-param>

Disable multi-threading

� GAE doesn't support multi-threaded applications

<context-param>

<param-name>

com.sun.faces.enableMultiThreadedStartup

</param-name> </param-name>

<param-value>false</param-value>

</context-param>

<context-param>

<param-name>com.sun.faces.enableThreading</param-name>

<param-value>false</param-value>

</context-param>

Enable sessions

<?xml version="1.0" encoding="utf-8"?>

<appengine-web-app

xmlns="http://appengine.google.com/ns/1.0">

<application></application><application></application>

<version>1</version>

<sessions-enabled>true</sessions-enabled>

...

</appengine-web-app>

Disable JNDI in Mojarra classes

� JNDI is not supported in GAE

� Patched version of Mojarra

I want to see it now !

� With those mentioned changes the HelloWorld app

should already be able to be deployed

Let‘s try out some more: JSF 2.x features

� Composite Components

� Resource Handling

� Systemevents

� Beanvalidation

� Viewparameter

� Ajax

Composite Components (1)

� DRY – Don‘t repeat yourself

<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"

xmlns:f="http://java.sun.com/jsf/core"

xmlns:cc="http://java.sun.com/jsf/composite/helloLib">

<h:head>

<title>CC Demo</title>

</h:head>

<h:body>

<h:form>

<cc:hello value=”Andy Bosch” />

</h:form>

</h:body>

</html>

Composite Components (2)

� hello.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://java.sun.com/jsf/html"

xmlns:f="http://java.sun.com/jsf/core"

xmlns:composite="http://java.sun.com/jsf/composite">

<body>

<composite:interface>

<composite:attribute name="value" required="true" />

</composite:interface>

<composite:implementation>

<h:outputText

value=”Hello #{cc.attrs.value}” />

</composite:implementation>

</body>

</html>

Using Ajax

� “Parrot“ example

� When typing a key, the output should be repeated

<h:panelGrid columns="2">

<h:outputText value=„Your name: " />

<h:inputText value="#{personBean.lastname}">

<f:ajax render="@form" />

</h:inputText>

<h:outputText value=„Again your name: " />

<h:outputText value="#{personBean.lastname}" />

</h:panelGrid>

Component libraries

� JSF has a powerful ecosystem of additional component

libraries

� Not all of them can be used in combination with the

GAEGAE

� RichFaces and ICEfaces did have some minor

problems, but all entries in Jira are “fixed“ now.

� PrimeFaces is working !

Links and Resources

� http://bit.ly/8U6Ebn

JSF 2.0 and GAE

� http://in.relation.to/Bloggers/WeldJSF20AndGoogleApp

EngineNavigatingTheMinefieldPart1EngineNavigatingTheMinefieldPart1

� http://myfaces.apache.org/core20/googleappenginesup

port.html

� http://primefaces-rocks.appspot.com/ui/home.jsf

Q&A? More trainings:www.jsf-academy.com

Contact:andy.bosch@jsf-academy.com

Twitter:@andyboschTwitter:@andybosch

Evaluation Forms:

JavaServer Faces in the Cloud

Presented by: Andy Bosch