80
HKJUG December 2015 David Delabassee @delabassee Oracle Copyright © 2015, Oracle and/or its affiliates. All rights reserved. What's Coming in Java EE 8 1

Java EE 8 - Work in progress

Embed Size (px)

Citation preview

Page 1: Java EE 8 - Work in progress

HKJUG&December&2015&

David&Delabassee&@delabassee&Oracle

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.**

What's*Coming*in*Java*EE*8

1

Page 2: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Page 3: Java EE 8 - Work in progress

Safe*Harbor*Statement

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.

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.*

Page 4: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Agenda

How*did*we*get*here?*

What*do*we*want*to*do?*

How*can*you*get*involved?

Preview&of&Java&EE&8

Page 5: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Industry*Trends*We're*Seeing

Clou

d

Mobile

HTTP/2SECURITY

Reactive&Programming

User*Experience

Page 6: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

CommunityQPrioritized*Features

7

http://glassfish.org/survey

Page 7: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Java*EE*8*Themes

• HTML5*/*Web*Tier*Enhancements*

• Ease*of*Development*

• Infrastructure*for*running*in*the*Cloud

8

Page 8: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Java*EE*8*Themes

• HTML5*/*Web*Tier*Enhancements*

• Ease*of*Development*

• Infrastructure*for*running*in*the*Cloud

8

Page 9: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

HTML5*Support*/*Web*Tier*Enhancements

• JSON*Binding*• JSON*Processing*enhancements*

• ServerQsent*Events*• ActionQbased*MVC*

• HTTP/2*support

9

Page 10: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1Java&API&for&JSON&Processing

• Keep*JSONQP*spec*upQtoQdate*• Track*new*standards*• Add*editing*operations*to*JsonObject*and*JsonArray*• Java*SE*8*• JSON*Big*Data

10

Page 11: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1

• String*syntax*for*referencing*a*JSON*value** "/0/phone/mobile"

JSONMPointer&–&IETF&RFC&6901

11

Page 12: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1JsonArray)contacts)=)…)JsonPointer)pointer)=)new)JsonPointer("/0/name");)JsonValue)value)=)pointer.getValue(contacts);)

[*){*))))"name":"Duke",*))))"gender":"M",*))))"phones":{*)))))))"home":"650K123K4567",*)))))))"mobile":"650K234K5678"}},*)){*))))"name":"Jane",)))))"gender":"F",)))))"phones":{*)))))))"mobile":"707K555K9999"}}*]*

))12

Page 13: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1

• String*syntax*for*referencing*a*JSON*value** “/0/name"*

• Methods*

– getValue()*

– JSON*operations:*add(),*replace(),*remove()

JSONMPointer&–&IETF&RFC&6901

)JsonPointer)pointer)=)new)JsonPointer("/0/name");))JsonArray)result)=)pointer.replace(contacts,)Json.createValue("Alex"));

13

Page 14: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1

• Patch*is*a*JSON*document*

– Array*of*objects*/*operations*for*modifying*a*JSON*document*

– add,*replace,*remove,*move,*copy,*test

JSONMPatch&–&IETF&RFC&6902

[)))){"op":"replace","path":"/0/phones/mobile","value":"650K111K222"},)))){"op":"remove","path":"/1"})]

14

Page 15: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1[)){)))"op":"replace",)))"path":"/0/phones/mobile",)))"value":"650211122222"},)){)))"op":"remove",)))"path":"/1"})]

[*){*))))"name":"Duke",*))))"gender":"M",*))))"phones":{*)))))))"home":"650K123K4567",*)))))))"mobile":"650211122222"}},*)){*))))"name":"Jane",)))))"gender":"F",)))))"phones":{*)))))))"mobile":"707K555K9999"}}*]*

))

16

Page 16: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1[)){)))"op":"replace",)))"path":"/0/phones/mobile",)))"value":"650K111K2222"},)){)))"op":"remove",)))"path":"/1"})]

[*){*))))"name":"Duke",*))))"gender":"M",*))))"phones":{*)))))))"home":"650K123K4567",*)))))))"mobile":"650K111K2222"}}*])))

17

Page 17: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

)JsonArray)target)=)…;))JsonArray)patch)=)…;))))JsonPatch)jsonPatch)=)new)JsonPatch(patch);))JsonArray)result)=)jsonPatch.apply(target);

