SlideShare una empresa de Scribd logo
1 de 80
Descargar para leer sin conexión
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
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.*
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
Industry*Trends*We're*Seeing
Cloud
Mobile
HTTP/2
SECURITY
Reactive&Programming
User*Experience
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
CommunityQPrioritized*Features
7
http://glassfish.org/survey
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
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
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
JSONQP*1.1
Java&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
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
JSONQP*1.1
JsonArray)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
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
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
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
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
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
JSONQP*1.1
JSONMMerge&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
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
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.1
JSONMMerge&Patch&–&IETF&RFC&7386
21
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
JSONQP*1.1
JSON&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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
JSONQP*1.1
JSON&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
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
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
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
JSONQB
// from default JsonbBuilder instance of the default JsonbProvider
Jsonb jsonb = JsonbBuilder.create();
JsonbProvider myProvider =
JsonbProvider.provider("foo.bar.ProviderImpl");
Jsonb jsonb = JsonbBuilder.newBuilder(myProvider);
// UnMarshall
Book book = jsonb.fromJson(new File("myBook.json"), Book.class);
// Marshall
String result = jsonb.toJson(myObject);
jsonb.toJson(myObject, new File(“foo.json”));
jsonb.toJson(myObject, new PrintWriter(System.out));
28
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.
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
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.1
ServerMsent&Events
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
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
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
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
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 37 @delabassee
HTTP/2
Connections,&Streams,&Messages,&Frames
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
HTTP/2
Server&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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
HTTP/2
Header&Compression
40
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
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
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.0
Server&Push
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
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
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
@Controller
public String hello() {
// do something
return “hello.jsp”;
}
}
45
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Controller
@Path(“hello")
@Controller
public class HelloController {
@GET
public Viewable hello() {
// some other stuff
return new Viewable("hello.adoc");
}
}
47
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Model
• CDI*@Named*bean*
• javax.mvc.Models*interface
49
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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.0
Asynchronous&Events
public)class)AnotherClass){)
))))))public)void)someObserver(@Observes;SomeEvent;someEvent)){)
)))...)
))))))})
}
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.0
Asynchronous&Events
public)class)AsynchProducerClass){)))))
;;;;;@Inject;Event<Payload>;someEvent;;
)))))public)void)anotherMethod()){)
)))CompletionStage<…>)completionStage)someEvent.fireAsync(...);)
)))))})
}
public)class)AnotherClass){)
))))))public)void)anotherObserver(@ObservesAsync;SomeEvent;someEvent)){)
)))...)
))))))})
}
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee65
CDI*2.0
Events&Ordering
public)void)importantObserver(@Observes;@Priority(1))MyEvent)evt))
{)
...)
})
public)void)anotherObserver(@Observes;@Priority(10))MyEvent)evt))
{)
...)
}
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
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
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
Java*EE*Security*1.0
Identity&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
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
Java*EE*Security*1.0
Candidate&Areas&to&Enhance&Portability,&Flexibility,&EaseMofMUse
• Authorization*Interceptors*
• User*Management*
• Role*Mapping*
• Authentication*
• REST*Authentication*
• Password*Aliasing*
71
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
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
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
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
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
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
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee
Thanks!
Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.*

Más contenido relacionado

La actualidad más candente

Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur! Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
David Delabassee
 

La actualidad más candente (19)

Java EE Next - BeJUG JavaOne Afterglow 2016
Java EE Next - BeJUG JavaOne Afterglow 2016Java EE Next - BeJUG JavaOne Afterglow 2016
Java EE Next - BeJUG JavaOne Afterglow 2016
 
Another compilation method in java - AOT (Ahead of Time) compilation
Another compilation method in java - AOT (Ahead of Time) compilationAnother compilation method in java - AOT (Ahead of Time) compilation
Another compilation method in java - AOT (Ahead of Time) compilation
 
Java EE 8 Overview (Japanese)
Java EE 8 Overview (Japanese)Java EE 8 Overview (Japanese)
Java EE 8 Overview (Japanese)
 
Nonblocking Database Access in Helidon SE
Nonblocking Database Access in Helidon SENonblocking Database Access in Helidon SE
Nonblocking Database Access in Helidon SE
 
