JSF 2.0
The Java EE 6 standard




                         arkadi.shishlov@gmail.com
Who?

                     • JSF skeptic
                     • JSF want to be
Try JSF 2.x
                     • IS developer
later this
week...
Why?

• Well-known                    - EE6?

• Java EE 6 family technology
                                - Yes
                                - Go for it!


• Acceptance
• Productivity
• Knowledge investment
Technology

• EE stack(s) compatibility
• Correctness, best-practices
• Web 2.0
• Java EE 5 compatible servlet based runtime
Technology

• Component architecture
• Server-side
• IS oriented
• Develop in Java
JSF 1.x upgrade
                 finally!
•   No XML                 •   Bean validation

•   Convention over        •   System Events
    Configuration
                           •   Facelets
•   @Annotation driven
                           •   HTTP GET support
•   Standardized AJAX
                           •   Verbatim HTML
•   Simplified Composites
                           •   Redirect to view
•   New bean scopes
Component based
•   Widgets: buttons, tables,
    etc.

•   Component tree

•   API

•   HTML supplemented
    with JavaScript, CSS,
    resources
Server side
• Generates HTML or DOM update
• Full Java EE runtime
Page oriented
•   One .xhtml - one
    interface page - one
    component tree serving
    the request

•   Single page interface
    possible

•   Defines View
управляемый компонент

          Managed beans
•   Components mapped to
    managed beans - backing
    bean

•   Scoped (сфера
    действия)

•   Supports model

•   Implements controller
    and action handlers
Request lifecycle
Expression Language
•   ${bean.field.next} – Bean.getField() immediate R-value

•   #{bean.field.next.whatever.more} deferred R- and L-value,
    function

•   #{nested.objects.via.get.set.hashes.arrays[123].too}

•   ClassName → #{className.fieldWithAccessor}

•   arithmetics, conditionals
AJAX

• Partial submit
• Partial sub-tree traversal
• DOM updates
Integration

• Context Dependency Injection
• Weld and Spring
• EJB
• Seam v3 Framework (alpha/beta)
•   Converters            •   Portlet bridge

•   Validators            •   Error handling

•   Events                •   Security

•   Phase Listeners       •   Custom components

•   Behaviors             •   Composites

•   HTML/JavaScript/CSS   •   Human behavior
    integration

•   Resources

•   I18N

•   HTTP GET
Core


• Sun Mojarra - JSF 2.0 Reference
  Implementation (RI)
• Apache MyFaces
Products
•   PrimeFaces         •   Apache Trinidad

•   JBoss RichFaces    •   Apache Tomahawk

•   ICEFaces           •   Oracle Fusion
                           Middleware
•   OpenFaces


                       •   PrettyFaces

                       •   PrettyTime
JSF vs GWT
apples to oranges

                    server vs client
                    DTO
                    resources
                    xml against
                    layout code
Issues
•   Runtime bugs

•   MS IE

•   Render phase errors

•   (non-)Serializable beans

•   Which CDI?

•   Session loss
Tooling

• NetBeans 6.9.1, Tomcat, GlassFish
• Instant smart redeploy
• Continuos integration with NetBeans ANT
  scripts
1. Java EE 6 Tutorial
   http://download.oracle.com/javaee/6/tutorial/doc/bnadp.html

2. http://javaserverfaces.dev.java.net/

3. http://www.laliluna.de/articles/jsf-2-evaluation-test.html

4. http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/

5. http://www.coreservlets.com/JSF-Tutorial/jsf2/

6. http://jsftutorials.net/

7. http://jsfcentral.com/

8. http://www.ibm.com/developerworks/java/library/j-jsf2fu1/

9. http://weblogs.java.net/blog/cayhorstmann/archive/2009/12/23/
   javaxfacesbeanmanagedbean-dead-arrival

10. http://dmakariev.blogspot.com/ (deltaset.org Maven archetype, GAE deploy)

11. http://docs.jboss.org/weld/reference/1.0.0/en-US/html_single
Demo
Q&A