JSONQP*1.1

)JsonPatchBuilder)builder)=)new)JsonPatchBuilder();))JsonArray)result)=)builder.add("/Joe/phones/office",)"1234K567"))))))))))))))))))))))))))))).remove("/Amy/age"))))))))))))))))))))))))))))).apply(contacts);

18

Page 18: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1JSONMMerge&Patch&–&IETF&RFC&7386

Orignal****************Patch*******************Result&

{"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"}*

{*}*************************{"a":*********************{"a":*

*******************************{"bb":******************{"bb":*

***********************************{"ccc":****************{}}}*

***************************************null}}}*

19

Page 19: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1{))))))"title":)"Hello!",))))))"author":){)))))))))))))"familyName":)null)))))))},)))))))"tags":)[;"example";],)))))))"phoneNumber":)"+012123245627890"))})

{)))))"title":)"Goodbye!",)))))"author":){)))))))))"givenName":)"John",)))))))))"familyName":)"Doe"))))))},))))))"tags":)[)"example",)"sample")],))))))"content":)"This)will)be)unchanged"))})

))

{))))))"title":)"Hello!",))))))"author":){)))))))))))))"givenName":)"John")))))))},)))))))"tags":)[)"example")],)))))))"content":)"This)will)be)unchanged",)))))))"phoneNumber":)"+01K123K456K7890"))})

))

JSONMMerge&Patch&–&IETF&RFC&7386

20

Page 20: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

)JsonObject)contact)=)…;)//)The)target)to)be)patched))JsonObject)patch)=)…;))))JsonValue)output)=)JsonMergePatch.mergePatch(target,)patch);

JSONQP*1.1JSONMMerge&Patch&–&IETF&RFC&7386

21

Page 21: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1

• Reverse*operation*– Given*two*objects*returns*the*patch*to*apply*(diff)*

JSONMPatch&&&JSONMMerge&Patch&Diff

JsonValue)output)=)JsonMergePatch.diff(original,)target);)JsonArray)diff)=)JsonPatch.diff(original,)target);

22

Page 22: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1JSON&Query&using&Streams

JsonArray)cars)=)...;)List<String>)audis)=)cars.getValuesAs(JsonObject.class).stream())))))))))))))))))))))))))).filter(xK>"Audi".equals(x.getString("brand"))))))))))))))))))))))))))))).map(xK>(x.getString("serial")))))))))))))))))))))))))))).collect(Collectors.toList());

23

Page 23: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1JSON&Query&using&Streams

JsonArray)cars)=)...;*JsonArray)audis)=)cars.getValuesAs(JsonObject.class).stream()******************************************************.filter(xK>"Audi".equals(x.getString("brand")))******************************************************.map(xK>(x.getString("serial"))******************************************************.collect(JsonCollectors.toJsonArray());

24

Page 24: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQP*1.1

• Keep*JSONQP*spec*upQtoQdate*• Track*new*standards*• Add*editing*operations*to*JsonObject*and*JsonArray*• Java*SE*8*• JSON*Big*Data

JSR&374

25

Page 25: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQB

• API*to*marshal/unmarshal*Java*objects*to/from*JSON*

– Similar*to*JAXB*runtime*API*in*XML*world*

• Default*mapping*of*classes*to*JSON*

– Annotations*to*customize*the*default*mappings*

– JsonProperty,*JsonTransient,*JsonNillable,*JsonValue,*…

Java&API&for&JSON&Binding

26

Page 26: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQB

• Draw*from*best*practices*of*existing*JSON*binding*implementations*

– Jackson,*Genson,*EclipseLink&MOXy,*Fleece,*JSONQlib,*Gson,*Flexjson,*JsonQio,*JSONiJ,*Johnzon,*Xstream,*etc.*

• Switch*JSON*binding*providers*• Implementations*compete*on*common*ground

Standard&API

27

Page 27: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JSONQB// from default JsonbBuilder instance of the default JsonbProviderJsonb jsonb = JsonbBuilder.create();

JsonbProvider myProvider = JsonbProvider.provider("foo.bar.ProviderImpl");Jsonb jsonb = JsonbBuilder.newBuilder(myProvider);

// UnMarshallBook book = jsonb.fromJson(new File("myBook.json"), Book.class);

// MarshallString result = jsonb.toJson(myObject);jsonb.toJson(myObject, new File(“foo.json”));jsonb.toJson(myObject, new PrintWriter(System.out));

28

Page 28: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JAXQRS*2.1

29

• Improving*integration*with*CDI*

• JSONQB*Integration*• NIO*support*in*providers*(filters,*interceptors,*…)*• Building*upon*the*hypermedia*API*

• JAXQRS*resource*classes*as*MVC*controllers*

• Reactive*API*• ServerQsent*Events,*etc.

Page 29: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JAXQRS*2.1

…*CompletionStage<List<String>>)cs)=))))))))))))))))))client.target("forecast/{destination}"))))))))))))))))))))))))).resolveTemplate("destination",)"mars"))))))))))))))))))))))))).request())))))))))))))))))))))))).header("RxKUser",)"Java8"))))))))))))))))))))))))).rx())//)CompletionStageRxInvoker)))))))))))))))))))))))).get(new)GenericType<List<String>>()){))))))))))))))))))))))))});)