Java Embedded у вас дома
Java Embedded у вас домаJava Embedded у вас дома
Java Embedded у вас дома
 
Supercharge your Code to get optimal Database Performance
Supercharge your Code to get optimal Database PerformanceSupercharge your Code to get optimal Database Performance
Supercharge your Code to get optimal Database Performance
 
Adopt-a-JSR for JSON Processing 1.1, JSR 374
Adopt-a-JSR for JSON Processing 1.1, JSR 374Adopt-a-JSR for JSON Processing 1.1, JSR 374
Adopt-a-JSR for JSON Processing 1.1, JSR 374
 
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur! Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
 
Java API for WebSocket 1.0: Java EE 7 and GlassFish
Java API for WebSocket 1.0: Java EE 7 and GlassFishJava API for WebSocket 1.0: Java EE 7 and GlassFish
Java API for WebSocket 1.0: Java EE 7 and GlassFish
 
Your Code Isn’t Static. Your Processes Shouldn’t be Either.
Your Code Isn’t Static. Your Processes Shouldn’t be Either.Your Code Isn’t Static. Your Processes Shouldn’t be Either.
Your Code Isn’t Static. Your Processes Shouldn’t be Either.
 
Java 9 New Features | Java Tutorial | What’s New in Java 9 | Java 9 Features ...
Java 9 New Features | Java Tutorial | What’s New in Java 9 | Java 9 Features ...Java 9 New Features | Java Tutorial | What’s New in Java 9 | Java 9 Features ...
Java 9 New Features | Java Tutorial | What’s New in Java 9 | Java 9 Features ...
 
Pi Day 2022 - from IoT to MySQL HeatWave Database Service
Pi Day 2022 -  from IoT to MySQL HeatWave Database ServicePi Day 2022 -  from IoT to MySQL HeatWave Database Service
Pi Day 2022 - from IoT to MySQL HeatWave Database Service
 
What do Technical Support want from Technical Communicators
What do Technical Support want from Technical CommunicatorsWhat do Technical Support want from Technical Communicators
What do Technical Support want from Technical Communicators
 
MySQL InnoDB Cluster - Advanced Configuration & Operations
MySQL InnoDB Cluster - Advanced Configuration & OperationsMySQL InnoDB Cluster - Advanced Configuration & Operations
MySQL InnoDB Cluster - Advanced Configuration & Operations
 
Getting Started: Developing Tropo Applications
Getting Started: Developing Tropo ApplicationsGetting Started: Developing Tropo Applications
Getting Started: Developing Tropo Applications
 
MySQL Group Replication: Handling Network Glitches - Best Practices
MySQL Group Replication: Handling Network Glitches - Best PracticesMySQL Group Replication: Handling Network Glitches - Best Practices
MySQL Group Replication: Handling Network Glitches - Best Practices
 
MySQL Tech Café #8: MySQL 8.0 for Python Developers
MySQL Tech Café #8: MySQL 8.0 for Python DevelopersMySQL Tech Café #8: MySQL 8.0 for Python Developers
MySQL Tech Café #8: MySQL 8.0 for Python Developers
 
Sitecore on containers and AKS
Sitecore on containers and AKSSitecore on containers and AKS
Sitecore on containers and AKS
 
Sitecore loves containers
Sitecore loves containersSitecore loves containers
Sitecore loves containers
 

Destacado

Sist Informacion Clase 12 2009 1 7880
Sist Informacion Clase 12 2009 1 7880Sist Informacion Clase 12 2009 1 7880
Sist Informacion Clase 12 2009 1 7880
Danieltorrealba
 
Michael_Anderson_CV.NewFeb2017
Michael_Anderson_CV.NewFeb2017Michael_Anderson_CV.NewFeb2017
Michael_Anderson_CV.NewFeb2017
Michael Anderson
 

Destacado (9)

Sist Informacion Clase 12 2009 1 7880
Sist Informacion Clase 12 2009 1 7880Sist Informacion Clase 12 2009 1 7880
Sist Informacion Clase 12 2009 1 7880
 
Presentazione melixa system
Presentazione melixa system Presentazione melixa system
Presentazione melixa system
 
Ceip "Saco e Arce" 2016
Ceip "Saco e Arce"  2016Ceip "Saco e Arce"  2016
Ceip "Saco e Arce" 2016
 