LatJUG. JSF2.0 - The JavaEE6 Standard

  • 1.
    JSF 2.0 The JavaEE 6 standard arkadi.shishlov@gmail.com
  • 2.
    Who? • JSF skeptic • JSF want to be Try JSF 2.x • IS developer later this week...
  • 3.
    Why? • Well-known - EE6? • Java EE 6 family technology - Yes - Go for it! • Acceptance • Productivity • Knowledge investment
  • 4.
    Technology • EE stack(s)compatibility • Correctness, best-practices • Web 2.0 • Java EE 5 compatible servlet based runtime
  • 5.
    Technology • Component architecture •Server-side • IS oriented • Develop in Java
  • 6.
    JSF 1.x upgrade finally! • No XML • Bean validation • Convention over • System Events Configuration • Facelets • @Annotation driven • HTTP GET support • Standardized AJAX • Verbatim HTML • Simplified Composites • Redirect to view • New bean scopes
  • 7.
    Component based • Widgets: buttons, tables, etc. • Component tree • API • HTML supplemented with JavaScript, CSS, resources
  • 8.
    Server side • GeneratesHTML or DOM update • Full Java EE runtime
  • 9.
    Page oriented • One .xhtml - one interface page - one component tree serving the request • Single page interface possible • Defines View
  • 10.
    управляемый компонент Managed beans • Components mapped to managed beans - backing bean • Scoped (сфера действия) • Supports model • Implements controller and action handlers
  • 11.
  • 12.
    Expression Language • ${bean.field.next} – Bean.getField() immediate R-value • #{bean.field.next.whatever.more} deferred R- and L-value, function • #{nested.objects.via.get.set.hashes.arrays[123].too} • ClassName → #{className.fieldWithAccessor} • arithmetics, conditionals
  • 13.
    AJAX • Partial submit •Partial sub-tree traversal • DOM updates
  • 14.
    Integration • Context DependencyInjection • Weld and Spring • EJB • Seam v3 Framework (alpha/beta)
  • 15.
    Converters • Portlet bridge • Validators • Error handling • Events • Security • Phase Listeners • Custom components • Behaviors • Composites • HTML/JavaScript/CSS • Human behavior integration • Resources • I18N • HTTP GET
  • 16.
    Core • Sun Mojarra- JSF 2.0 Reference Implementation (RI) • Apache MyFaces
  • 17.
    Products • PrimeFaces • Apache Trinidad • JBoss RichFaces • Apache Tomahawk • ICEFaces • Oracle Fusion Middleware • OpenFaces • PrettyFaces • PrettyTime
  • 18.
    JSF vs GWT applesto oranges server vs client DTO resources xml against layout code
  • 19.
    Issues • Runtime bugs • MS IE • Render phase errors • (non-)Serializable beans • Which CDI? • Session loss
  • 20.
    Tooling • NetBeans 6.9.1,Tomcat, GlassFish • Instant smart redeploy • Continuos integration with NetBeans ANT scripts
  • 21.
    1. Java EE6 Tutorial http://download.oracle.com/javaee/6/tutorial/doc/bnadp.html 2. http://javaserverfaces.dev.java.net/ 3. http://www.laliluna.de/articles/jsf-2-evaluation-test.html 4. http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/ 5. http://www.coreservlets.com/JSF-Tutorial/jsf2/ 6. http://jsftutorials.net/ 7. http://jsfcentral.com/ 8. http://www.ibm.com/developerworks/java/library/j-jsf2fu1/ 9. http://weblogs.java.net/blog/cayhorstmann/archive/2009/12/23/ javaxfacesbeanmanagedbean-dead-arrival 10. http://dmakariev.blogspot.com/ (deltaset.org Maven archetype, GAE deploy) 11. http://docs.jboss.org/weld/reference/1.0.0/en-US/html_single
  • 22.
  • 23.

