SlideShare a Scribd company logo
1

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
JSF Best Practices
Edward Burns
@edburns
http://slideshare.net/edburns/
Consulting Member of Staff, Oracle
Program Agenda
 Review of the JSF Lifecycle
 Conversion and Validation

 JSF Navigation Review

3

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
The following is intended to outline our general product direction. It is intended
for information purposes only, and may not be incorporated into any contract.
It is not a commitment to deliver any material, code, or functionality, and should
not be relied upon in making purchasing decisions. The
development, release, and timing of any features or functionality described for
Oracle’s products remains at the sole discretion of Oracle.

4

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Lifecycle Review

5

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Review: The Lifecycle Orchestrates MVC
The Baseball and Apple Pie of Web apps
• Data Conversion and Validation
• Page Flow
• Database integration

• I18N, L10N, A11Y
• Support CSS, Markup based
layout
• User Friendliness!

6

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Review: The Lifecycle Orchestrates MVC
The Baseball and Apple Pie of Web apps

7

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Review: The Lifecycle Orchestrates MVC
The Baseball and Apple Pie of Web apps
• The JSF Lifecycle uses some elements of the

strategy design pattern
– Define a family of algorithms

– Encapsulate each one
– Make them interchangeable

• For each Lifecycle phase, traverse the

UIComponent hierarchy and take the
appropriate action.
• Inversion of control in the extreme
• Analogy with Maven: work with the framework, not against it.

8

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Review: The Lifecycle Orchestrates MVC
Additional details added

9

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Interacting with the Lifecycle
Phase Listeners and System Events
 Phase Listeners
– coarse grained
– Not aware of individual components
– act before and after each lifecycle phase

 System Event
– fine grained
– can be attached to an individual component instance
– act during each lifecycle phase

10

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Interacting with the Lifecycle
Phase Listeners
 Similar in concept to Servlet Filter, but able to act within the JSF

lifecycle
 How to implement them
– Provide an implementation of javax.faces.event.PhaseListener
– MethodExpression that takes a javax.faces.event.PhaseEvent

11

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
PhaseListener
Implementing the Interface javax.faces.event.PhaseListener
public class MyPhaseListener implements PhaseListener {
public PhaseId getPhaseId() {
return (PhaseId.ANY_PHASE);

}
public void afterPhase(PhaseEvent event) {
System.out.println("afterPhase(" + event.getPhaseId() + ")");

}
public void beforePhase(PhaseEvent event) {
System.out.println("beforePhase(" + event.getPhaseId() + ")");
}
}

12

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
PhaseListener
Declare to the Runtime
 For all pages: faces-config.xml
<lifecycle>
<phase-listener>standard.MyPhaseListener</phase-listener>
</lifecycle>

 Per-page: <f:phaseListener>
 type attribute: fully qualified class name
 binding attribute: expression that evaluates to the instance

13

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
PhaseListener
How to impact the execution of the lifecycle
 FacesContext.renderResponse()
– Skip to Render Response Phase

 FacesContext.responseComplete()
– Do no further lifecycle processing on this request.

14

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Interacting with the Lifecycle
System Events
 Publish/Subscribe event bus for things that happen during the JSF

Lifecycle, not application specific
 Inspired by Solaris Dtrace, Linux strace, truss, etc.
 Listeners can be registered at three scopes
– component UIComponent.subscribeToEvent()
– view UIViewRoot.subscribeToEvent()
– application Application.subscribeToEvent()

 Publish is always with Application.publishEvent()

15

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
System Events

Interacting with
the Lifecycle
16

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Interacting with the Lifecycle
System Events
1.
2.

Implement the listener interface
Register for the event
–

<f:event> tag

–

faces-config.xml

<application>
<system-event-listener>
<system-event-listener-class>com.foo.MyListener
</system-event-listener-class>
<system-event-class>javax.faces.event.PreRenderViewEvent
</system-event-class>
</system-event-listener>
</application>
17

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Conversion and Validation

18

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Conversion and Validation
Type Safety for the UI
 How does JSF handle the concept of “value”?
– Apply Request Values
 unconverted string value pushed into UIComponent instances via

decode() method
– Process Validations
 Value is converted with Converter and validated with Validator(s)
– Update Model Values

 Value is pushed to value expression (if any)
– Render Response
 Value is pulled from value expression

19

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Conversion and Validation
Type Safety for the UI
 Behavior Based Interfaces
– ValueHolder
 Anything that displays a value
– EditableValueHolder
 When that value is editable by the end user.

20

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
21

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Converter
Standard Converters in package javax.faces.Convert
 Throw ConverterException to indicate conversion failure
 Failure added as per-component FacesMessage, other

components continue to be processed.
 Skip to Render Response phase if one or more
FacesMessage is present

22

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Converter
Implementing the interface javax.faces.convert.Converter
public static class CustomConverter implements Converter {
public Object getAsObject(FacesContext context, UIComponent component, String value)
{}
public String getAsString(FacesContext context, UIComponent component, Object value)
{}

}

23

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Converter
Declare to the Runtime
 faces-config.xml
– by id
<converter>
<converter-id>creditCardConverter</converter-id>
<converter-class>carstore.CreditCardConverter</converter-class>
</converter>

– by type
<converter>
<converter-for-class>java.util.Date</converter-for-class>

<converter-class>com.mycompany.MyThirdConverter</converter-class>
</converter>

24

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Converter
Declare to the Runtime
 @FacesConverter annotation
– value attribute is the converter id

– forClass attribute is the class converted by this converter

 Important subtlety
– Due to the nature of annotation scanning, a single usage of

@FacesConverter may only have one or the other of value and forClass.

25

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Associating a Converter with a UIComponent
Several ways
 Implicit converter, based on the type of the property referenced by the

EL Expression
 Explicit converter
– <f:converter>
 converterId attribute
 binding attribute

– converter attribute on a UIComponent

 Subtlety with <h:selectManyListbox>
– Must use <f:converter> for all types not handled by package