Michael_Anderson_CV.NewFeb2017
Michael_Anderson_CV.NewFeb2017Michael_Anderson_CV.NewFeb2017
Michael_Anderson_CV.NewFeb2017
 
CSM_ADL_V1_JUGM
CSM_ADL_V1_JUGMCSM_ADL_V1_JUGM
CSM_ADL_V1_JUGM
 
Introduction to Hibernate Framework
Introduction to Hibernate FrameworkIntroduction to Hibernate Framework
Introduction to Hibernate Framework
 
Drafting
DraftingDrafting
Drafting
 
Matematika keuangan silabus
Matematika keuangan   silabusMatematika keuangan   silabus
Matematika keuangan silabus
 
Initial short film ideas
Initial short film ideasInitial short film ideas
Initial short film ideas
 

Similar a Java EE 8 - Work in progress

Using Oracle Real Application Clusters (RAC) in Database as a Service
Using Oracle Real Application Clusters (RAC) in Database as a ServiceUsing Oracle Real Application Clusters (RAC) in Database as a Service
Using Oracle Real Application Clusters (RAC) in Database as a Service
Jean-Philippe PINTE
 

Similar a Java EE 8 - Work in progress (20)

Oracle Keynote from JMagghreb 2014
Oracle Keynote from JMagghreb 2014Oracle Keynote from JMagghreb 2014
Oracle Keynote from JMagghreb 2014
 
Apex day 1.0 oracle apex 5.0 patrick wolf
Apex day 1.0 oracle apex 5.0 patrick wolfApex day 1.0 oracle apex 5.0 patrick wolf
Apex day 1.0 oracle apex 5.0 patrick wolf
 
GTRI.com Splunk for Vmware APP
GTRI.com Splunk for Vmware APPGTRI.com Splunk for Vmware APP
GTRI.com Splunk for Vmware APP
 
Splunk Application logging Best Practices
Splunk Application logging Best PracticesSplunk Application logging Best Practices
Splunk Application logging Best Practices
 
Building beacon-enabled apps with Oracle MCS
Building beacon-enabled apps with Oracle MCSBuilding beacon-enabled apps with Oracle MCS
Building beacon-enabled apps with Oracle MCS
 
London Java Community (LJC) Open Meeting Keynote - Nov 2015
London Java Community (LJC) Open Meeting Keynote - Nov 2015London Java Community (LJC) Open Meeting Keynote - Nov 2015
London Java Community (LJC) Open Meeting Keynote - Nov 2015
 
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL 5.7
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL 5.7[db tech showcase 2015 Sapporo HOKKAIDO] MySQL 5.7
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL 5.7
 
Oracle cmg15
Oracle cmg15Oracle cmg15
Oracle cmg15
 
Splunk Beyond application monitoring PDF
Splunk Beyond application monitoring PDFSplunk Beyond application monitoring PDF
Splunk Beyond application monitoring PDF
 
