java ee 8 - february 2017 update

65
Copyright © 2017, Oracle and/or its affiliates. All rights reserved. | Java EE 8 – What’s coming? February 2017 David Delabassee @delabassee Oracle

Upload: david-delabassee

Post on 14-Feb-2017

1.425 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JavaEE8–What’scoming?February2017

DavidDelabassee@delabasseeOracle

Page 2: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

SafeHarborStatementThefollowingisintendedtooutlineourgeneralproductdirecPon.ItisintendedforinformaPonpurposesonly,andmaynotbeincorporatedintoanycontract.Itisnotacommitmenttodeliveranymaterial,code,orfuncPonality,andshouldnotberelieduponinmakingpurchasingdecisions.Thedevelopment,release,andPmingofanyfeaturesorfuncPonalitydescribedforOracle’sproductsremainsatthesolediscrePonofOracle.

2

Page 3: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JavaEEAPIs-BackboneofLeadingOpenSourceProjects

3

JavaEEContainers

Microservices WebContainers

WebFrameworks

PaaSREST

Page 4: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 4

The reports of my death

aregreatlyexaggerated.JavaEE

Page 5: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 5

Lifeisnotaquietriver...“CharlesRegimbeau

Page 6: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 6

CommunitySurvey

h`ps://blogs.oracle.com/theaquarium/entry/java_ee_8_community_survey2

Page 7: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JavaEE8

7

Page 8: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JAX-RS2.1

• ReacPveClientAPI•  Server-sentevents• Non-blockingI/Oinproviders(filters,interceptors…)• HypermediaAPIenhancements•  IntegraPonwithotherJSRsandframeworks

8

Page 9: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 9

JAX-RS2.0

Clientclient=ClientBuilder.newClient();

Stringname=client.target("http://example.com/api/hello").request(MediaType.TEXT_PLAIN).get(String.class);//...

client.close();

Page 10: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 10

JAX-RS2.0

//http://example.com/api/read/doe?dpt=1

WebTargetmyResource=client.target("http://example.com/api/read").path("{user}").resolveTemplate("user","joe").queryParam("dpt","1");

Responseresponse=myResource.request(...).get();

//...

Page 11: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 11

JAX-RS2.0

Clientclient=ClientBuilder.newClient();

WebTargetmyResource=client.target("http://example.com/api/read");

Future<String>response=myResource.request(MediaType.TEXT_PLAIN).async().get(String.class);

//...

Page 12: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 12

JAX-RS2.0

WebTargetmyResource=client.target("http://example.com/api/read");

Future<Customer>fCustomer=myResource.request(MediaType.TEXT_PLAIN).async().get(newInvocationCallback<Customer>(){

@Overridepublicvoidcompleted(Customercustomer){//workonthecustomer}

@Overridepublicvoidfailed(Throwablethrowable){//Oops!}

});

Page 13: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 13

JAX-RS2.0

Page 14: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 14

JAX-RS2.0destination.path("recommended").request().header("Rx-User","Async").async().get(newInvocationCallback<List<Destination>>(){@Overridepublicvoidcompleted(finalList<Destination>recommended){finalCountDownLatchinnerLatch=newCountDownLatch(recommended.size());finalMap<String,Forecast>forecasts=Collections.synchronizedMap(newHashMap<>());for(finalDestinationdest:recommended){forecast.resolveTemplate("dest",dest.getDestination()).request().async().get(newInvocationCallback<Forecast>(){@Overridepublicvoidcompleted(finalForecastforecast){forecasts.put(dest.getDestination(),forecast);innerLatch.countDown();}

Page 15: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 15

JAX-RS2.0…@Overridepublicvoidfailed(finalThrowablethrowable){innerLatch.countDown();}});}

try{if(!innerLatch.await(10,TimeUnit.SECONDS)){//timeout}}catch(finalInterruptedExceptione){//Ooops,interrupted!}

//Continuewithprocessing…}

@Overridepublicvoidfailed(finalThrowablethrowable){//Recommendationerror}});

Page 16: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 16

JAX-RS2.1

//JAX-RS2.1CompletionStage<Response>csResponse=ClientBuilder.newClient().target("http://example.com/api").request().rx().get();

Future<Response>fResponse=ClientBuilder.newClient().target("http://example.com/api").request().async().get();

Responseresponse=ClientBuilder.newClient().target("http://example.com/api").request().get();

Page 17: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 17

JAX-RS2.1

CompletionStage<String>cs1=client.target("http://partner.us/api").request().rx().get(String.class);CompletionStage<String>cs2=client.target("http://supplier.be/api").request().rx().get(String.class);//getbothresponsesinaList(whentheyareavailable)CompletionStage<List<String>>listCompletionStage=cs1.thenCombine(cs2,List::of);

Page 18: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JAX-RS2.1

•  Server-SentEvents– Persistent,one-waycommunicaPonchannel– Textprotocol,specialmediatype"text/event-stream"– ServercansendmulPplemessages(events)toaclient– Cancontainid,name,commentretryinterval– Supportedinallmodernbrowsers

18

Page 19: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JAX-RS2.1

19

SSE–Serversideclasses

• OutboundSseEvent– OutboundSSErepresentaPon

•  SseEventOutputextendsFlow.Subscriber<OutboundSseEvent>– OutboundSSEstream– ApplicaPoncanwriteeventstoit,checkitsstateandcloseit

•  SseBroadcasterextendsFlow.Publisher<OutboundSseEvent>– UsedtoworkwithmulPpleSseEventOutputinstances

•  SseContext– Injectablefactoryfortheaboveclasses

Page 20: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JAX-RS2.1

20

SSE–Clientsideclasses

•  InboundSseEvent– InboundServerSentEvent– SimilartoOutboundSseEvent

•  SseEventInput– Low-levelwayforaccessingServerSentEventsstream

•  SseEventSourceextendsFlow.Publisher<InboundSseEvent>– UsedforsubscribingtoServerSentEventstreams

Page 21: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 21

JAX-RS2.1//server-sideinit@InjectSseContextsseContext;

SseBroadcastersseBroadcaster=sseContext.newBroadcaster();

sseBroadcaster.onException((o,e)->{e.printStackTrace();});

sseBroadcaster.onClose(...);

@GET@Path("sse")@Produces(MediaTypes.SERVER_SENT_EVENTS)publicSseEventOutputitemEvents(...){SseEventOutputeventOutput=sseContext.newOutput();//...returneventOutput;}

Page 22: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 22

JAX-RS2.1

//...finalOutboundSseEvent=osesseContext.newEvent().id(...).data(...).comment(...).build();

eventOutput.write(ose);

sseBroadcaster.subscribe(eventOutput);sseBroadcaster.broadcast(ose);

Page 23: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 23

JAX-RS2.1privatefinalWebTargettarget=ClientBuilder.newClient().target("http://host/sse");privateSseEventSourceeventSource;publicvoidconnect(Consumer<String>dataConsumer){eventSource=SseEventSource.target(target).open(es->es.subscribe(newFlow.Subscriber<InboundSseEvent>(){

@OverridepublicvoidonNext(finalInboundSseEventitem){dataConsumer.accept(item.readData());}

//onSubscribe,onError,onComplete

}));}

//...

eventSource.close();

Page 24: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JSON-P1.1

• UpdateJSON-Pspectostaycurrentwithemergingstandards– RFC7159-TheJavaScriptObjectNotaPon(JSON)DataInterchangeFormat– RFC6901–JSONPointer– RFC6902–JSONPatch– RFC7396–JSONMergePatch

• AddediPng/transformaPonoperaPonstoJsonObjectandJsonArray• AddJSONCollectors• BigJSONsupport

24

Page 25: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JSON-P1.1

•  JSON-Pointer–IETFRFC6901•  StringsyntaxforreferencingaJSONvalue

E.g."/0/user/address"

25

Page 26: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JSON-P1.1

26

[{"name":"Duke","gender":"M","phones":{"home":"555-123-456","mobile":"555-321-456"}},{"name":"Jane","gender":"F","phones":{"mobile":"555-999-111"}}]

JsonArraycontacts=…JsonPointerpointer=newJsonPointer("/0/name");JsonValuevalue=pointer.getValue(contacts);

Page 27: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JSON-P1.1

•  JSON-Pointer–IETFRFC6901•  StringsyntaxforreferencingaJSONvalue– E.g."/0/user/address”

• Methods– getValue(),add(),replace(),remove()

27

JsonPointerpointer=newJsonPointer("/0/name");JsonArrayresult=pointer.replace(contacts,Json.createValue("Joe"));

Page 28: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JSON-P1.1

•  JSON-Patch–IETFRFC6902• PatchisaJSONdocument– Arrayofobjects/operaPonsformodifyingaJSONdocument– Add,replace,remove,move,copy,test

28

Page 29: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 29

JSON-P1.1

[{"op":"replace","path":"/0/phones/mobile","value":"650-111-2222"},{"op":"remove","path":"/1"}]

[{"name":"Duke","gender":"M","phones":{"home":"650-123-4567","mobile":"650-234-5678"}},{"name":"Jane","gender":"F","phones":{"mobile":"707-555-9999“}}]

Page 30: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 30

JSON-P1.1

[{"op":"replace","path":"/0/phones/mobile","value":"650-111-2222"},{"op":"remove","path":"/1"}]

[{"name":"Duke","gender":"M","phones":{"home":"650-123-4567","mobile":"650-234-5678"}},{"name":"Jane","gender":"F","phones":{"mobile":"707-555-9999“}}]

Page 31: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 31

JSON-P1.1

[{"op":"replace","path":"/0/phones/mobile","value":"650-111-2222"},{"op":"remove","path":"/1"}]

[{"name":"Duke","gender":"M","phones":{"home":"650-123-4567","mobile":"650-111-2222"}},{"name":"Jane","gender":"F","phones":{"mobile":"707-555-9999“}}]

Page 32: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 32

JSON-P1.1

[{"op":"replace","path":"/0/phones/mobile","value":"650-111-2222"},{"op":"remove","path":"/1"}]

[{"name":"Duke","gender":"M","phones":{"home":"650-123-4567","mobile":"650-111-2222"}},{"name":"Jane","gender":"F","phones":{"mobile":"707-555-9999“}}]

Page 33: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 33

JSON-P1.1

[{"op":"replace","path":"/0/phones/mobile","value":"650-111-2222"},{"op":"remove","path":"/1"}]

[{"name":"Duke","gender":"M","phones":{"home":"650-123-4567","mobile":"650-111-2222"}},{"name":"Jane","gender":"F","phones":{"mobile":"707-555-9999“}}]

Page 34: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 34

JSON-P1.1

[{"op":"replace","path":"/0/phones/mobile","value":"650-111-2222"},{"op":"remove","path":"/1"}]

[{"name":"Duke","gender":"M","phones":{"home":"650-123-4567","mobile":"650-111-2222"}}]

Page 35: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 35

JSON-P1.1

JsonArraytarget=…;JsonArraypatch=…;

JsonPatchjsonPatch=newJsonPatch(patch);

JsonArrayresult=jsonPatch.apply(target);

JsonPatchBuilderbuilder=newJsonPatchBuilder();JsonArrayresult=builder.add("/Joe/phones/office","1234-567").remove("/Amy/age").apply(target);

Page 36: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 36

JSON-P1.1

OrignalPatchResult

{"a":"b"}{"a":"c"}{"a":"c"}

{"a":"b"}{"b":"c"}{"a":"b","b":"c"}

{"a":"b"}{"a":null}{}

{"a":"b",{"a":null}{"b":"c"}"b":"c"}

•  JSON-MergePatch–IETFRFC7386

Page 37: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 37

JSON-P1.1

•  JSON-MergePatch–IETFRFC7386

JsonObjectcontact=…;//ThetargettobepatchedJsonObjectpatch=…;JsonValueoutput=JsonMergePatch.mergePatch(target,patch);

Page 38: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 38

JSON-P1.1

•  JSON-Patch&JSON-MergePatchDiff

JsonValueoutput=JsonMergePatch.diff(original,target);JsonArraydiff=JsonPatch.diff(original,target);

Page 39: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 39

JSON-P1.1

JsonArraycars=...;

JsonArrayaudis=cars.getValuesAs(JsonObject.class).stream().filter(x->"Audi".equals(x.getString("brand"))).map(x->(x.getString("serial"))).collect(Collector.of(()->Json.createArrayBuilder(),(builder,value)->builder.add(value),(builder1,builder2)->builder1.add(builder2),builder->builder.build()));

Page 40: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 40

JSON-P1.1

JsonArraycars=...;

JsonArrayaudis=cars.getValuesAs(JsonObject.class).stream().filter(x->"Audi".equals(x.getString("brand"))).map(x->(x.getString("serial")).collect(JsonCollectors.toJsonArray());

Page 41: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JSON-B1.0

•  JAXB-likeAPItomarshal/unmarshalJavaobjectsto/fromJSONdocuments• DefaultmappingbetweenclassesandJSON• CustomizaPonAPIs– AnnotaPon(@JsonbProperty,@JsonbNillable)– RunPmeconfiguraPonbuilder

• Allowstoswapproviders• NaturalfollowontoJSON-P–closestheJSONsupportgap

41

Page 42: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 42

JSON-B1.0

[{"brand":"Apple","model":"iPhone7","stock":1},{"brand":"Samsung","model":"GalaxyNote7","stock":666}]

Phonephone1=newPhone();phone1.setBrand("Apple");phone1.setModel("iPhone7");phone1.setStock(1);…List<Phone>inventory=newArrayList<>();inventory.add(phone1);inventory.add(phone2);Jsonbjsonb=JsonBuilder.create();Stringstock=jsonb.toJson(inventory);

Page 43: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 43

publicclassCustomer{privateintid;

@JsonbProperty("name")privateStringfirstName;

}publicclassCustomer{publicintid;publicStringfirstName;

@JsonbProperty("name")privateStringgetFirstName(){returnfirstName;}

}

JSON-B1.0CustomizaPons

Page 44: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JSON-B1.0CustomizaPons

• Namingstrategies–  IDENTITY:myProp– LOWER_CASE_WITH_DASHES:my-prop

– LOWER_CASE_WITH_UNDERSCORES:my_prop– UPPER_CAMEL_CASE:MyProp– UPPER_CAMEL_CASE_WITH_SPACES:MyProp

– CASE_INSENSITIVE:myprop– OracustomimplementaPon

44

• Propertyordering– Any,Lexicographical,Reverse

• BinaryDataStrategies– Base64,Base64URL,Byte

Page 45: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JSON-B1.0CustomizaPons

• Propertynaming• Propertyordering• Propertytoignore• Nullhandling• CustominstanPaPon

45

•  Fieldsvisibility• Date/NumberFormats• BinaryEncoding• Adapters•  ...

Page 46: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 46

JSON-B1.0CustomizaPons

Jsonbjsonb=JsonbBuilder.create();//Ordering,namingstrategy,encoding,Locale,…

JsonbConfigconfig=newJsonbConfig().withFormatting(true).withAdapters(newCarAdapter());

Jsonbjsonb=JsonbBuilder.create(config);Jsonbjsonb=JsonBuilder.newBuilder("myProvider");

Page 47: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

Servlet4.0

•  SupportforHTTP/2– Request/responsemulPplexing– Serverpush– UpgradefromHTTP1.1

• CompaPbilitywithlatestHTTP1.1RFCs•  Smallercommunity-requestedimprovements(JIRAissues)

47

Page 48: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

HTTP/2

• BinaryFramingoversingleTCPconnecPon• Request/ResponsemulPplexing•  StreamPrioriPzaPon•  ServerPush• UpgradefromHTTP1.1• HeaderCompression• PreserveHTTPsemanPc•  FlowControl

48

Page 49: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

Servlet4.0

49

PushBuilderbuilder=baseRequest.getPushBuilder();

builder.addHeader("X-Pusher",…);

builder.path(aResource).etag(associated._etag).lastModified(associated._lastModified).push();

Page 50: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JSF2.3

• Be`erCDIIntegraPon– Waymorethingsareinjectable– Finallymarkinglegacymanagedbeansasdeprecated

