43

JSF 2.3: The Community Takes Over - RainFocus · CDI EJB JAX-RPC JSF Java Persistence Web Services Common JSON-P Annotaons EL JAX-RS Web Services JSON-B JavaMail Metadata Security

Embed Size (px)

Citation preview

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3:TheCommunityTakesOverCON7981

EdBurnsServletSpecificaKonCo-leadsJavaEEPlaNormGroupKitoMannJSFExpertGroupMemberandIndependentConsultantSeptember2016

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

SafeHarborStatementThefollowingisintendedtooutlineourgeneralproductdirecKon.ItisintendedforinformaKonpurposesonly,andmaynotbeincorporatedintoanycontract.Itisnotacommitmenttodeliveranymaterial,code,orfuncKonality,andshouldnotberelieduponinmakingpurchasingdecisions.Thedevelopment,release,andKmingofanyfeaturesorfuncKonalitydescribedforOracle’sproductsremainsatthesolediscreKonofOracle.

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

•  EdBurns

– ServletandJSFco-specleadsince1.0– FrequentinternaKonalconferencespeaker

– AuthoroffourEnterpriseJavarelatedbooksfromMcGraw-Hill,includingJSF2.0theCompleteReference

• KitoMann

– JSFEGmembersince1.2– FounderofJSFCentral.com– HostofEnterpriseJavaNewscast– AuthorofJSFinAcKon– Independenttrainerandconsultant

5

SpeakerBios

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

OurPlanforYourTimeInvestment

BigPicture

JSFHistoricalPerspecKve

BigTicketNewFeatures

JavaEEPlaNormIntegraKon

Summary

1

2

3

4

5

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

• Category:EnterpriseJava

PrimeFacesWinsDuke’sChoiceAward2016h.ps://www.oracle.com/javaone/dukes-choice-award.html

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| ConfidenKal–OracleInternal/Restricted/HighlyRestricted 8

JavaEE7

Connector JAXBJSPDebugging

ManagedBeansJSPConcurrencyEE Interceptors JAX-WS WebSocket

BeanValidaKon JASPIC ServletJMS JTADeployment

Batch JACCDependencyInjecKon JAXR JSTL Management

CDI EJB JAX-RPC WebServicesJSF JavaPersistence

JSON-PCommonAnnotaKons EL JAX-RS WebServices

MetadataJavaMail

CDI

JSON-B

Security

BeanValidaKon

JSF

JAX-RS

JSON-P

Servlet

HealthCheckConfiguraKon

JavaEE8(RevisedProposal,2016)

JSP

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.| ConfidenKal–OracleInternal/Restricted/HighlyRestricted 9

JavaEE7

Connector JAXBJSPDebugging

ManagedBeansJSPConcurrencyEE Interceptors JAX-WS WebSocket

BeanValidaKon JASPIC ServletJMS JTADeployment

Batch JACCDependencyInjecKon JAXR JSTL Management

CDI EJB JAX-RPC WebServicesJSF JavaPersistence

JSON-PCommonAnnotaKons EL JAX-RS WebServices

MetadataJavaMail

CDI

JSON-B

Security

BeanValidaKon

JSF

JAX-RS

JSON-P

Servlet

HealthCheckConfiguraKon

JavaEE8(RevisedProposal,2016)

JSP

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

•  JavaEE6isalreadyinOracle’spubliccloud

•  Itisojenapartofanearlystageof“breakingupthemonolith”efforts– Startbyreplacingdirectin-processinvocaKonofCDIbeanswithRESTcallstoremoteservices

– CheckoutJoinFacesforawaytoquicklyrunJSFinSpringBoot

JSFandtheCloud

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSFHistoricalPerspecKve

200495%

5%

CoreJSF

Community

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSFHistoricalPerspecKve

200880%

20%CoreJSF

Community

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSFHistoricalPerspecKve

200960%

40% CoreJSF

Community

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSFHistoricalPerspecKve

201040%

60%

CoreJSF

Community

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSFHistoricalPerspecKve

201325%

75%

CoreJSF

Community

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSFHistoricalPerspecKve

2014hpp://bit.ly/JsfFtw2015Poll:JSFandSpringMVCKe

20%

80%

CoreJSF

Community

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSFHistoricalPerspecKve

20166%

94%

CoreJSF

Community

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSFHistoricalPerspecKve•  JSR127

– JSF1.011March2004– JSF1.127May2004

•  JSR252– JSF1.211May2006– JSF1.2MaintenanceRelease119December2006

– JSF1.2MaintenanceRelease213June2008

– JSF1.2MaintenanceRelease325August2008