javax.faces.convert converters
26

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Associating a Converter with a UIComponent
Several ways
 Programmatically: call ValueHolder.setConverter( )

27

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Validators
Standard Validators in package javax.faces.validator
 Throw ValidatorException to indicate validation

failure
 Failure added as per-component
FacesMessage, other components continue to be
processed.
 Skip to Render Response phase if one or more
FacesMessage is present

28

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Validators
Implementing the interface javax.faces.validator.Validator
public class CustomValidator1 implements Validator {
public void validate(FacesContext context, UIComponent component, Object value) throws
ValidatorException {
}

}

 Why the checked exception?
– Validation is a business level concern, make it more explicit

29

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Validators
Tip
 When programming custom Validators and Converters, program

defensively.
 Check inbound arguments for null.
 Avoid throwing non-expected exceptions

30

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Validators
Declaring a Validator to the runtime
 faces-config.xml
<validator>
<validator-id>CreditCardValidator</validator-id>
<validator-class>com.foo.CreditCardValidator</validator-class>
</validator>

 @FacesValidator annotation
– value attribute is the id
– isDefault is boolean

31

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Validators
Empty String Considerations
 Context parameter
javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL

– true: if the incoming value is the empty string, will automatically call

UIInput.setSubmittedValue(null)
– false or not set: Allow the empty string to pass through

32

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Validators
Default Validator
 Added to all EditableValueHolder instances in every page
 Declared in faces-config.xml
<application>
<default-validators>
<validator-id>MyValidator</validator-id>
</default-validators>
<application/>

 Empty <default-validators/> causes the list to be cleared
 Declared with @FacesValidator annotation isDefault attribute
33

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Validators
Bean Validator
 The javax.faces.validate.BeanValidator validator is the default default

Validator
 It is the gateway to JSR-303 Bean Validation
 Validates the JavaBeans property referenced by the component
 Validation expressed as “constraint” annotation on the property
 Property vs whole bean validation

34

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Validators
Bean Validator Standard Constraints
@NotNull(groups = Order.class)

@Size(min = 1, message =
"{validator.notEmpty}", groups = Order.class)
@CreditCard(groups = Order.class)
public String getCreditCard() {

return creditCard;
}

35

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Bean Validator
Making your own constraints

1.