cs.thenAccept(l)K>)System.out.println(l));

Reactive&Client&API

30

Page 30: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

• Servlet,*WebSocket,*JAXQRS*or*standalone*API?*

• JAXQRS*deemed*most*natural*fit*

– Streaming*HTTP*resources*already*supported*

– Small*extension*

• Server*API:*new*media*type;*EventOutput**

• Client*API:*new*handler*for*server*side*events*

– Convenience*of*mixing*with*other*HTTP*operations;*new*media*type*

– Jersey*already*supports*SSE

31

JAXQRS*2.1ServerMsent&Events

Page 31: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

ServerQsent*Events

@Path("tickers"))public)class)StockTicker){)…))))@Get))))@Produces("text/event2stream")))))public)EventOutput)getQuotes()){))))))))EventOutput)eo)=)new)EventOutput();))))))))new)StockThread(eo).start()))))))))return)eo;))))})}

JAXMRS&resource&class

32

Page 32: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JAXMRS&StockThread&class

class)StockThread)extends)Thread){*

*private)EventOutput)eo;))…))@Override public)void)run()){

)))))))try){ …

)))))))))))eo.send(new)StockQuote("..."));) )))))))})catch)(IOException)e)){)…)} } }

ServerQsent*Events

33

Page 33: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

WebTarget)target)=)client.target("http://example.com/tickers");)

EventSource)eventSource)=)new)EventSource(target)){)

)))@Override)

)))public)void)onEvent(InboundEvent)inboundEvent)){)

)))))StockQuote)sq)=)inboundEvent.readData(StockQuote.class);)

)))))//)...)

))))})

))};)

eventSource.open();

JAXMRS&Client

ServerQsent*Events

34

Page 34: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

HTTP*1.1*circa*1999

• HoLB*• HTTP*uses*TCP*poorly*

- HTTP*flows*are*short*and*bursty*

- TCP*was*built*for*longQlived*flows*

• Solutions*- File*concatenations,*Assets*Inlining,*Domain*sharding,*etc.

Problems&Vs&Solutions

35

Page 35: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

HTTP/2

• HTTP/2*– Hypertext*Transfer*Protocol*version*2*Q*RFC*7540*

– HPACK*Q*Header*Compression*for*HTTP/2*Q*RFC*7541*

• Reduce*latency*• Address*the*HOL*blocking*problem*

• Support*parallelism*

• Define*interaction*with*HTTP*1.x*• Retain*semantics*of*HTTP*1.1

Address&the&Limitations&of&HTTP&1.x

36

Page 36: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 37 @delabassee

HTTP/2Connections,&Streams,&Messages,&Frames

Page 37: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

HTTP/2

• One*TCP*Connection*• Request*Q>*Stream*

–Multiplexed*

– Prioritised*

• Binary*Framing*Layer*– Prioritisation*

– Flow*Control*

– Server*Push*

• Header*Compression

Address&HTTP&1.x&Limitations POST*/upload*HTTP/1.1*

Host:*www.test.com*

ContentQType:*application/json*

ContentQLength:*15*

{“name”:“duke”}

HTTP&1.1 HTTP/2

HEADERS&frame

DATA&frame

38

Page 38: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

HTTP/2Server&Push

/index.html*:*stream*1*

/style.css*:*stream*2*