•  JavaTimesupport• WebSocketIntegraPon• AjaxMethodInvocaPon• ClassLevelBeanValidaPon• UIDataandUIRepeatimprovements

50

Page 51: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

CDI2.0

• DefinebehaviorofCDIoutsideofaJavaEEcontainer• APItobootstrapaCDIcontainerinJavaSE•  Specsplitinto3parts:– CDICore– CDIforJavaSE– CDIforJavaEE

• ApplyInterceptoronProducer• Observersordering• Asynchronousevents

51

Page 52: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

CDI2.0

52

@InjectEvent<PaymentEvent>debitEvent;//producerdebitEvent.fire(somePayload);

//consumerpublicvoidanObesrver(@ObservesPayloadp){…}

Page 53: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

CDI2.0

53

//consumerApublicvoidanObesrver(@ObservesPayloadp){…}//consumerBpublicvoidanotherObesrver(@ObservesPayloadp){…}

Page 54: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

CDI2.0

54

//consumerApublicvoidanObesrver(@Observes@Priority(10)Payloadp){…}//consumerBpublicvoidanotherObesrver(@Observes@Priority(20)Payloadp){…}

Page 55: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

CDI2.0

55

@InjectEvent<PaymentEvent>debitEvent;//asyncproducerdebitEvent.fireAsync(somePayload);