Annotate your annotation
@Documented
@Constraint(validatedBy = CreditCardConstraintValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CreditCard {
// message string should be {constraint.creditCard}
String message() default "{validator.creditCard}”;
//CreditCardVendor vendor default ANY;
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}

36

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Bean Validator
Making your own constraints

2.

Implement your constraint
public class CreditCardConstraintValidator
implements ConstraintValidator<CreditCard, String> {
private Pattern basicSyntaxPattern;
public void initialize(CreditCard parameters) {
basicSyntaxPattern = Pattern.compile("^[0-9 -]*$");
}
public boolean isValid(String value, ConstraintValidatorContext ctxt) {
if (value == null || value.length() == 0) {return true;}
if (!basicSyntaxPattern.matcher(value).matches()) { return false;}
return luhnCheck(stripNonDigits(value));
}
}

37

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Bean Validator
Disabling Bean Validator
 Context param

javax.faces.validator.DISABLE_BEAN_VALIDATOR
set to true

38

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Bean Validator
DEMOs
 Basic Bean Validator
 Version 1.1 Method

and Parameter
Validation

39

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Bean Validator
Groups
Groups
Validates all but this one

Validates these only

 Exposed to JSF via <f:validateBean validationGroups=“”>

40

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Associating a Validator with a UIComponent
Several ways
 Nest validator tag inside component
 Programmatically, call

EditableValueHolder.addValidator( )

41

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
JSF Navigation Review

42

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
How to Declare Navigation

 Explicit Navigation
– Declared via XML rules in faces-

config.xml file
 Implicit Navigation
– Relies on filename of pages
– No need for rules in faces-config.xml

43

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Explicit Navigation
 Designed to be well suited to developer

tools, hence syntax is verbose
 “action” is returned from all
ActionSource components
– Explicitly hard coded in the page
– Returned via a Value Expression

44

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Implicit Navigation
A reaction to all that verbosity
 from-view-id is the current view
 If there exists a page that is equivalent to the value of the current

action, the navigation is performed.

45

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
How Navigation Is Performed
POST vs GET
 JSF 1.0
– All navigation was POSTback based
 form does HTTP POST
 server does RequestDispatcher.forward()
 sends back new page, from old URL
 ABUSE OF HTTP!

 JSF 2.0
– Adds POST REDIRECT GET

46

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Further Navigation Enhancements
JSF 2.2 Faces Flows
 JSF 1.0
– All navigation was POSTback based
 form does HTTP POST
 server does RequestDispatcher.forward()
 sends back new page, from old URL
 ABUSE OF HTTP!

 JSF 2.0
– Adds POST REDIRECT GET

47

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Further Navigation Enhancements
 JSF 2.2 Faces Flows

 What’s in a Flow?

 Flow Nodes

48

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Further Navigation Enhancements
 JSF 2.2 Faces Flows

 PDF 7.5.1

49

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Questions?

Ed Burns
@edburns

50

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
The preceding is intended to outline our general product direction. It is intended
for information purposes only, and may not be incorporated into any contract.
It is not a commitment to deliver any material, code, or functionality, and should
not be relied upon in making purchasing decisions. The
development, release, and timing of any features or functionality described for
Oracle’s products remains at the sole discretion of Oracle.

51

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
52

Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Ad

More Related Content

What's hot (20)

Spring Framework Tutorial | VirtualNuggets
Spring Framework Tutorial | VirtualNuggetsSpring Framework Tutorial | VirtualNuggets
Spring Framework Tutorial | VirtualNuggets
Virtual Nuggets
 
What's New in WebLogic 12.1.3 and Beyond
What's New in WebLogic 12.1.3 and BeyondWhat's New in WebLogic 12.1.3 and Beyond
What's New in WebLogic 12.1.3 and Beyond
Oracle
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
nomykk
 
Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.
Edward Burns
 
Spring User Guide
Spring User GuideSpring User Guide
Spring User Guide
Muthuselvam RS
 
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
JavaCro'14 - Vaadin web application integration for Enterprise systems – Pete...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Java Enterprise Edition 6 Overview
Java Enterprise Edition 6 OverviewJava Enterprise Edition 6 Overview
Java Enterprise Edition 6 Overview
Eugene Bogaart
 
Java EE 8: On the Horizon
Java EE 8:  On the HorizonJava EE 8:  On the Horizon
Java EE 8: On the Horizon
Josh Juneau
 
Spring 3 MVC CodeMash 2009
Spring 3 MVC   CodeMash 2009Spring 3 MVC   CodeMash 2009
Spring 3 MVC CodeMash 2009
kensipe
 
Spring MVC framework
Spring MVC frameworkSpring MVC framework
Spring MVC framework
Mohit Gupta
 
Java EE7 in action
Java EE7 in actionJava EE7 in action
Java EE7 in action
Ankara JUG
 
Java Spring Framework
Java Spring FrameworkJava Spring Framework
Java Spring Framework
Mehul Jariwala
 
Java EE7 Demystified
Java EE7 DemystifiedJava EE7 Demystified
Java EE7 Demystified
Ankara JUG
 
JavaFX and JEE 7
JavaFX and JEE 7JavaFX and JEE 7
JavaFX and JEE 7
Vijay Nair
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
Harshit Choudhary
 
Ed presents JSF 2.2 at a 2013 Gameduell Tech talk
Ed presents JSF 2.2 at a 2013 Gameduell Tech talkEd presents JSF 2.2 at a 2013 Gameduell Tech talk
Ed presents JSF 2.2 at a 2013 Gameduell Tech talk
Edward Burns
 
J2ee
J2eeJ2ee
J2ee
Shaharyar khan
 
Building Java Desktop Apps with JavaFX 8 and Java EE 7
Building Java Desktop Apps with JavaFX 8 and Java EE 7Building Java Desktop Apps with JavaFX 8 and Java EE 7
Building Java Desktop Apps with JavaFX 8 and Java EE 7
Bruno Borges
 
Sprint Portlet MVC Seminar
Sprint Portlet MVC SeminarSprint Portlet MVC Seminar
Sprint Portlet MVC Seminar
John Lewis
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
NexThoughts Technologies
 
Spring Framework Tutorial | VirtualNuggets
Spring Framework Tutorial | VirtualNuggetsSpring Framework Tutorial | VirtualNuggets
Spring Framework Tutorial | VirtualNuggets
Virtual Nuggets
 
What's New in WebLogic 12.1.3 and Beyond
What's New in WebLogic 12.1.3 and BeyondWhat's New in WebLogic 12.1.3 and Beyond
What's New in WebLogic 12.1.3 and Beyond
Oracle
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
nomykk
 
Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.
Edward Burns
 
Java Enterprise Edition 6 Overview
Java Enterprise Edition 6 OverviewJava Enterprise Edition 6 Overview
Java Enterprise Edition 6 Overview
Eugene Bogaart
 
Java EE 8: On the Horizon
Java EE 8:  On the HorizonJava EE 8:  On the Horizon
Java EE 8: On the Horizon
Josh Juneau
 
Spring 3 MVC CodeMash 2009
Spring 3 MVC   CodeMash 2009Spring 3 MVC   CodeMash 2009
Spring 3 MVC CodeMash 2009
kensipe
 
Spring MVC framework
Spring MVC frameworkSpring MVC framework
Spring MVC framework
Mohit Gupta
 
Java EE7 in action
Java EE7 in actionJava EE7 in action
Java EE7 in action
Ankara JUG
 
Java EE7 Demystified
Java EE7 DemystifiedJava EE7 Demystified
Java EE7 Demystified
Ankara JUG
 
JavaFX and JEE 7
JavaFX and JEE 7JavaFX and JEE 7
JavaFX and JEE 7
Vijay Nair
 
Ed presents JSF 2.2 at a 2013 Gameduell Tech talk
Ed presents JSF 2.2 at a 2013 Gameduell Tech talkEd presents JSF 2.2 at a 2013 Gameduell Tech talk
Ed presents JSF 2.2 at a 2013 Gameduell Tech talk
Edward Burns
 
Building Java Desktop Apps with JavaFX 8 and Java EE 7
Building Java Desktop Apps with JavaFX 8 and Java EE 7Building Java Desktop Apps with JavaFX 8 and Java EE 7
Building Java Desktop Apps with JavaFX 8 and Java EE 7
Bruno Borges
 
Sprint Portlet MVC Seminar
Sprint Portlet MVC SeminarSprint Portlet MVC Seminar
Sprint Portlet MVC Seminar
John Lewis
 

Viewers also liked (19)

JSF 2.3: Integration with Front-End Frameworks
JSF 2.3: Integration with Front-End FrameworksJSF 2.3: Integration with Front-End Frameworks
JSF 2.3: Integration with Front-End Frameworks
Ian Hlavats
 
JSF Design Patterns
JSF Design PatternsJSF Design Patterns
JSF Design Patterns
Anghel Leonard
 
Back 2 basics - SSMS Tips (IDf)
Back 2 basics - SSMS Tips (IDf)Back 2 basics - SSMS Tips (IDf)
Back 2 basics - SSMS Tips (IDf)
sqlserver.co.il
 
Windows azure sql_database_security_isug012013
Windows azure sql_database_security_isug012013Windows azure sql_database_security_isug012013
Windows azure sql_database_security_isug012013
sqlserver.co.il
 
JSF Component Behaviors
JSF Component BehaviorsJSF Component Behaviors
JSF Component Behaviors
Andy Schwartz
 
Building a Computer Science Pathway in Your High School - Feb 2017
Building a Computer Science Pathway in Your High School - Feb 2017Building a Computer Science Pathway in Your High School - Feb 2017
Building a Computer Science Pathway in Your High School - Feb 2017
Hal Speed
 
Architecting large Node.js applications
Architecting large Node.js applicationsArchitecting large Node.js applications
Architecting large Node.js applications
Sergi Mansilla
 
Jsf presentation
Jsf presentationJsf presentation
Jsf presentation
Ashish Gupta
 
Online bus pass management system
Online bus pass management systemOnline bus pass management system
Online bus pass management system
piyush khadse
 
Learning jQuery in 30 minutes
Learning jQuery in 30 minutesLearning jQuery in 30 minutes
Learning jQuery in 30 minutes
Simon Willison
 
Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...
Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...
Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...
Beat Signer
 
Relational Model and Relational Algebra - Lecture 3 - Introduction to Databas...
Relational Model and Relational Algebra - Lecture 3 - Introduction to Databas...Relational Model and Relational Algebra - Lecture 3 - Introduction to Databas...
Relational Model and Relational Algebra - Lecture 3 - Introduction to Databas...
Beat Signer
 
NodeJS for Beginner
NodeJS for BeginnerNodeJS for Beginner
NodeJS for Beginner
Apaichon Punopas
 
Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture
AppDynamics
 
Bus Ticket Management System Documentation
Bus Ticket Management System DocumentationBus Ticket Management System Documentation
Bus Ticket Management System Documentation
muzammil siddiq
 
Nodejs Explained with Examples
Nodejs Explained with ExamplesNodejs Explained with Examples
Nodejs Explained with Examples
Gabriele Lana
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
Vikash Singh
 
Java Server Faces (JSF) - Basics
Java Server Faces (JSF) - BasicsJava Server Faces (JSF) - Basics
Java Server Faces (JSF) - Basics
BG Java EE Course
 
Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
Beat Signer
 
JSF 2.3: Integration with Front-End Frameworks
JSF 2.3: Integration with Front-End FrameworksJSF 2.3: Integration with Front-End Frameworks
JSF 2.3: Integration with Front-End Frameworks
Ian Hlavats
 
Back 2 basics - SSMS Tips (IDf)
Back 2 basics - SSMS Tips (IDf)Back 2 basics - SSMS Tips (IDf)
Back 2 basics - SSMS Tips (IDf)
sqlserver.co.il
 
Windows azure sql_database_security_isug012013
Windows azure sql_database_security_isug012013Windows azure sql_database_security_isug012013
Windows azure sql_database_security_isug012013
sqlserver.co.il
 
JSF Component Behaviors
JSF Component BehaviorsJSF Component Behaviors
JSF Component Behaviors
Andy Schwartz
 
Building a Computer Science Pathway in Your High School - Feb 2017
Building a Computer Science Pathway in Your High School - Feb 2017Building a Computer Science Pathway in Your High School - Feb 2017
Building a Computer Science Pathway in Your High School - Feb 2017
Hal Speed
 
Architecting large Node.js applications
Architecting large Node.js applicationsArchitecting large Node.js applications
Architecting large Node.js applications
Sergi Mansilla
 
Online bus pass management system
Online bus pass management systemOnline bus pass management system
Online bus pass management system
piyush khadse
 
Learning jQuery in 30 minutes
Learning jQuery in 30 minutesLearning jQuery in 30 minutes
Learning jQuery in 30 minutes
Simon Willison
 
Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...
Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...
Extended ER Model and other Modelling Languages - Lecture 2 - Introduction to...
Beat Signer
 
Relational Model and Relational Algebra - Lecture 3 - Introduction to Databas...
Relational Model and Relational Algebra - Lecture 3 - Introduction to Databas...Relational Model and Relational Algebra - Lecture 3 - Introduction to Databas...
Relational Model and Relational Algebra - Lecture 3 - Introduction to Databas...
Beat Signer
 
Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture
AppDynamics
 
Bus Ticket Management System Documentation
Bus Ticket Management System DocumentationBus Ticket Management System Documentation
Bus Ticket Management System Documentation
muzammil siddiq
 
Nodejs Explained with Examples
Nodejs Explained with ExamplesNodejs Explained with Examples
Nodejs Explained with Examples
Gabriele Lana
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
Vikash Singh
 
Java Server Faces (JSF) - Basics
Java Server Faces (JSF) - BasicsJava Server Faces (JSF) - Basics
Java Server Faces (JSF) - Basics
BG Java EE Course
 
Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
Structured Query Language (SQL) - Lecture 5 - Introduction to Databases (1007...
Beat Signer
 
Ad

Similar to Best Practices for JSF, Gameduell 2013 (20)

JSR 236 Concurrency Utils for EE presentation for JavaOne 2013 (CON7948)
JSR 236 Concurrency Utils for EE presentation for JavaOne 2013 (CON7948)JSR 236 Concurrency Utils for EE presentation for JavaOne 2013 (CON7948)
JSR 236 Concurrency Utils for EE presentation for JavaOne 2013 (CON7948)
Fred Rowe
 
GlassFish BOF
GlassFish BOFGlassFish BOF
GlassFish BOF
glassfish
 
OTN Tour 2013: What's new in java EE 7
OTN Tour 2013: What's new in java EE 7OTN Tour 2013: What's new in java EE 7
OTN Tour 2013: What's new in java EE 7
Bruno Borges
 
The 2014 Decision Makers Guide to Java Web Frameworks
The 2014 Decision Makers Guide to Java Web FrameworksThe 2014 Decision Makers Guide to Java Web Frameworks
The 2014 Decision Makers Guide to Java Web Frameworks
Kunal Ashar
 
Oracle ADF Architecture TV - Development - Error Handling
Oracle ADF Architecture TV - Development - Error HandlingOracle ADF Architecture TV - Development - Error Handling
Oracle ADF Architecture TV - Development - Error Handling
Chris Muir
 
oraclewls-jrebel
oraclewls-jrebeloraclewls-jrebel
oraclewls-jrebel
Gabriel Torres
 
JDK 10 Java Module System
JDK 10 Java Module SystemJDK 10 Java Module System
JDK 10 Java Module System
Wolfgang Weigend
 
Android Architecture Components
Android Architecture ComponentsAndroid Architecture Components
Android Architecture Components
Darshan Parikh
 
Servlet to Spring: Internal Understanding
Servlet to Spring: Internal UnderstandingServlet to Spring: Internal Understanding
Servlet to Spring: Internal Understanding
Knoldus Inc.
 
Struts Interview Questions
Struts Interview QuestionsStruts Interview Questions
Struts Interview Questions
jbashask
 
Whats Next for JCA?
Whats Next for JCA?Whats Next for JCA?
Whats Next for JCA?
Fred Rowe
 
Struts Interceptors
Struts InterceptorsStruts Interceptors
Struts Interceptors
Onkar Deshpande
 
Load runner 8.0
Load runner 8.0Load runner 8.0
Load runner 8.0
medsherb
 
Application Lifecycle Management (ALM).pdf
Application Lifecycle Management (ALM).pdfApplication Lifecycle Management (ALM).pdf
Application Lifecycle Management (ALM).pdf
Amitesh Raikwar
 
Service Virtualization: Delivering Complex Test Environments on Demand
Service Virtualization: Delivering Complex Test Environments on DemandService Virtualization: Delivering Complex Test Environments on Demand
Service Virtualization: Delivering Complex Test Environments on Demand
Erika Barron
 
JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)
JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)
JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)
Shing Wai Chan
 
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai..."Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
Fwdays
 