/logo.png*:*stream*4

Client Server

stream&1&HEADERS

stream&1&FRAME&x

stream&2&PROMISE

stream&4&PROMISE

39

Page 39: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

HTTP/2Header&Compression

40

Page 40: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Servlet*4.0

• Request/response*multiplexing*

– Servlet*Request*as*HTTP/2*message*

• Stream*prioritization*

• Server*push*• Binary*framing*

• Upgrade*from*HTTP*1.1

HTTP/2&Features&in&Servlet&API

41

Page 41: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Servlet*4.0

• Request/response*multiplexing*

– Servlet*Request*as*HTTP/2*message*

• Stream*prioritization*

• Server*push*• Binary*framing*

• Upgrade*from*HTTP*1.1

HTTP/2&Features&in&Servlet&API

41

Page 42: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

PushBuilder;builder = baseRequest.getPushBuilder();

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

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

42

Servlet*4.0Server&Push

Page 43: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

ActionQbased*MVC

• Controller(s)*defined*by*the*application*• Examples*

– Struts*1*(end*of*life),*Struts*2*

– Spring*MVC*

• No*standard*Java*EE*implementation*

– JSR*371*

– “ActionQbased”*MVC*1.0*JSR*

– Targeted*for*inclusion*in*Java*EE*8

43

Page 44: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

MVC*1.0

• ActionQbased*MVC*

• Glues*together*key*Java*EE*technologies*–Model*:*CDI,*Bean*Validation,*JPA*

– *View*:*Facelets,*JSP,*more?*

– *Controller*:*Invent*new*technology*Vs.*Leverage*existing*technologies

44

Principles

Page 45: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

Controller

• Combine*data*models*and*views*to*produce*web*application*pages

@Path("hello") public class HelloController {

@GET@Controllerpublic String hello() {

// do somethingreturn “hello.jsp”;

} }

45

Page 46: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

Controller

• Class/method*decorated*with*@Controller

@Path(“hello") @Controller public class HelloController {

@GET @View(“hello.md”)public void hello() {

// do business stuff }

}

46

Page 47: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

Controller

@Path(“hello") @Controller public class HelloController {

@GETpublic Viewable hello() {

// some other stuff return new Viewable("hello.adoc");

} }

47

Page 48: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

Controller

… @GET @Controller public Response getById(@PathParam("id") String id) { if (id.length() == 0) { return Response.status(Response.Status.BAD_REQUEST) .entity(“error.xhtml”) .build(); } }

48

Page 49: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

Model

• CDI*@Named*bean*• javax.mvc.Models*interface

49

Page 50: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

Model

@Named(“greeting”) @RequestScoped public class Greeting {

private String message;

public String getMessage() { return message;

} public void setMessage(String message) { this.message = message; } }

50

Page 51: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

Model

@Path(“hello”) public class HelloController {

@Inject private Models models;

@GET @Controller public String hello() { models.set(“greeting”, new Greeting(“Salut”)); return “hello.jsp”; } }

51

Page 52: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

View

• Define*the*structure*of*the*output*• Can*refer*to*model(s)*

• Rendered*by*a*View*Engine*– JSP*

– Facelets*

• Not*accessible*as*static*resources*– /WEBQINF/views/*

52

Page 53: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

View

<html> <head> <title>FreeMarker</title> </head> <body> <p>Hello ${user}</p> … </body> </html>

53

Page 54: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

View*Engine

• CDI*based*extension*mechanism*

• javax.mvc.engine.ViewEngine interface*boolean supports(String view);

void processView(ViewEngineContext context)

throws ViewEngineException;

• Ozark*– JSP*&*Facelets*

– FreeMarker,*Velocity,*Thymeleaf,*Mustache,*Handlebars,*Jade,*AsciiDoc,*…

54

Page 55: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

MVC

• New*annotations*–@Controller,*@View,*@csrf,*@RedirectScoped*

• Doing*MVC*now*is*not*a*bad*idea*

– Leveraging*CDI,*JAXQRS,*Facelets,*BV*

–More?*Servlet*4.0’s*ServerPush*

– Easy*migration*path*for*JSPs*

• Offers*more*choices

55

Page 56: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

JavaServer*Faces

56

• CDI*Alignment*

–@Inject*FacesContext,*ExternalContext,*etc.*

– CDI*managed*versions*of*Validator*and*Converter*

– Rely*on*CDI*for*EL*resolving*

– Invoking*CDI*managed*bean*methods*directly*from*Ajax,*etc.*

• “Adjustments”*for*MVC*

• Misc.*

–MultiQfield*validation,*etc.

Page 57: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Java*EE*8*Themes

• HTML5*/*Web*Tier*Enhancements*

• Ease*of*Development*

• Infrastructure*for*running*in*the*Cloud

57

Page 58: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Ease*of*Development

• CDI*alignment*

• JAXQRS*injection*alignment*

• Simplified*messaging*through*CDIQbased*“MDBs”*

• WebSocket*scopes*

• Pruning*of*EJB*2.x*client*view*and*IIOP*interoperability*• Security*interceptors*• …

58

Page 59: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JMS

@MessageDriven(activationConfig)=){)

))@ActivationConfigProperty(propertyName="connectionFactoryLookup",)propertyValue="jms/myCF"),)))@ActivationConfigProperty(propertyName="destinationLookup",)propertyValue="jms/myQueue"),)))@ActivationConfigProperty(propertyName="destinationType",)propertyValue="javax.jms.queue")}))