//asyncconsumerpublicvoidanObesrver(@ObservesAsyncPayloadp){…}

Page 56: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

BeanValidaPon2.0

•  EmbraceJavaSE8– SupportfornewDate/TimeAPI– ConstraintsappliedtocollecPonelements– OpPonalwrappers– RepeatableannotaPons

•  Introducenewconstraints– E.g.@NotEmpty,@NotBlank

• AddiPonalfeaturesrequestedfromcommunity

56

Page 57: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

BeanValidaPon2.0

57

List<@NotNull @Email String> emails;

String @NotNull @Email[] emails;

Map<@Valid Customer, @Valid Address> primaryAddressByCustomer;

Optional<@Past LocalDate> getRegistrationDate();

@ZipCode(countryCode = "fr", groups = Default.class, message = "unvalid zip") !@ZipCode(countryCode = "fr", groups = SuperUser.class, message = "zip nok…") !private String zipCode;

Page 58: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

SecurityAPIforJavaEE

•  IdenPtyStore– StandardizeapplicaPon-accessibleIdenPtyStore – ValidateCaller'scredenPalsandaccessingrelatedidenPtya`ributes•  UsedbyanauthenPcaPonmechanism(e.g.JASPIC)

• AuthenPcaPonMechanism– SimplifyapplicaPon-accessibleauthenPcaPonmechanisms