Presente e Futuro: Java EE.next()
Presente e Futuro: Java EE.next()Presente e Futuro: Java EE.next()
Presente e Futuro: Java EE.next()
Bruno Borges
 
Securing JSF Applications Against the OWASP Top Ten
Securing JSF Applications Against the OWASP Top TenSecuring JSF Applications Against the OWASP Top Ten
Securing JSF Applications Against the OWASP Top Ten
David Chandler
 
Java ee7 1hour
Java ee7 1hourJava ee7 1hour
Java ee7 1hour
Frank Rodriguez
 
JSR 236 Concurrency Utils for EE presentation for JavaOne 2013 (CON7948)
JSR 236 Concurrency Utils for EE presentation for JavaOne 2013 (CON7948)JSR 236 Concurrency Utils for EE presentation for JavaOne 2013 (CON7948)
JSR 236 Concurrency Utils for EE presentation for JavaOne 2013 (CON7948)
Fred Rowe
 
GlassFish BOF
GlassFish BOFGlassFish BOF
GlassFish BOF
glassfish
 
OTN Tour 2013: What's new in java EE 7
OTN Tour 2013: What's new in java EE 7OTN Tour 2013: What's new in java EE 7
OTN Tour 2013: What's new in java EE 7
Bruno Borges
 
The 2014 Decision Makers Guide to Java Web Frameworks
The 2014 Decision Makers Guide to Java Web FrameworksThe 2014 Decision Makers Guide to Java Web Frameworks
The 2014 Decision Makers Guide to Java Web Frameworks
Kunal Ashar
 