Editor's Notes

  • #2 у нас есть 50 минут\nкратко расскажу о JSF v2\nкратко, потому что тема очень обширная\n
  • #3 я пришел сюда не только себя показать и на других посмотреть но и поделится технологическим открытием которое я сделал для себя\nи донести до вас некоторый энтузиазм с этим связанный \nнадеюсь что после презентации вы запишите в перерыве в блокнот: надо попробовать\nитак, для кого эта презентация:\n1. скептик обжегшийся на 1.x или считающий, что технология слишком сложна\nда, сравнительно сложна, но и успешно решает поставленные перед ней задачи\n2. подражатель желающий начать использовать, но по какой-то причине стоящий в стороне: время, ...\n3. разрабочик бизнес ИС\n\n
  • #4 распространненый и используемый фреймворк\nсемейство ЕЕ6\nкорпоративный стандарт и приемственность - разговор с it менеджером/decision maker-ом\nпродуктивность в создании бизнес приложений, в чем-то субьективное но в сравнении многии со мной согласяться\nзащищеность вложений времени и экспертизы\n
  • #5 совместимость с ЕЕ стандартом и Спринг\nкорректность, в качестве уже решенных проблем (например cross-site scripting ) и применяемой идеологии построения приложения\nподдерживает АЯКС, Пуш и т.д.\nможет работать в Servlet 2.5 контейнере\n
  • #6 компонентая архитектура - виджеты и т.д., например в 2.0 - композиты, fusion middleware - taskflow\nсерверный - в противоположность ГВТ - клиентский, рассмотрим позже\nбольше подходит для информационных бизнес систем\n
  • #7 -5min\nикс-эм-эл упразднен для основных и наиболее часто встречаемых задач: навигация и определение бинов, остается как сетап *параметров* фреймворка, но можно продолжать использовать\nконфигурация по умолчанию, не-меджик, по типу РоР\nпостроен на модных аннотациях\nвзаимодействие с АЯКС-ом определено и оптимизировано, исключает построение *на костылях* и фатальную несовместимость библиотек компонентов\nупрощено создание композитных компонентов до одного xhtml-а\nновые сферы действия бинов: view, flash, custom; но за рамками JSR-314 остались conversation (seam), window (icefaces), process (fusion)\nопционально может использовать bean validation framework (hibernate validator) для проверки модели, но есть грабли с поисковыми формами\nдополнение к листенерем фаз запроса появились системные события жизненого цикла приложения и события конкретных виджетов/компонентов которые также всплывают до уровня апликации <f:event>\nfacelets как движок темплейтов\nобработка GET запросов с отображением параметров на модель и создание букмарков\n
  • #8 -8min\nкомпоненты по типу Свинга, композиты\nпохоже на иерархию ХТМЛ но это не ЖСП, а живое дерево компонентов обрабатывающее входящий запрос и генерирующее ХТМЛ\nкомпонент реализует АПИ\n\n
  • #9 как уже сказал, генерируем презентацию на сервере\nдоступны все возможности Java и серверного окружения\nнет проблем с DTO, например\n
  • #10 презентационный уровень начинается с xhtml файла с описанием дерева компонентов\nотображает модель, как именно - через EL, который рассмотрим позже\nмодель - это граф java pojo обьектов/managed бинов\nуправляемый компонент реагирует через action listener-ы и может менять модель (action listener) и/или вызвать навигацию (action)\n\n
  • #11 отступление: почему на английском - терминология к которой мы привыкли\nно чтобы не ломать язык я сделал перевод\nвообще, есть статистически достоверно зафиксированное исследование, что люди плохо воспринимают если читать им дословно со слайдов\nу нас преймущество - разные языки\nитак, визуальные компоненты отображаются на управляемые компоненты и модель которую они содержат (включают)\nсферы: application, session, view, request, flash, custom (conversation, window, process)\nуправляемый компонент реагирует через action listener-ы и может менять модель (action listener) и/или вызвать навигацию (action)\n\n
  • #12 \n
  • #13 связку между визульной частью и упрявляемыми обьектами осуществляет expression language UEL\nсуществут за рамками JSF, в JSP\n\n
  • #14 AJAX реализован как то, что только часть значений идет на сервер асинхронно и обрабатывается частью дерева компонентов\nс сервера приходят измениния визуального состояния под-деревьев компонентов\nэти два дерева могут совпадать, а могут и нет\nмогут быть больше 1 под-дерева, обычно это несколько компонентов\nкнопка+поля->список\nтребутся явное указание что поменяеться для скорости, чтобы не опрашивать всю модель\nисключение - icefaces\n
  • #15 в основе управляемых обьектов лежит CDI, взаимодействует с EE6 CDI (Weld)\nвзаимодействует с Spring-овым CDI так и его эмуляцией для не-ЕЕ серверов\nможно использовать EJB, в том числе как backing bean @Named\nвкусности припасены в Seam v3 - conversation scope\n
  • #16 \n
  • #17 -23min\n
  • #18 \n
  • #19 -26min\nделаю проект на ГВТ\n1:1\n\n
  • #20 JSR 314 - JSF 2.0\nJSR 316 - EE6 @javax.annotation.ManagedBean, no EL, no scope\nJSR 299 - EE6 CDI, Weld\nJSR 330 - JavaSE DI\nSpring Framework, also supports JSR 330, 316, proprietary scopes\nJSR 250 - Common Annotations for the Java Platform\n
  • #21 -31min\n
  • #22 \n
  • #23 41min\n
  • #24 \n