•  SecurityContext– Standardizeapla{orm-wideSecurityContext •  ProgrammaPcaccesspoint

58

Page 59: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

Wrap-up

59

Page 60: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JavaEE8

60

Connector JAXBJSPDebugging

ManagedBeansJSPConcurrencyEE Interceptors JAX-WS WebSocket

BeanValidaPon JASPIC ServletJMS JTADeployment

Batch JACCDependencyInjecPon JAXR JSTL Management

CDI EJB JAX-RPC WebServicesJSF JPA

CommonAnnotaPons EL JAX-RS WebServices

MetadataJavaMail

CDI

JSON-B Security

BeanValidaPon

JSF

JAX-RS JSON-P

Servlet

JSP

(*)MRsReleasesnotlisted

Page 61: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 61

JavaEE8-StatusSpecificaKons EarlyDraM PublicDraMCDI2.0–JSR365 OngoingJavaEE8–JSR366 2nddra}JSON-B1.0–JSR367 Done!Servlet4.0–JSR369 OngoingJAX-RS2.1–JSR370 ExpectedQ1 ExpectedQ2JSF2.3–JSR372 OngoingJSON-P1.1–JSR374 OngoingSecurity1.0–JSR375 ExpectedQ1BeansValidaPon2.0–JSR380 ExpectedQ1

MVC–JSR371:SpecLeadtransferinprogress

Page 62: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.|

JavaEE8-Summary• Workinprogress– H22017FinalRelease

• Contribute!– AdoptAJSR•  h`ps://community.oracle.com/community/java/jcp/adopt-a-jsr

• OpenSourceReferenceImplementaPons– GlassFish5,Jersey…

• h`p://glassfish.org

62

Page 63: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 63

SomePmesyouhavetotakeastepbacktomoveforward.“

ErikaTaylor

Page 64: Java EE 8 - February 2017 update

Copyright©2017,Oracleand/oritsaffiliates.Allrightsreserved.| 64

Tack!

Page 65: Java EE 8 - February 2017 update