Oracle ADF Architecture TV - Development - Error Handling
Oracle ADF Architecture TV - Development - Error HandlingOracle ADF Architecture TV - Development - Error Handling
Oracle ADF Architecture TV - Development - Error Handling
Chris Muir
 
Android Architecture Components
Android Architecture ComponentsAndroid Architecture Components
Android Architecture Components
Darshan Parikh
 
Servlet to Spring: Internal Understanding
Servlet to Spring: Internal UnderstandingServlet to Spring: Internal Understanding
Servlet to Spring: Internal Understanding
Knoldus Inc.
 
Struts Interview Questions
Struts Interview QuestionsStruts Interview Questions
Struts Interview Questions
jbashask
 
Whats Next for JCA?
Whats Next for JCA?Whats Next for JCA?
Whats Next for JCA?
Fred Rowe
 
Load runner 8.0
Load runner 8.0Load runner 8.0
Load runner 8.0
medsherb
 
Application Lifecycle Management (ALM).pdf
Application Lifecycle Management (ALM).pdfApplication Lifecycle Management (ALM).pdf
Application Lifecycle Management (ALM).pdf
Amitesh Raikwar
 
Service Virtualization: Delivering Complex Test Environments on Demand
Service Virtualization: Delivering Complex Test Environments on DemandService Virtualization: Delivering Complex Test Environments on Demand
Service Virtualization: Delivering Complex Test Environments on Demand
Erika Barron
 
JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)
JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)
JavaOne San Francisco 2013 - Servlet 3.1 (JSR 340)
Shing Wai Chan
 
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai..."Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
"Micro-frontends: Scalable and Modular Frontend in Parimatch Tech", Kyrylo Ai...
Fwdays
 
Presente e Futuro: Java EE.next()
Presente e Futuro: Java EE.next()Presente e Futuro: Java EE.next()
Presente e Futuro: Java EE.next()
Bruno Borges
 
Securing JSF Applications Against the OWASP Top Ten
Securing JSF Applications Against the OWASP Top TenSecuring JSF Applications Against the OWASP Top Ten
Securing JSF Applications Against the OWASP Top Ten
David Chandler
 
Ad

More from Edward Burns (20)

Java and AI with LangChain4j: Jakarta EE gets AI
Java and AI with LangChain4j: Jakarta EE gets AIJava and AI with LangChain4j: Jakarta EE gets AI
Java and AI with LangChain4j: Jakarta EE gets AI
Edward Burns
 
Java and AI with LangChain4j: Jakarta EE and AI
Java and AI with LangChain4j: Jakarta EE and AIJava and AI with LangChain4j: Jakarta EE and AI
Java and AI with LangChain4j: Jakarta EE and AI
Edward Burns
 
20250403-trusted-ai-favorite-ide-javaland.pdf
20250403-trusted-ai-favorite-ide-javaland.pdf20250403-trusted-ai-favorite-ide-javaland.pdf
20250403-trusted-ai-favorite-ide-javaland.pdf
Edward Burns
 