•  JSR314-  JSF2.01July2009-  JSF2.116July2010-  JSF2.1MaintenanceRelease2

22November2010•  JSR344

•  JSF2.2Started14April2011•  FinalJune2013hpp://bit.ly/JavaEE7WrapsUp

•  JSR372•  JSF2.3Started22September2014

•  EarlyDrajReviewOctober2015•  ProposedFinalDrajJuly2017

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3BigTicketNewFeatures

• BeperCDIIntegraKon– Waymorethingsareinjectable– Finallymarkinglegacymanagedbeansasdeprecated

• WebsocketIntegraKon• AjaxMethodInvocaKon• ClassLevelBeanValidaKon•  JavaTimesupport• UIDataandUIRepeatimprovements

h.p://arjan-Ejms.omnifaces.org/p/jsf-23.html

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3BigTicketNewFeaturesh.p://arjan-Ejms.omnifaces.org/p/jsf-23.html

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3BigTicketNewFeaturesh.p://arjan-Ejms.omnifaces.org/p/jsf-23.html

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3BigTicketNewFeaturesWebSocketIntegraEon

<!DOCTYPEhtml>

<htmllang="en"xmlns="http://www.w3.org/1999/xhtml"xmlns:f="http://xmlns.jcp.org/jsf/core"xmlns:h="http://xmlns.jcp.org/jsf/html"><h:body><h:formid="form"><h:commandButtonid="button"value="push"action="#{pushBean.send}"><f:ajax/></h:commandButton></h:form>

<f:websocketchannel="push"onmessage="function(message{document.getElementById('form:button').value=message;}"/><divid="user"/><f:websocketchannel="user"user="user"onmessage="function(message){document.getElementById('user').innerHTML=message;}"/><divid="view"/><f:websocketchannel="view"scope="view"onmessage="function(message){document.getElementById('view').innerHTML=message;}"/</h:body></html>

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3BigTicketNewFeaturesWebSocketIntegraEon

@ModelpublicclassPushBean{@Inject@PushprivatePushContextpush;@Inject@PushprivatePushContextuser;@Inject@PushprivatePushContextview;publicvoidsend(){push.send("pushed!");user.send("pushed!","user");view.send("pushed!");}}