public)class)MyMDB)implements)MessageListener){))))public)void)onMessage(Message)message)){))))))))//)extract)message)body))))))))String)body)=)message.getBody(String.class));))))))))//)process)message)body))))})}))

MDBs&Today

59

Page 60: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JMS*2.1

)@MessageDriven))public)class)MyMessageBean)implements;JMSMessageDrivenBean){)))

)))@JMSQueueListener(destinationLookup=“java:global/TradesQ”)))))public)void)processTrade(TextMessage)tradeMessage){))))))...))))}))}

“Flexible&MDBs”

60

Page 61: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

JMS*2.1

@Dependent)public)class)MyCDIBean21){)

)))))@JMSQueueListener(destinationLookup=“java:global/requestQueue”)))))))public)void)myMessageCallback(Message)message)){))))))))...))))))})}

CDI&beans&as&message&listener?

61

Page 62: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

• Java*SE*support*• Modularity*

• Enhanced*Events*• Misc.*

– AOP*

– SPI*

– Interceptors*and*Decorators*enhancements*

– Cleaning*

62

CDI*2.0

Page 63: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

CDI*2.0

• Add*new*features*to*CDI*without*bloating*the*specification*• “Sub*specification”(aka*“parts”)*that*can*be*used*independently*

– SE*

– EE*

–more?*

• Will*help*CDI*adoption

63

Modularity

Page 64: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee64

public)class)ProducerClass){)

; @Inject;Event<SomeEvent>;someEvent;;

) public)void)someMethod(...)){)) ) ...)) ) someEvent.fire(...);)) })

}

CDI*2.0Asynchronous&Events

public)class)AnotherClass){)))))))public)void)someObserver(@Observes;SomeEvent;someEvent)){)

)))...)))))))})}

Page 65: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee64

public)class)ProducerClass){)

; @Inject;Event<SomeEvent>;someEvent;;

) public)void)someMethod(...)){)) ) ...)) ) someEvent.fire(...);)) })

}

CDI*2.0Asynchronous&Events

public)class)AsynchProducerClass){)))))

;;;;;@Inject;Event<Payload>;someEvent;;

)))))public)void)anotherMethod()){))))CompletionStage<…>)completionStage)someEvent.fireAsync(...);)

)))))})}

public)class)AnotherClass){)))))))public)void)anotherObserver(@ObservesAsync;SomeEvent;someEvent)){)

)))...)))))))})}

Page 66: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee65

CDI*2.0Events&Ordering

public)void)importantObserver(@Observes;@Priority(1))MyEvent)evt)){)...)})

public)void)anotherObserver(@Observes;@Priority(10))MyEvent)evt)){)...)}

Page 67: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Pruning

Should*we*prune*EJB*2.x*remote*and*local*client*view*(EJBObject,*EJBLocalObject,*EJBHome,*and*EJBLocalHome*interfaces)?*

Should*we*prune*CORBA,*including*support*for*interoperability*by*means*of*IIOP?

Candidates&for&Proposed&Optional&status

66

Page 68: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Java*EE*8*Themes