A survey of cloud readiness for Jakarta EE 11
A survey of cloud readiness for Jakarta EE 11A survey of cloud readiness for Jakarta EE 11
A survey of cloud readiness for Jakarta EE 11
Edward Burns
 
Java and AI with LangChain4j: Jakarta EE and SmallRye LLM
Java and AI with LangChain4j: Jakarta EE and SmallRye LLMJava and AI with LangChain4j: Jakarta EE and SmallRye LLM
Java and AI with LangChain4j: Jakarta EE and SmallRye LLM
Edward Burns
 
Java and AI with LangChain4j: Integrating Jakarta EE and LLMs
Java and AI with LangChain4j: Integrating Jakarta EE and LLMsJava and AI with LangChain4j: Integrating Jakarta EE and LLMs
Java and AI with LangChain4j: Integrating Jakarta EE and LLMs
Edward Burns
 
How to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDEHow to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDE
Edward Burns
 
How to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDEHow to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDE
Edward Burns
 
How to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDEHow to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDE
Edward Burns
 
How to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDEHow to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDE
Edward Burns
 
2024-09-10 Jacksonville JUG Java on Azure with AI
2024-09-10 Jacksonville JUG Java on Azure with AI2024-09-10 Jacksonville JUG Java on Azure with AI
2024-09-10 Jacksonville JUG Java on Azure with AI
Edward Burns
 
Deliver AI infused app innovation with Open Liberty on AKS
Deliver AI infused app innovation with Open Liberty on AKSDeliver AI infused app innovation with Open Liberty on AKS
Deliver AI infused app innovation with Open Liberty on AKS
Edward Burns
 
DevTalks Romania: Prepare for Jakarta EE 11
DevTalks Romania: Prepare for Jakarta EE 11DevTalks Romania: Prepare for Jakarta EE 11
DevTalks Romania: Prepare for Jakarta EE 11
Edward Burns
 
Developer Career Masterplan
Developer Career MasterplanDeveloper Career Masterplan
Developer Career Masterplan
Edward Burns
 
Jakarta EE 11 Status Update​
Jakarta EE 11 Status Update​Jakarta EE 11 Status Update​
Jakarta EE 11 Status Update​
Edward Burns
 
Sponsored Session: Please touch that dial!
Sponsored Session: Please touch that dial!Sponsored Session: Please touch that dial!
Sponsored Session: Please touch that dial!
Edward Burns
 
How modernizing enterprise applications gives you a competitive advantage
How modernizing enterprise applications gives you a competitive advantageHow modernizing enterprise applications gives you a competitive advantage
How modernizing enterprise applications gives you a competitive advantage
Edward Burns
 
Wie Azure Jakarta EE Nutzt
Wie Azure Jakarta EE NutztWie Azure Jakarta EE Nutzt
Wie Azure Jakarta EE Nutzt
Edward Burns
 
Practical lessons from customers performing digital transformation with Azure
Practical lessons from customers performing digital transformation with AzurePractical lessons from customers performing digital transformation with Azure
Practical lessons from customers performing digital transformation with Azure
Edward Burns
 
wls-azure-devnexus-2022.pdf
wls-azure-devnexus-2022.pdfwls-azure-devnexus-2022.pdf
wls-azure-devnexus-2022.pdf
Edward Burns
 
Java and AI with LangChain4j: Jakarta EE gets AI
Java and AI with LangChain4j: Jakarta EE gets AIJava and AI with LangChain4j: Jakarta EE gets AI
Java and AI with LangChain4j: Jakarta EE gets AI
Edward Burns
 
Java and AI with LangChain4j: Jakarta EE and AI
Java and AI with LangChain4j: Jakarta EE and AIJava and AI with LangChain4j: Jakarta EE and AI
Java and AI with LangChain4j: Jakarta EE and AI
Edward Burns
 
20250403-trusted-ai-favorite-ide-javaland.pdf
20250403-trusted-ai-favorite-ide-javaland.pdf20250403-trusted-ai-favorite-ide-javaland.pdf
20250403-trusted-ai-favorite-ide-javaland.pdf
Edward Burns
 
A survey of cloud readiness for Jakarta EE 11
A survey of cloud readiness for Jakarta EE 11A survey of cloud readiness for Jakarta EE 11
A survey of cloud readiness for Jakarta EE 11
Edward Burns
 
Java and AI with LangChain4j: Jakarta EE and SmallRye LLM
Java and AI with LangChain4j: Jakarta EE and SmallRye LLMJava and AI with LangChain4j: Jakarta EE and SmallRye LLM
Java and AI with LangChain4j: Jakarta EE and SmallRye LLM
Edward Burns
 
Java and AI with LangChain4j: Integrating Jakarta EE and LLMs
Java and AI with LangChain4j: Integrating Jakarta EE and LLMsJava and AI with LangChain4j: Integrating Jakarta EE and LLMs
Java and AI with LangChain4j: Integrating Jakarta EE and LLMs
Edward Burns
 
How to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDEHow to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDE
Edward Burns
 
How to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDEHow to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDE
Edward Burns
 
How to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDEHow to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDE
Edward Burns
 
How to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDEHow to get trusted AI in your favorite IDE
How to get trusted AI in your favorite IDE
Edward Burns
 
2024-09-10 Jacksonville JUG Java on Azure with AI
2024-09-10 Jacksonville JUG Java on Azure with AI2024-09-10 Jacksonville JUG Java on Azure with AI
2024-09-10 Jacksonville JUG Java on Azure with AI
Edward Burns
 
Deliver AI infused app innovation with Open Liberty on AKS
Deliver AI infused app innovation with Open Liberty on AKSDeliver AI infused app innovation with Open Liberty on AKS
Deliver AI infused app innovation with Open Liberty on AKS
Edward Burns
 
DevTalks Romania: Prepare for Jakarta EE 11
DevTalks Romania: Prepare for Jakarta EE 11DevTalks Romania: Prepare for Jakarta EE 11
DevTalks Romania: Prepare for Jakarta EE 11
Edward Burns
 
