Transcript Document
Java Server Faces
St. Louis JavaSIG June 8, 2006
Jay Meyer,
Harpoon Technologies
About Me
Master CS from Washington Univ. (wustl.edu)
Software developer for 14 years (1992)
Java Web development since 1999
Certified JBoss Application Developer
Recent projects use Struts, Spring, Hibernate,
JBoss, Oracle
Hibernate consulting thru HarpoonTech, a
JBoss partner
Summary
Brief History of JSF
Motivations for JSF, the Java Landscape
JSF details
Demo apps in MyFaces & Seam
What is Java Server Faces?
JSF is a spec which defines a component-based MVC
framework
JSF 1.2 is included in the larger JEE5 spec
The spec was developed by involving many people
from orgs like Sun, Apache, IBM, Oracle
Not tied to a Web framework, nor a thick-client GUI –
theoretically could be applied to either
Implementations, frameworks:
Sun RI vs. Apache MyFaces
JBoss Seam vs. Apache Struts 2 Shale
IBM, Oracle have proprietary solutions
The Problem with Web apps
HTML? HTML? Java people like Objects, HTML is not Objects
Web programming is more difficult than GUI programming
Java programming is hard – and J2EE is even more difficult:
Servlets? JSP? EJBs!?!
Microsoft has VisualStudio which turns web programming into
drag-and-drop, that looks easy! 10 minute demo!
Answer: a Framework!
(yet another framework, of course)
Struts – reduced lines of code, made apps pretty
complex, created a niche of skilled Struts
mercenaries
WebWork – fixed some of the Struts hassle
SpringMVC – brought powerful AOP concepts
to web dev
Tapestry – JSP? dump it, XML rules!
MVC
WARS
any Web apps in 2006 means seeing a mix of Struts,
Tapestry, Spring MVC, and Webwork (consultant:
which one pays the best?)
the battle rages on, who will win? how can you tell who
won? Trust Craig? Trust Rod? How can a OSS project
define victory?
Converting legacy apps: Struts is dead! long live Struts 2
Action and Struts 2 Shale!!!
How can I possibly pick one for a new project, when
the technology is under attack?
JSF to the rescue
Make Committees, Not War!
get the big players together to solve MVC problems in
a standard way, argue, compromise, repeat... publish
final Spec
Use components, not actions, more like Swing, less like
Struts
Set a standard so we can build derivative products like
IDEs with drag-n-drop ease, without worrying about
change
extensible standard to allow growth (plugins)
and the main objective...
errr... What’s a component?
the JSF spec defines a standard set of
components and relationships
the View layer (e.g. JSP) and the Java code on
the server use these components to interact and
pass data
JSF tree is the current set of components in a
Java object graph
Struts, Webwork, SpringMVC use actions, not
components
typical JSF component tree
View
Form
input
input
combo
command
How does Apache MyFaces work?
jar file for deployment on Tomcat or any J2EE
container – myfaces-all.jar
Controller servlet, XML config file, JSP, a pile
of base classes, and custom tags out the wazoo
(of course! just like all the other frameworks!)
MyFaces architecture
J2EE server
Faces
Servlet
my App
base classes
faces-config.xml
MyFaces Demo
I used: Eclipse, Java5, JBoss 4 (JBossIDE)
Register a user
the Bean: Registration
the view : HTML and JSP
the Action Controller
the web.xml
faces-config.xml
navigation
What is Seam?
Seam is a new product from JBoss, (OSS, free as
in beer and speech)
Founded by Gavin King, Hibernate creator
uses Java5 and EJB3
goal: use the exact same objects for persistence
and rendering the view layer: abolish glue code
and DTO objects
combines MyFaces, EJB3
Seam Demo
the Bean: User EJB3
the view : HTML and JSP
the Action: Register SSB
Seam in the faces-config.xml?
Next for Seam?
Reverse Engineering – make a whole app from a
set of database tables
Facelets
Totally replace JSPs, uses XHTML instead
Integrates tightly with JSF
faster and leaner than JSPs – same idea as
Tapestry
avoids serious JSP / JSF integration issues
Seam architecture
JSP
Facelets
Sun JSF RI
MyFaces
Seam Framework
EJB3
Hibernate3
SQL DB
Tomahawk
Apache’s extended JSF components, ships with
MyFaces
Calendar
Tree
advanced inputText
the Future
continued Component development, similar to
taglib dev with Struts
more tool dev – Eclipse plugins, GUI designers
Facelets general acceptance instead of JSP
Seam innovation from Gavin King, JBoss also
JSR 299 WebBeans just started
Shale? Will Craig McClanahan work on Shale or
just Struts 2 Action (aka Webwork)
Glossary
JSF – JavaServer Faces
JEE5 – the newest Java App Server spec, includes EJB3, JSF etc.
MyFaces – Apache’s JSF impl, completely replaces Sun’s ref impl for JSF
Tomahawk – Apache’s set of components to extend JSF, comes with MyFaces
Facelets – replacement for JSP, interprets XML instead of JSP files to
produce web pages, integrated well with JSF
Seam – JBoss’ framework that works with JSF to provide the glue between
JSF and EJB3 to reduce lines of code, includes MyFaces, Facelets (Gavin
King’s project)
Shale – Apache Struts (Craig McClanahan) framework to provide a better API
for JSF, competes with Seam, needs JDK5, not EJB3
Resources
JavaServer Faces by Hans Bergsten, OReilly
http://java.sun.com/javaee/javaserverfaces/
http://www.coreservlets.com/JSF-Tutorial/
http://www.jboss.com/products/seam
http://docs.jboss.com/seam/reference/en/html/tutorial.html
http://struts.apache.org/struts-shale/index.html
http://www.jsfcentral.com/articles/facelets_1.html
Questions?
contact: Jay Meyer [email protected]
discuss: Ideal architecture?
Facelets, MyFaces, Seam, EJB3, JBossAS, MySQL, Ubuntu
Linux?
discuss: worst of breed?
JSP, Struts 1.x, Sun JSF RI, Websphere, Toplink, DB/2,
Windows