• HTML5*/*Web*Tier*Enhancements*

• Ease*of*Development*

• Infrastructure*for*running*in*the*Cloud

67

Page 69: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Java*EE*Management*2.0

• Update*to*JSR*77*(“J2EE*Management”)*

• RESTQbased*interfaces*to*augment*(or*replace)*current*Management*EJB*APIs*

– Currently*used*OBJECT_NAME*to*become*URL*

– Define*CRUD*operations*over*individual*managed*objects*

– ServerQsent*events*used*for*event*support*

• Simple*deployment*interfaces*also*to*be*considered*as*part*of*management*API

68

Page 70: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Java*EE*Security*1.0Identity&Store

@Inject**IdentityStore*idStore;**

Credential*cred*=*new*UsernamePasswordCredential("john",new*Password("secret"));*

CredentialValidationResult*result*=*idStore.validate(cred);*

if*(Status.VALID*==*result.getStatus())*{********groups*=*result.getGroups();********…*}*else*{********//*Invalid*or*not*validated********…*}*

69

Page 71: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Java*EE*Security*1.0

@IsAuthorized("(hasRoles('Manager'))&&)schedule.officeHrs)"))

void)transferFunds())

@IsAuthorized("hasRoles('Manager'))&&)hasAttribute('directReports',)employee.id)"))

double)getSalary(long)employeeId);)

@IsAuthorized(ruleSourceName="java:app/payrollAuthRules",)rule="report"))

void)displayReport();

Authorization&via&CDI&Interceptors

70

Page 72: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Java*EE*Security*1.0Candidate&Areas&to&Enhance&Portability,&Flexibility,&EaseMofMUse

• Authorization*Interceptors*• User*Management*

• Role*Mapping*

• Authentication*• REST*Authentication*• Password*Aliasing*

71

Page 73: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Java*EE*8*Themes

• HTML5*/*Web*Tier*Enhancements*

• Ease*of*Development*

• Infrastructure*for*running*in*the*Cloud*

• Java*SE*8*alignment

72

Page 74: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

Java*EE*8

• Java&EE&8&Platform&(JSR&366)

• CDI&2.0&(JSR&365)• JSON&Binding&1.0&(JSR&367)• JMS*2.1*(JSR*368)*

• Servlet*4.0*(JSR*369)*• JAXQRS*2.1*(JSR*370)

• MVC&1.0&(JSR&371)&

• JSF&2.3&(JSR&372)• Java*EE*Management*2.0*(JSR*373)

• JSONMP&1.1&(JSR&374)• Java*EE*Security*1.0*(JSR*375)

So&far…..

73

&&&&&&&&&&Early&Draft&Review

Page 75: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

More*to*Follow…

• Batch**• JPA&• Bean*Validation*• Connector*Architecture*• WebSocket*

• Interceptors*

• EJB*• JTA*• JCache*• Concurrency*Utilities**• JavaMail*

• …

74

Page 76: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Transparency

• Our*Java*EE*8*JSRs*run*in*the*open*on*java.net*– http://javaeeQspec.java.net*

–One*project*per*JSR*–*jaxQrsQspec,*mvcQspec,*servletQspec,…*

• Publicly*viewable*Expert*Group*mail*archive*

– Users*observer*lists*gets*all*copies*

• Publicly*accessible*issue*tracker*/*JIRA**• Publicly*accessible*download*area*• …

Commitment&to&JCP&transparent&processes

76

Page 77: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Adopt*A*JSR*for*Java*EE*8

• Make*Java*EE*8*the*most*community*driven*platform*to*date!*

- Share*ideas*and*feedback*(e.g.*fill*issues)*

- Follow*EG*discussions,*chime*in*

- Read*early*versions*of*specifications,*Javadocs*

- Write*apps*using*early*RI*builds*

- Write,*speak*about*the*technology*

- Encourage*others*to*participate,*etc.*

• http://glassfish.org/adoptajsr

77

Page 78: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

How*to*Get*Involved

• Join*an*Expert*Group*– http://javaeeQspec.java.net*

• Adopt*a*JSR*– http://glassfish.org/adoptajsr*

• The*Aquarium*

– http://blogs.oracle.com/theaquarium*

• Java*EE*Reference*Implementation*

– http://glassfish.org

78

Page 79: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee

Thanks!

Page 80: Java EE 8 - Work in progress

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.*