Developer Career Masterplan
Developer Career MasterplanDeveloper Career Masterplan
Developer Career Masterplan
Edward Burns
 
Jakarta EE 11 Status Update​
Jakarta EE 11 Status Update​Jakarta EE 11 Status Update​
Jakarta EE 11 Status Update​
Edward Burns
 
Sponsored Session: Please touch that dial!
Sponsored Session: Please touch that dial!Sponsored Session: Please touch that dial!
Sponsored Session: Please touch that dial!
Edward Burns
 
How modernizing enterprise applications gives you a competitive advantage
How modernizing enterprise applications gives you a competitive advantageHow modernizing enterprise applications gives you a competitive advantage
How modernizing enterprise applications gives you a competitive advantage
Edward Burns
 
Wie Azure Jakarta EE Nutzt
Wie Azure Jakarta EE NutztWie Azure Jakarta EE Nutzt
Wie Azure Jakarta EE Nutzt
Edward Burns
 
Practical lessons from customers performing digital transformation with Azure
Practical lessons from customers performing digital transformation with AzurePractical lessons from customers performing digital transformation with Azure
Practical lessons from customers performing digital transformation with Azure
Edward Burns
 
wls-azure-devnexus-2022.pdf
wls-azure-devnexus-2022.pdfwls-azure-devnexus-2022.pdf
wls-azure-devnexus-2022.pdf
Edward Burns
 

Recently uploaded (20)

Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 