importjavax.websocket.Endpoint;importjavax.websocket.EndpointConfig;importjavax.websocket.Session;publicclassFakeEndpointextendsEndpoint{@OverridepublicvoidonOpen(Sessionsession,EndpointConfigconfig){//https://java.net/jira/browse/WEBSOCKET_SPEC-240}}

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3BigTicketNewFeatures

<!DOCTYPEhtml>

<htmllang="en"xmlns="http://www.w3.org/1999/xhtml"xmlns:f="http://xmlns.jcp.org/jsf/core"xmlns:h="http://xmlns.jcp.org/jsf/html"><h:body>

<h:form>

<h:commandScriptname="foo"autorun="true"action="#{spec613.setResult('foo')}"render=":result"/>

<h:commandScriptname="bar"action="#{spec613.setResult('bar')}"render=":result"/>

</h:form>

<h:outputTextid="result"value="#{spec613.result}"/>

</h:body>

</html>

AjaxMethodInvocaEon

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3BigTicketNewFeatures

@Named

@RequestScoped

public class SomeBean {

@Inject

private FacesContext context;

public void eval() {

context.getPartialViewContext()

.getEvalScripts()

.add("alert('After response')");

}

}

GetEvalScripts

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3BigTicketNewFeatures

<h:formprependId="false"id="form"><h:panelGridcolumns="2"><h:outputTextvalue="Password"/><h:inputSecretid="password1"value="#{backingBean.password1}"/><h:outputTextvalue="Passwordagain"/><h:inputSecretid="password2"value="#{backingBean.password2}"/><h:commandButtonid="submit"value="Submit"/></h:panelGrid><h:messagesid="err"/><f:validateWholeBeanvalue="#{backingBean}"copierType="SerializationCopier"validationGroups="com.sun.faces.test.javaee8.validateWholeBean.PasswordValidationGroup"/></h:form>

ClassLevelBeanValidaEon

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3BigTicketNewFeatures

@Named@RequestScoped@Password(groups=PasswordValidationGroup.class)publicclassBackingBeanimplementsSerializable{privateStringpassword1;privateStringpassword2;

//...}}

@Constraint(validatedBy={PasswordValidator.class})@Documented@Target(TYPE)@Retention(RUNTIME)public@interfacePassword{Stringmessage()default"Passwordfieldsmustmatch";Class<?>[]groups()default{};Class<?extendsPayload>[]payload()default{};

}

ClassLevelBeanValidaEon

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3BigTicketNewFeatures

publicclassPasswordValidatorimplementsConstraintValidator<Password,BackingBean>{

@Overridepublicvoidinitialize(PasswordconstraintAnnotation){}@OverridepublicbooleanisValid(BackingBeanvalue,ConstraintValidatorContextcontext){booleanresult;result=value.getPassword1().equals(value.getPassword2());returnresult;}

}

ClassLevelBeanValidaEon

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3BigTicketNewFeaturesJavaDateTimeSupport

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3BigTicketNewFeatures

•  SupportsIterable

UIDataandUIRepeatImprovements

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

MulK-TenancyinJSF2.2

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

Resource Library Contracts Faces Flows

• AllowcomposingaJSFappasacollecKonofmodules– FacesFlowsmodularizebehavior– ResourceLibraryContractsmodularizeappearance

• Welldefinedcontractforeach

Modularity and Multi-tenant capability

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

ResourceLibraryContractsandFacesFlows

•  TwonewconceptsinJSF2.2– ResourceLibraryContract– FacesFlows

What’sgoingonhere?

BuildsonfaceletsconceptsBuildsonnavigaKonconcepts

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

AddiKonalPotenKalAreasforInvesKgaKonForJavaEE8

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

AddiKonalPotenKalJavaEE8FocusAreas• Config

– Externalizedconfig•  faces-config.xml•  web.xml

• HealthCheck– Ensureserverisupandcancontactdownstreamservices

•  Security– DoingOAuthandTime-BasedOne-TimePasswordarecurrentlytoohard.Itwouldbenicetomakethiseasier

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

AddiKonalPotenKalJavaEE8FocusAreasCircuitBreaker

Closed Open

HalfOpen

failcountreached

ResetKmeout

failsuccess

successorfail

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

SummaryandCurrentStatus•  JSR-372formedon22September2014•  EarlyDrajReviewJavaOne2015• WorkingtowardPublicReview

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

OtherSessionsofInterest•  JavaEEApplicaKonsonOracleJavaCloudService[CON3069]Thursday22September,1:00,Parc55PowellI/II

• BreakingAparttheMonolithwithMicroservices[CON3127]Thursday22September,2:30,Parc55CyrilMagninI

• ConfigureOnce,RunEverywherewithApacheTamaya[CON1141]Thursday22September,16:00Parc55Mission

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

NextSteps

•  Takethesurvey– hpp://glassfish.org/survey

•  Sendtechnicalcommentsto– [email protected]

•  JointheJCP–cometoHackergardeninJavaHub– hpps://jcp.org/en/parKcipaKon/membership_drive

•  JoinortracktheJSRsastheyprogress– hpps://java.net/projects/javaee-spec/pages/SpecificaKons

• Adopt-a-JSR– hpps://community.oracle.com/community/java/jcp/adopt-a-jsr

Giveusyourfeedback

39

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

WheretoLearnMoreatJavaOne

40

SessionNumber SessionTitle Day/Time

CON1558 What'sNewintheJavaAPIforJSONBinding Monday5:30p.m.

BOF7984 JavaEEfortheCloud Monday7:00p.m.

CON4022 CDI2.0IsComing Tuesday11:00a.m.

CON7983 JAX-RS2.1forJavaEE8 Tuesday12:30p.m.

CON8292 PortableCloudApplicaKonswithJavaEE Tuesday2:30p.m.

CON7980 Servlet4.0:StatusUpdateandHTTP/2 Tuesday4:00p.m.

CON7978 SecurityforJavaEE8andtheCloud Tuesday5:30p.m.

CON7979 ConfiguraKonforJavaEE8andtheCloud Wednesday11:30a.m.

CON7977 JavaEENext–HTTP/2andREST Wednesday1:00p.m.

CON6077 TheIllusionofStatelessness Wednesday4:30p.m.

CON7981 JSF2.3 Thursday11:30a.m.

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|

SafeHarborStatementTheprecedingisintendedtooutlineourgeneralproductdirecKon.ItisintendedforinformaKonpurposesonly,andmaynotbeincorporatedintoanycontract.Itisnotacommitmenttodeliveranymaterial,code,orfuncKonality,andshouldnotberelieduponinmakingpurchasingdecisions.Thedevelopment,release,andKmingofanyfeaturesorfuncKonalitydescribedforOracle’sproductsremainsatthesolediscreKonofOracle.

Copyright©2016,Oracleand/oritsaffiliates.Allrightsreserved.|