Making DevOps Secure with Docker on Solaris (Oracle Open World, with Jesse Bu...
Making DevOps Secure with Docker on Solaris (Oracle Open World, with Jesse Bu...Making DevOps Secure with Docker on Solaris (Oracle Open World, with Jesse Bu...
Making DevOps Secure with Docker on Solaris (Oracle Open World, with Jesse Bu...
 
Using Edition-Based Redefinition for Zero Downtime PL/SQL Changes
Using Edition-Based Redefinition for Zero Downtime PL/SQL ChangesUsing Edition-Based Redefinition for Zero Downtime PL/SQL Changes
Using Edition-Based Redefinition for Zero Downtime PL/SQL Changes
 
Jakarta EE: Today and Tomorrow
Jakarta EE: Today and TomorrowJakarta EE: Today and Tomorrow
Jakarta EE: Today and Tomorrow
 
Application Development with Oracle Database
Application Development with Oracle DatabaseApplication Development with Oracle Database
Application Development with Oracle Database
 
OOW15 - EBS Certification and Roadmap
OOW15 - EBS Certification and RoadmapOOW15 - EBS Certification and Roadmap
OOW15 - EBS Certification and Roadmap
 
No sql from the web’s favourite relational database MySQL
No sql from the web’s favourite relational database MySQLNo sql from the web’s favourite relational database MySQL
No sql from the web’s favourite relational database MySQL
 
Hello worldswing.java
Hello worldswing.javaHello worldswing.java
Hello worldswing.java
 
GlassFish Roadmap
GlassFish RoadmapGlassFish Roadmap
GlassFish Roadmap
 
Using Oracle Real Application Clusters (RAC) in Database as a Service
Using Oracle Real Application Clusters (RAC) in Database as a ServiceUsing Oracle Real Application Clusters (RAC) in Database as a Service
Using Oracle Real Application Clusters (RAC) in Database as a Service
 
Oracle GoldenGate on Docker
Oracle GoldenGate on DockerOracle GoldenGate on Docker
Oracle GoldenGate on Docker
 
OOW16 - Oracle E-Business Suite: Technology Certification Primer and Roadmap ...
OOW16 - Oracle E-Business Suite: Technology Certification Primer and Roadmap ...OOW16 - Oracle E-Business Suite: Technology Certification Primer and Roadmap ...
OOW16 - Oracle E-Business Suite: Technology Certification Primer and Roadmap ...
 

Más de David Delabassee

Más de David Delabassee (20)

JVMs in Containers - Best Practices
JVMs in Containers - Best PracticesJVMs in Containers - Best Practices
JVMs in Containers - Best Practices
 
JVMs in Containers
JVMs in ContainersJVMs in Containers
JVMs in Containers
 
Serverless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & Triumphs
 
Serverless Java - Challenges and Triumphs
Serverless Java - Challenges and TriumphsServerless Java - Challenges and Triumphs
Serverless Java - Challenges and Triumphs
 
Randstad Docker meetup - Serverless
Randstad Docker meetup - ServerlessRandstad Docker meetup - Serverless
Randstad Docker meetup - Serverless
 
Java Serverless in Action - Voxxed Banff
Java Serverless in Action - Voxxed BanffJava Serverless in Action - Voxxed Banff
Java Serverless in Action - Voxxed Banff
 
Serverless Kotlin
Serverless KotlinServerless Kotlin
Serverless Kotlin
 
REST in an Async World
REST in an Async WorldREST in an Async World
REST in an Async World
 
JAX-RS 2.1 Reloaded
JAX-RS 2.1 ReloadedJAX-RS 2.1 Reloaded
JAX-RS 2.1 Reloaded
 
EJB and CDI - Alignment and Strategy
EJB and CDI - Alignment and StrategyEJB and CDI - Alignment and Strategy
EJB and CDI - Alignment and Strategy
 
HTTP/2 Comes to Java
HTTP/2 Comes to JavaHTTP/2 Comes to Java
HTTP/2 Comes to Java
 
Java EE 8 - What’s new on the Web front
Java EE 8 - What’s new on the Web frontJava EE 8 - What’s new on the Web front
Java EE 8 - What’s new on the Web front
 
HTTP/2 Comes to Java
HTTP/2 Comes to JavaHTTP/2 Comes to Java
HTTP/2 Comes to Java
 
What's coming in Java EE 8
What's coming in Java EE 8What's coming in Java EE 8
What's coming in Java EE 8
 
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
 
MVC 1.0 / JSR 371
MVC 1.0 / JSR 371MVC 1.0 / JSR 371
MVC 1.0 / JSR 371
 
Java EE 8 - An instant snapshot
Java EE 8 - An instant snapshot Java EE 8 - An instant snapshot
Java EE 8 - An instant snapshot
 
Avatar 2.0
Avatar 2.0Avatar 2.0
Avatar 2.0
 
Java EE 8 - An instant snapshot
Java EE 8 - An instant snapshotJava EE 8 - An instant snapshot
Java EE 8 - An instant snapshot
 
HTTP/2 Comes to Java - What Servlet 4.0 Means to You
HTTP/2 Comes to Java - What Servlet 4.0 Means to YouHTTP/2 Comes to Java - What Servlet 4.0 Means to You
HTTP/2 Comes to Java - What Servlet 4.0 Means to You
 

Último

CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
anilsa9823
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
anilsa9823
 

Último (20)

Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 

Java EE 8 - Work in progress