Best Practices for JSF, Gameduell 2013

  • 1. 1 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 2. JSF Best Practices Edward Burns @edburns http://slideshare.net/edburns/ Consulting Member of Staff, Oracle
  • 3. Program Agenda  Review of the JSF Lifecycle  Conversion and Validation  JSF Navigation Review 3 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 4. The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. 4 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 5. Lifecycle Review 5 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 6. Review: The Lifecycle Orchestrates MVC The Baseball and Apple Pie of Web apps • Data Conversion and Validation • Page Flow • Database integration • I18N, L10N, A11Y • Support CSS, Markup based layout • User Friendliness! 6 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 7. Review: The Lifecycle Orchestrates MVC The Baseball and Apple Pie of Web apps 7 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 8. Review: The Lifecycle Orchestrates MVC The Baseball and Apple Pie of Web apps • The JSF Lifecycle uses some elements of the strategy design pattern – Define a family of algorithms – Encapsulate each one – Make them interchangeable • For each Lifecycle phase, traverse the UIComponent hierarchy and take the appropriate action. • Inversion of control in the extreme • Analogy with Maven: work with the framework, not against it. 8 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 9. Review: The Lifecycle Orchestrates MVC Additional details added 9 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 10. Interacting with the Lifecycle Phase Listeners and System Events  Phase Listeners – coarse grained – Not aware of individual components – act before and after each lifecycle phase  System Event – fine grained – can be attached to an individual component instance – act during each lifecycle phase 10 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 11. Interacting with the Lifecycle Phase Listeners  Similar in concept to Servlet Filter, but able to act within the JSF lifecycle  How to implement them – Provide an implementation of javax.faces.event.PhaseListener – MethodExpression that takes a javax.faces.event.PhaseEvent 11 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 12. PhaseListener Implementing the Interface javax.faces.event.PhaseListener public class MyPhaseListener implements PhaseListener { public PhaseId getPhaseId() { return (PhaseId.ANY_PHASE); } public void afterPhase(PhaseEvent event) { System.out.println("afterPhase(" + event.getPhaseId() + ")"); } public void beforePhase(PhaseEvent event) { System.out.println("beforePhase(" + event.getPhaseId() + ")"); } } 12 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 13. PhaseListener Declare to the Runtime  For all pages: faces-config.xml <lifecycle> <phase-listener>standard.MyPhaseListener</phase-listener> </lifecycle>  Per-page: <f:phaseListener>  type attribute: fully qualified class name  binding attribute: expression that evaluates to the instance 13 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 14. PhaseListener How to impact the execution of the lifecycle  FacesContext.renderResponse() – Skip to Render Response Phase  FacesContext.responseComplete() – Do no further lifecycle processing on this request. 14 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 15. Interacting with the Lifecycle System Events  Publish/Subscribe event bus for things that happen during the JSF Lifecycle, not application specific  Inspired by Solaris Dtrace, Linux strace, truss, etc.  Listeners can be registered at three scopes – component UIComponent.subscribeToEvent() – view UIViewRoot.subscribeToEvent() – application Application.subscribeToEvent()  Publish is always with Application.publishEvent() 15 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 16. System Events Interacting with the Lifecycle 16 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 17. Interacting with the Lifecycle System Events 1. 2. Implement the listener interface Register for the event – <f:event> tag – faces-config.xml <application> <system-event-listener> <system-event-listener-class>com.foo.MyListener </system-event-listener-class> <system-event-class>javax.faces.event.PreRenderViewEvent </system-event-class> </system-event-listener> </application> 17 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 18. Conversion and Validation 18 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 19. Conversion and Validation Type Safety for the UI  How does JSF handle the concept of “value”? – Apply Request Values  unconverted string value pushed into UIComponent instances via decode() method – Process Validations  Value is converted with Converter and validated with Validator(s) – Update Model Values  Value is pushed to value expression (if any) – Render Response  Value is pulled from value expression 19 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 20. Conversion and Validation Type Safety for the UI  Behavior Based Interfaces – ValueHolder  Anything that displays a value – EditableValueHolder  When that value is editable by the end user. 20 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 21. 21 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 22. Converter Standard Converters in package javax.faces.Convert  Throw ConverterException to indicate conversion failure  Failure added as per-component FacesMessage, other components continue to be processed.  Skip to Render Response phase if one or more FacesMessage is present 22 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 23. Converter Implementing the interface javax.faces.convert.Converter public static class CustomConverter implements Converter { public Object getAsObject(FacesContext context, UIComponent component, String value) {} public String getAsString(FacesContext context, UIComponent component, Object value) {} } 23 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 24. Converter Declare to the Runtime  faces-config.xml – by id <converter> <converter-id>creditCardConverter</converter-id> <converter-class>carstore.CreditCardConverter</converter-class> </converter> – by type <converter> <converter-for-class>java.util.Date</converter-for-class> <converter-class>com.mycompany.MyThirdConverter</converter-class> </converter> 24 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 25. Converter Declare to the Runtime  @FacesConverter annotation – value attribute is the converter id – forClass attribute is the class converted by this converter  Important subtlety – Due to the nature of annotation scanning, a single usage of @FacesConverter may only have one or the other of value and forClass. 25 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 26. Associating a Converter with a UIComponent Several ways  Implicit converter, based on the type of the property referenced by the EL Expression  Explicit converter – <f:converter>  converterId attribute  binding attribute – converter attribute on a UIComponent  Subtlety with <h:selectManyListbox> – Must use <f:converter> for all types not handled by package javax.faces.convert converters 26 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 27. Associating a Converter with a UIComponent Several ways  Programmatically: call ValueHolder.setConverter( ) 27 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 28. Validators Standard Validators in package javax.faces.validator  Throw ValidatorException to indicate validation failure  Failure added as per-component FacesMessage, other components continue to be processed.  Skip to Render Response phase if one or more FacesMessage is present 28 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 29. Validators Implementing the interface javax.faces.validator.Validator public class CustomValidator1 implements Validator { public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { } }  Why the checked exception? – Validation is a business level concern, make it more explicit 29 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 30. Validators Tip  When programming custom Validators and Converters, program defensively.  Check inbound arguments for null.  Avoid throwing non-expected exceptions 30 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 31. Validators Declaring a Validator to the runtime  faces-config.xml <validator> <validator-id>CreditCardValidator</validator-id> <validator-class>com.foo.CreditCardValidator</validator-class> </validator>  @FacesValidator annotation – value attribute is the id – isDefault is boolean 31 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 32. Validators Empty String Considerations  Context parameter javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL – true: if the incoming value is the empty string, will automatically call UIInput.setSubmittedValue(null) – false or not set: Allow the empty string to pass through 32 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 33. Validators Default Validator  Added to all EditableValueHolder instances in every page  Declared in faces-config.xml <application> <default-validators> <validator-id>MyValidator</validator-id> </default-validators> <application/>  Empty <default-validators/> causes the list to be cleared  Declared with @FacesValidator annotation isDefault attribute 33 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 34. Validators Bean Validator  The javax.faces.validate.BeanValidator validator is the default default Validator  It is the gateway to JSR-303 Bean Validation  Validates the JavaBeans property referenced by the component  Validation expressed as “constraint” annotation on the property  Property vs whole bean validation 34 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 35. Validators Bean Validator Standard Constraints @NotNull(groups = Order.class) @Size(min = 1, message = "{validator.notEmpty}", groups = Order.class) @CreditCard(groups = Order.class) public String getCreditCard() { return creditCard; } 35 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 36. Bean Validator Making your own constraints 1. Annotate your annotation @Documented @Constraint(validatedBy = CreditCardConstraintValidator.class) @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface CreditCard { // message string should be {constraint.creditCard} String message() default "{validator.creditCard}”; //CreditCardVendor vendor default ANY; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } 36 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 37. Bean Validator Making your own constraints 2. Implement your constraint public class CreditCardConstraintValidator implements ConstraintValidator<CreditCard, String> { private Pattern basicSyntaxPattern; public void initialize(CreditCard parameters) { basicSyntaxPattern = Pattern.compile("^[0-9 -]*$"); } public boolean isValid(String value, ConstraintValidatorContext ctxt) { if (value == null || value.length() == 0) {return true;} if (!basicSyntaxPattern.matcher(value).matches()) { return false;} return luhnCheck(stripNonDigits(value)); } } 37 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 38. Bean Validator Disabling Bean Validator  Context param javax.faces.validator.DISABLE_BEAN_VALIDATOR set to true 38 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 39. Bean Validator DEMOs  Basic Bean Validator  Version 1.1 Method and Parameter Validation 39 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 40. Bean Validator Groups Groups Validates all but this one Validates these only  Exposed to JSF via <f:validateBean validationGroups=“”> 40 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 41. Associating a Validator with a UIComponent Several ways  Nest validator tag inside component  Programmatically, call EditableValueHolder.addValidator( ) 41 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 42. JSF Navigation Review 42 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 43. How to Declare Navigation  Explicit Navigation – Declared via XML rules in faces- config.xml file  Implicit Navigation – Relies on filename of pages – No need for rules in faces-config.xml 43 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 44. Explicit Navigation  Designed to be well suited to developer tools, hence syntax is verbose  “action” is returned from all ActionSource components – Explicitly hard coded in the page – Returned via a Value Expression 44 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 45. Implicit Navigation A reaction to all that verbosity  from-view-id is the current view  If there exists a page that is equivalent to the value of the current action, the navigation is performed. 45 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 46. How Navigation Is Performed POST vs GET  JSF 1.0 – All navigation was POSTback based  form does HTTP POST  server does RequestDispatcher.forward()  sends back new page, from old URL  ABUSE OF HTTP!  JSF 2.0 – Adds POST REDIRECT GET 46 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 47. Further Navigation Enhancements JSF 2.2 Faces Flows  JSF 1.0 – All navigation was POSTback based  form does HTTP POST  server does RequestDispatcher.forward()  sends back new page, from old URL  ABUSE OF HTTP!  JSF 2.0 – Adds POST REDIRECT GET 47 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 48. Further Navigation Enhancements  JSF 2.2 Faces Flows  What’s in a Flow?  Flow Nodes 48 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 49. Further Navigation Enhancements  JSF 2.2 Faces Flows  PDF 7.5.1 49 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 50. Questions? Ed Burns @edburns 50 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 51. The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. 51 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  • 52. 52 Copyright © 2013, Oracle and/or its affiliates. All rights reserved.