SlideShare a Scribd company logo
JAVA EE 8 UPDATE
Ryan Cuprak
Agenda
• Java EE 8 specification overview and current status
• Example of proposed enhancements
• JavaOne 2016 Java EE Reboot
• How to get involved and help
Importance of Java EE
https://javaee-guardians.io/java-ee-adoption-surveys
Java EE Ecosystem
Microservices and Java EE
http://microprofile.io
Java EE: Past, Present, Future
J2EE 1.2
Servlet,
JSP,
EJB,
JMS,
RMI
J2EE 1.3
CMP,
JCA
J2EE 1.4
Web
Services,
Mgmt,
Deploy
Java EE 5
Ease of
Use,
EJB 3,
JPA, JSF,
JAXB,
JAX-WS
Java EE 6
Pruning,
Ease of
Use,
JAX-RS,
CDI,
Bean-
ValidationWeb Profile
Servlet 3,
EJB 3.1 Lite
Java EE 7
JMS 2,
Batch, TX,
Concurrency
Web-
Sockets,
JSON
Java EE 8
SERVLET 4,
JSON-B,
JSON-P 1.1,
JSF 2.3, CDI
2.0, JAX-
RS 2.1,
SECURITY
Java EE 8 Community Survey
https://java.net/downloads/javaee-spec/JavaEE8_Community_Survey_Results.pdf
https://blogs.oracle.com/ldemichiel/entry/results_from_the_java_ee
Java EE 8 Overview – Original Plan
• Continued Enhancements for Web Standards Alignment
• HTTP/2, JSON Binding, JSON-P, MVC
• Cloud enhancements
• Security, RESTful Management API
• CDI Programming Model
• Ease of use, EJB via CDI
• Smaller, but Important Features
• Caching, Better Messaging
• Alignment with Java SE 8
Java EE 8 Specifications (Original)
• JMS 2.1
• JAX-RS 2.1
• JSF 2.3
• CDI 2.0
• JSON-P 1.1
• Servlet 4.0
• JCache 1.0
• JSON-B 1.0
• MVC 1.0
• Java EE Security1.0
• Java EE Management 2.0
Java EE 8 Reboot
JSRs proposed to be dropped:
• Management 2.0 (JSR 373)
• JMS 2.1 (JSR 368)
• MVC 1.0 (JSR 371)
Expanded scope:
• Security 1.0 (JSR 375)
Proposed new JSRs:
• Health Checking
• Configuration
New Survey Conducted
Results Not Yet Published
New Target Release
Q4 2017
UPDATED SPECIFICATION
Servlet 4.0
• Early Draft published 10/2015
• Early implementation available in Tomcat 9
JSR 369
Expert Group
Activity
Servlet 4.0: HTTP/2
• HTTP/2 Support -> Major Update
• Why do we need HTTP/2?
• Problems with HTTP/1.1:
• Head-of-Line Blocking
• HTTP Pipelining, File Concatenation, & Image Sprites
• Key differences:
• Binary instead of textual
• Fully multiplexed instead of ordered and blocking
• One connection for parallelism
• Uses header compression
• Allows server push
JSR 369
Servlet 4.0: HTTP/2 Support
NOTE: HTTPS only for browsers!
Servlet 4.0
• Principal goal to support HTTP/2
• Request/response multiplexing over single connection
• Transparent to most developers, although possibly slight
changes to the Servlet API
• Most affected: frameworks
JSR 369
Servlet 4.0 – Exposing HTTP./2
• Stream Prioritization
• New Priority class
• Enhance HttpServletRequest and HttpServletResponse to
accommodate
• Server Push
• Frameworks can push resources to the client
• Not replacing WebSockets
JSR 369
Servlet 4.0 - HttpClient API
• Plans to provide easy to use API
• Target HttpClient in Java 9
• Support both HTTP/1.1 and 2
• Builds on existing Java API Classes
JSR 368
JMS 2.1 Asynchronous Batches
Example:
@MessageDriven
public class MyFlexibleMDB {
@JMSQueueListener(destinationLookup="java:global/
myQueue")
public void myMessageCallback(@Batch(maxSize=10,timeout=
1000) Message[] messages) {
...
}
JSR 368
JMS 2.1 Declarative JMS Listeners
@ApplicationScoped
@MaxConcurrency(10)
public class HandlingEventRegistrationAttemptConsumer {
@JmsListener(
destinationLookup="jms/HandlingEventRegistrationAttemptQueue",
selector="source = 'mobile'",
batchSize=10, retry=5, retryDelay=7000,
orderBy=TIMESTAMP)
@Transactional
public void onEventRegistrationAttempt(
HandlingEventRegistrationAttempt... attempts) {
...
}
}
JSR 368
JAX-RS 2.1
• JSR 370 - In Early Stages
• No builds available for testing.
• Reboot: Add Circuit Breaker support
JSR 370
Expert Group
Activity
JAX-RS 2.1
• Hypermedia API
• Reactive API
• Security API
• Support for SSE (Server Sent Events)
• Improved CDI Integration
• Support for Non-Blocking IO in Providers
JSR 370
JAX-RS 2.1
• Conditional JAXB on Runtimes
• Integration with JSON-B
• Support for CDI in Java SE
JSR 370
JSF 2.3
• JSR 372 - in active progress
• Milestones available for testing
• Read, Test, Supply Feedback
JSR 372
Emails from
Oracle spec
leads
JSF 2.3
• Standardize Web Socket integration
• f:websocket
• Multi-field validation
• Enhanced CDI Integration
• Lifecycle Enhancements
• PostRenderViewEvent
• EL API Enhancements
• Configuration Enhancements
• AJAX Enhancements
JSR 372
JSF 2.3 Enhanced CDI Integration
Injection of Resources
@Inject
FacesContext facesContext;
@ApplicationMap
@Inject
Map applicationMap;
JSR 372
JSF 2.3 Enhanced CDI Integration
• Wider Support of Injection into JSF Artifacts
• javax.faces.convert.Converter
• javax.faces.validator.Validator
• javax.faces.component.behavior.Behavior
• Upgraded to CDI qualifiers
JSR 372
CDI 2.0
• JSR 365 - in active progress
• Early draft review 2 published August 2016
• Test Releases of Reference Implementation
http://weld.cdi-spec.org/news/
JSR 374
CDI 2.0
• Java SE Bootstrap
• XML Configuration
• Asynchronous Events
• @Startup for CDI Beans
• Portable Extension SPI Simplification
• Small features and enhancements
JSR 374
CDI 2.0
Workshop Status Description
Parts API was split Working on modularity (sub specs)
Events Finished Enhance events (asynchronous,
ordering,etc… )
AOP Started Interceptors & Decoractors enhancement
Java SE First part done Boostrap CDI in Java SE
JDK 8 Started Enhancements from Java 8
SPI Not Started more open SPI for 3rd party
Contexts Not Started Provide a way to start/stop contexts for SE
mode
JSR 374
CDI Event System Enhancements
• Asynchronous Events
@Inject
private ExperimentalEvent<Configuration> event;
…
event.fireAsync(new Configuration());
• Call to event.fireAsync() returns immediately
JSR 365
CDI 2.0 @Schedule Outside EJB
@ApplicationScoped
public class MyScheduledBean {
...
@Schedule(...)
public void myScheduledTask() { ... }
}
@ApplicationScoped
@Stereotype
@Retention(RUNTIME)
@Target(TYPE)
@Schedule(...)
public @interface MonthlyTask {}
JSR 365
JSON-P 1.1
• JSR 374 - In Early Draft Review
• More Information:
• https://json-processing-spec.java.net/
• Sources: https://java.net/projects/jsonp
JSR 374
JSON-P 1.1
• Updates to new API in Java EE 7
• New JSON Standards
• JSON-Pointer and JSON-Patch
• Editing Operations on JSON objects and arrays
• Helper Classes and Enhanced Java SE 8 support
JSR 374
JSON-P 1.1 Java SE 8 Support
• Java 8 Stream Support
• JsonArray persons;
persons.getValuesAs(JsonObject.class).stream()
.filter(x->x.getString(“age”) >= 65)
.forEach(System.out.println(x.getString(“name”)));
JSR 374
JSON-P 1.1: JSON-Pointer
JSR 374
JSON-P 1.1: JSON-Patch
public void
shouldBuildJsonPatchExpressionUsingJsonPatchBuilder() {
JsonPatchBuilder patchBuilder = new JsonPatchBuilder();
JsonObject result = patchBuilder.add("/email",
"john@example.com")
.replace("/age", 30)
.remove("/phoneNumber")
.test("/firstName", "John")
.copy("/address/lastName", "/lastName")
.apply(buildPerson());
}
JSR 374
Java EE Management API 2.0
• Oracle proposing to drop JSR from EE 8.
• Currently working on Early Draft
• Java EE Management API 1.0 – released 2002
• Join mailing list of JSR 373
JSR 373
Java EE Management API 2.0
• REST Based Interface to Supersede EJB Management
APIs of JSR 77
• Monitoring and deployment
• SSE for Event Support (WebSockets also under
consideration)
JSR 373
Bean Validation 2.0
• Add support for LocalTime, Optional, etc.
• Leverage type annotation, repeatable annotations,
reflective parameter name retrieval
• Potential enhancements:
• Customized constraint validations
• Object graph validation
• Example:
List<@Email String> emails;
JSR 380
NEW SPECIFICATIONS
MVC
• Model - View - Controller
• JSR 371
• Active Progress…download milestones
• Ozark: https://ozark.java.net/
JSR 371
MVC
• Action-Based Web Framework for Java EE
• Follows suit of Spring MVC or Apache Struts
• Does Not Replace JSF
• Model: CDI, Bean Validation, JPA
• View: Facelets, JSP (Extensible)
• Controller: Layered on top of JAX-RS
JSR 371
MVC: Controller Example
@Controller
@Path("/customers")
@View("my-view.jsp")
public class CustomerController {
@Inject
private Models models;
@GET
public String getItems(){
. . .
return “customers.jsp”;
}
JSR 371
MVC: View Example
<c:forEach var="customer" items="${customers}">
<tr>
<td class="text-left">${customer.name}</td>
<td class="text-center">
<form action="${pageContext.request.contextPath}/r/customers/edit"
method="POST">
<input type="hidden" name="id" value="${item.id}"/>
<button type="submit">
Edit
</button>
</form>
</td>
</tr>
</c:forEach>
JSR 371
JSON-B
• Java API for JSON Binding
• JSR 367 - Public Review
• Read the spec, start testing:
https://java.net/projects/jsonb-spec/pages/Home
JSR 367
JSON-B Next Logical Step
• Standardize means of converting JSON to Java objects
and vice versa
• Default mapping algorithm for converting Java classes
• Draw from best of breed ideas in existing JSON binding
solutions
• Provide JAX-RS a standard way to support
“application/json” for POJOs
• JAX-RS currently supports JSON-P
JSR 367
JSON-B Mapping
@Entity public class Person {
@Id String name;
String gender;
@ElementCollection
Map<String, String> phones;
...
}
Person duke = new Person();
duke.setName("Duke");
duke.setGender("Male");
phones = new HashMap<>();
phones.put("home", "650-123-4567");
phones.put("mobile",
"650-234-5678");
duke.setPhones(phones);
{
"name":"Duke",
"gender":"Male",
"phones":{
"home":"650-123-4567",
"mobile":"650-234-5678"
}
}
JSR 367
JSON-B: Proposed Custom Mapping
• Utilization of annotations to map fields to JSON Document Elements
@JsonProperty(“poolType”)
public String poolType;
@JsonPropertyOrder(“poolType”,”shape”)
public class Pool(){
public String poolType;
public String shape;
…
}
{
poolType : “Inground”,
}
{
poolType : “Inground”,
shape : “Rectangle”
}
JSR 367
Java EE Security
• Improve Java EE platform by ensuring that the security
API is useful in the modern cloud/PaaS paradigm
• Simplify, standardize, modernize
• Promotes modern concepts (EL and CDI)
JSR 367
Java EE Security
• Simplify security providers
• Easy pluggability and mapping
• Enabling existing security annotations for all beans
• Proposed examples:
• https://github.com/javaee-security-spec/javaee-security-proposals
JSR 375
Java EE Security: Proposed Provider
@SecurityProvider
public class MySecurityProvider {
@Inject UserService userService;
@OnAuthentication
// The parameters could suit the credentials mechanism being used.
public Principal getPrincipal(String username, String password) {
// Construct the principal using the user service.
}
@OnAuthorization
public String[] getRoles (Principal principal) {
// Construct an array of roles using the principal and user service.
}
}
JSR 375
Java EE Security – JavaOne 2016
• Add OAuth and OpenID support
• Secret management
JSR 375
JCache
• Java Temporary Caching API
• JSR 107 - Started in 2001
• Provides a common way for Java applications to create,
access, update, and remove entries from caches
JSR 197
JCache
• Provide applications with caching
functionality…particularly the ability to cache Java objects
• Define common set of caching concepts & facilities
• Minimize learning curve
• Maximize portability
• Support in-process and distributed cache implementations
JSR 107
Others: Not Addressed
• JPA
• WebSocket
• Concurrency Utilities
• Batching
• etc…
PROPOSED JSRS
Configuration
• Standardize a mechanism of defining, injecting and using
configuration within an application.
• Define configuration persistence mechanisms, formats,
and bindings.
• Support for merging, overriding, and federating
configurations from different sources
• Provide a standard mechanism for working with
mutable/dynamic configurations
Health Check
• Goal: Standardize health reporting
• Proposed new REST API enabling health checking
• Available via configurable context (/healthcheck)
• Will include semantics for reporting health
• Health status codes
• Reasons/warnings
• Health of dependencies
Java EE Roadmap - JavaOne 2016
2016
• Feedback through Survey
• Launch Java EE Next JSRs
2017
• Java EE 8
• Specs, RI, TCK complete
• Initial microservices support
• Define Java EE 9
• Early access implementation
of Java EE 9
2018
• Java EE 9
• Specs, RI, TCK complete
• Modular Java EE runtime
• Enhanced microservices
support
Java EE: Take Action
• Start working with Java EE 8 today
• Tools:
• GlassFish v5 (or Payara)
• Tomcat 9 web sockets
• Milestones
• Examples and Specification Docs
Java EE Resources
• JavaOne 2016 EE 8 Update/Reboot
• http://tinyurl.com/zeark5t
• Java EE 8 by Arjan Tijms
• https://javaee8.zeef.com/arjan.tijms
• JavaOne 2016 Sessions
• https://www.oracle.com/javaone/
• JSR 366
• https://www.jcp.org/en/jsr/detail?id=366
Join Us!
https://javaee-guardians.io
Adopt-A-JSR
• Started in 2007, easy way for JUGs to get involved
• What you can do depends upon what you want to do &
what spec leads are looking for

More Related Content

What's hot (19)

PDF
Java EE 8 Web Frameworks: A Look at JSF vs MVC
Josh Juneau
 
PPTX
Faster java ee builds with gradle [con4921]
Ryan Cuprak
 
PDF
Java on Azure
Philly JUG
 
KEY
Enterprise Java Web Application Frameworks Sample Stack Implementation
Mert Çalışkan
 
PPT
What's New in WebLogic 12.1.3 and Beyond
Oracle
 
PDF
50 New Features of Java EE 7 in 50 minutes
Arun Gupta
 
PDF
Java EE Revisits GoF Design Patterns
Murat Yener
 
PDF
Java EE 7 for WebLogic 12c Developers
Bruno Borges
 
PDF
Changes in WebLogic 12.1.3 Every Administrator Must Know
Bruno Borges
 
PDF
20151010 my sq-landjavav2a
Ivan Ma
 
PDF
jDays2015 - JavaEE vs. Spring Smackdown
Mert Çalışkan
 
PPTX
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Sam Brannen
 
PDF
Scala play-framework
Abdhesh Kumar
 
PDF
Spring framework
Aircon Chen
 
PDF
Spring - CDI Interop
Ray Ploski
 
PPTX
Java EE8 - by Kito Mann
Kile Niklawski
 
PDF
Java 9 Modularity in Action
Sander Mak (@Sander_Mak)
 
PDF
Migrating a JSF-Based Web Application from Spring 3 to Java EE 7 and CDI
Mario-Leander Reimer
 
PDF
Apache DeltaSpike the CDI toolbox
Antoine Sabot-Durand
 
Java EE 8 Web Frameworks: A Look at JSF vs MVC
Josh Juneau
 
Faster java ee builds with gradle [con4921]
Ryan Cuprak
 
Java on Azure
Philly JUG
 
Enterprise Java Web Application Frameworks Sample Stack Implementation
Mert Çalışkan
 
What's New in WebLogic 12.1.3 and Beyond
Oracle
 
50 New Features of Java EE 7 in 50 minutes
Arun Gupta
 
Java EE Revisits GoF Design Patterns
Murat Yener
 
Java EE 7 for WebLogic 12c Developers
Bruno Borges
 
Changes in WebLogic 12.1.3 Every Administrator Must Know
Bruno Borges
 
20151010 my sq-landjavav2a
Ivan Ma
 
jDays2015 - JavaEE vs. Spring Smackdown
Mert Çalışkan
 
Spring 3.1 to 3.2 in a Nutshell - Spring I/O 2012
Sam Brannen
 
Scala play-framework
Abdhesh Kumar
 
Spring framework
Aircon Chen
 
Spring - CDI Interop
Ray Ploski
 
Java EE8 - by Kito Mann
Kile Niklawski
 
Java 9 Modularity in Action
Sander Mak (@Sander_Mak)
 
Migrating a JSF-Based Web Application from Spring 3 to Java EE 7 and CDI
Mario-Leander Reimer
 
Apache DeltaSpike the CDI toolbox
Antoine Sabot-Durand
 

Viewers also liked (20)

PPTX
Containerless in the Cloud with AWS Lambda
Ryan Cuprak
 
PPTX
Top 50 java ee 7 best practices [con5669]
Ryan Cuprak
 
PPTX
Configuration for Java EE: Config JSR and Tamaya
Dmitry Kornilov
 
PPTX
Hybrid Mobile Development with Apache Cordova and
Ryan Cuprak
 
PPTX
Jms deep dive [con4864]
Ryan Cuprak
 
PPTX
Hybrid Mobile Development with Apache Cordova and Java EE 7 (JavaOne 2014)
Ryan Cuprak
 
PPTX
Adopt-a-JSR session (JSON-B/P)
Dmitry Kornilov
 
PDF
Updates to the java api for json processing for java ee 8
Alex Soto
 
PPTX
JavaOne 2013: Organizing Your Local Community
Ryan Cuprak
 
PPTX
Java script nirvana in netbeans [con5679]
Ryan Cuprak
 
PPTX
A first Draft to Java Configuration
Anatole Tresch
 
PDF
Fun with Kotlin
Egor Andreevich
 
PDF
Web protocols for java developers
Pavel Bucek
 
PPTX
Developing in the Cloud
Ryan Cuprak
 
PPTX
JavaFX Versus HTML5 - JavaOne 2014
Ryan Cuprak
 
PPTX
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Ryan Cuprak
 
PPTX
Java EE for the Cloud
Dmitry Kornilov
 
PPTX
Mobile banking 2012
Agency Management Institute
 
PDF
Making Java REST with JAX-RS 2.0
Dmytro Chyzhykov
 
PPT
Reactive Java EE - Let Me Count the Ways!
Reza Rahman
 
Containerless in the Cloud with AWS Lambda
Ryan Cuprak
 
Top 50 java ee 7 best practices [con5669]
Ryan Cuprak
 
Configuration for Java EE: Config JSR and Tamaya
Dmitry Kornilov
 
Hybrid Mobile Development with Apache Cordova and
Ryan Cuprak
 
Jms deep dive [con4864]
Ryan Cuprak
 
Hybrid Mobile Development with Apache Cordova and Java EE 7 (JavaOne 2014)
Ryan Cuprak
 
Adopt-a-JSR session (JSON-B/P)
Dmitry Kornilov
 
Updates to the java api for json processing for java ee 8
Alex Soto
 
JavaOne 2013: Organizing Your Local Community
Ryan Cuprak
 
Java script nirvana in netbeans [con5679]
Ryan Cuprak
 
A first Draft to Java Configuration
Anatole Tresch
 
Fun with Kotlin
Egor Andreevich
 
Web protocols for java developers
Pavel Bucek
 
Developing in the Cloud
Ryan Cuprak
 
JavaFX Versus HTML5 - JavaOne 2014
Ryan Cuprak
 
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Ryan Cuprak
 
Java EE for the Cloud
Dmitry Kornilov
 
Mobile banking 2012
Agency Management Institute
 
Making Java REST with JAX-RS 2.0
Dmytro Chyzhykov
 
Reactive Java EE - Let Me Count the Ways!
Reza Rahman
 
Ad

Similar to Java EE 8 Update (20)

PDF
Java EE 8: On the Horizon
Josh Juneau
 
PDF
JavaOne 2014 Java EE 8 Booth Slides
Edward Burns
 
PDF
What’s new in Java SE, EE, ME, Embedded world & new Strategy
Mohamed Taman
 
PDF
What's new in Java EE 7? From HTML5 to JMS 2.0
Bruno Borges
 
PPTX
Java EE 7 - New Features and the WebSocket API
Marcus Schiesser
 
PDF
Java EE 7, what's in it for me?
Alex Soto
 
ODP
OTN Developer Days - Java EE 6
glassfish
 
PDF
InterConnect 2016 Java EE 7 Overview (PEJ-5296)
Kevin Sutter
 
PPT
Java EE7 in action
Ankara JUG
 
PDF
Haj 4328-java ee 7 overview
Kevin Sutter
 
PDF
Java EE 7 - Overview and Status
Java Usergroup Berlin-Brandenburg
 
PDF
OTN Tour 2013: What's new in java EE 7
Bruno Borges
 
PDF
AAI-1713 Introduction to Java EE 7
WASdev Community
 
PDF
AAI 1713-Introduction to Java EE 7
Kevin Sutter
 
PDF
Java EE 8 Overview (Japanese)
Logico
 
ODP
JUDCON India 2014 Java EE 7 talk
Vijay Nair
 
PDF
Web Technologies in Java EE 7
Lukáš Fryč
 
PPTX
Java ee 8 + security overview
Rudy De Busscher
 
PDF
Overview of Java EE 6 by Roberto Chinnici at SFJUG
Marakana Inc.
 
Java EE 8: On the Horizon
Josh Juneau
 
JavaOne 2014 Java EE 8 Booth Slides
Edward Burns
 
What’s new in Java SE, EE, ME, Embedded world & new Strategy
Mohamed Taman
 
What's new in Java EE 7? From HTML5 to JMS 2.0
Bruno Borges
 
Java EE 7 - New Features and the WebSocket API
Marcus Schiesser
 
Java EE 7, what's in it for me?
Alex Soto
 
OTN Developer Days - Java EE 6
glassfish
 
InterConnect 2016 Java EE 7 Overview (PEJ-5296)
Kevin Sutter
 
Java EE7 in action
Ankara JUG
 
Haj 4328-java ee 7 overview
Kevin Sutter
 
Java EE 7 - Overview and Status
Java Usergroup Berlin-Brandenburg
 
OTN Tour 2013: What's new in java EE 7
Bruno Borges
 
AAI-1713 Introduction to Java EE 7
WASdev Community
 
AAI 1713-Introduction to Java EE 7
Kevin Sutter
 
Java EE 8 Overview (Japanese)
Logico
 
JUDCON India 2014 Java EE 7 talk
Vijay Nair
 
Web Technologies in Java EE 7
Lukáš Fryč
 
Java ee 8 + security overview
Rudy De Busscher
 
Overview of Java EE 6 by Roberto Chinnici at SFJUG
Marakana Inc.
 
Ad

More from Ryan Cuprak (6)

PPTX
Jakarta EE Test Strategies (2022)
Ryan Cuprak
 
PPTX
DIY Home Weather Station (Devoxx Poland 2023)
Ryan Cuprak
 
PDF
Polygot Java EE on the GraalVM
Ryan Cuprak
 
PPTX
Exploring Java Heap Dumps (Oracle Code One 2018)
Ryan Cuprak
 
PPTX
Faster Java EE Builds with Gradle
Ryan Cuprak
 
PPTX
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
Ryan Cuprak
 
Jakarta EE Test Strategies (2022)
Ryan Cuprak
 
DIY Home Weather Station (Devoxx Poland 2023)
Ryan Cuprak
 
Polygot Java EE on the GraalVM
Ryan Cuprak
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Ryan Cuprak
 
Faster Java EE Builds with Gradle
Ryan Cuprak
 
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
Ryan Cuprak
 

Recently uploaded (20)

PDF
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
PPTX
Transforming Mining & Engineering Operations with Odoo ERP | Streamline Proje...
SatishKumar2651
 
PDF
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
PDF
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
PDF
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
PDF
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PDF
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
PDF
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PDF
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PPTX
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
PDF
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
PDF
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
Transforming Mining & Engineering Operations with Odoo ERP | Streamline Proje...
SatishKumar2651
 
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
Empower Your Tech Vision- Why Businesses Prefer to Hire Remote Developers fro...
logixshapers59
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 

Java EE 8 Update

  • 1. JAVA EE 8 UPDATE Ryan Cuprak
  • 2. Agenda • Java EE 8 specification overview and current status • Example of proposed enhancements • JavaOne 2016 Java EE Reboot • How to get involved and help
  • 3. Importance of Java EE https://javaee-guardians.io/java-ee-adoption-surveys
  • 5. Microservices and Java EE http://microprofile.io
  • 6. Java EE: Past, Present, Future J2EE 1.2 Servlet, JSP, EJB, JMS, RMI J2EE 1.3 CMP, JCA J2EE 1.4 Web Services, Mgmt, Deploy Java EE 5 Ease of Use, EJB 3, JPA, JSF, JAXB, JAX-WS Java EE 6 Pruning, Ease of Use, JAX-RS, CDI, Bean- ValidationWeb Profile Servlet 3, EJB 3.1 Lite Java EE 7 JMS 2, Batch, TX, Concurrency Web- Sockets, JSON Java EE 8 SERVLET 4, JSON-B, JSON-P 1.1, JSF 2.3, CDI 2.0, JAX- RS 2.1, SECURITY
  • 7. Java EE 8 Community Survey https://java.net/downloads/javaee-spec/JavaEE8_Community_Survey_Results.pdf https://blogs.oracle.com/ldemichiel/entry/results_from_the_java_ee
  • 8. Java EE 8 Overview – Original Plan • Continued Enhancements for Web Standards Alignment • HTTP/2, JSON Binding, JSON-P, MVC • Cloud enhancements • Security, RESTful Management API • CDI Programming Model • Ease of use, EJB via CDI • Smaller, but Important Features • Caching, Better Messaging • Alignment with Java SE 8
  • 9. Java EE 8 Specifications (Original) • JMS 2.1 • JAX-RS 2.1 • JSF 2.3 • CDI 2.0 • JSON-P 1.1 • Servlet 4.0 • JCache 1.0 • JSON-B 1.0 • MVC 1.0 • Java EE Security1.0 • Java EE Management 2.0
  • 10. Java EE 8 Reboot JSRs proposed to be dropped: • Management 2.0 (JSR 373) • JMS 2.1 (JSR 368) • MVC 1.0 (JSR 371) Expanded scope: • Security 1.0 (JSR 375) Proposed new JSRs: • Health Checking • Configuration New Survey Conducted Results Not Yet Published New Target Release Q4 2017
  • 12. Servlet 4.0 • Early Draft published 10/2015 • Early implementation available in Tomcat 9 JSR 369 Expert Group Activity
  • 13. Servlet 4.0: HTTP/2 • HTTP/2 Support -> Major Update • Why do we need HTTP/2? • Problems with HTTP/1.1: • Head-of-Line Blocking • HTTP Pipelining, File Concatenation, & Image Sprites • Key differences: • Binary instead of textual • Fully multiplexed instead of ordered and blocking • One connection for parallelism • Uses header compression • Allows server push JSR 369
  • 14. Servlet 4.0: HTTP/2 Support NOTE: HTTPS only for browsers!
  • 15. Servlet 4.0 • Principal goal to support HTTP/2 • Request/response multiplexing over single connection • Transparent to most developers, although possibly slight changes to the Servlet API • Most affected: frameworks JSR 369
  • 16. Servlet 4.0 – Exposing HTTP./2 • Stream Prioritization • New Priority class • Enhance HttpServletRequest and HttpServletResponse to accommodate • Server Push • Frameworks can push resources to the client • Not replacing WebSockets JSR 369
  • 17. Servlet 4.0 - HttpClient API • Plans to provide easy to use API • Target HttpClient in Java 9 • Support both HTTP/1.1 and 2 • Builds on existing Java API Classes JSR 368
  • 18. JMS 2.1 Asynchronous Batches Example: @MessageDriven public class MyFlexibleMDB { @JMSQueueListener(destinationLookup="java:global/ myQueue") public void myMessageCallback(@Batch(maxSize=10,timeout= 1000) Message[] messages) { ... } JSR 368
  • 19. JMS 2.1 Declarative JMS Listeners @ApplicationScoped @MaxConcurrency(10) public class HandlingEventRegistrationAttemptConsumer { @JmsListener( destinationLookup="jms/HandlingEventRegistrationAttemptQueue", selector="source = 'mobile'", batchSize=10, retry=5, retryDelay=7000, orderBy=TIMESTAMP) @Transactional public void onEventRegistrationAttempt( HandlingEventRegistrationAttempt... attempts) { ... } } JSR 368
  • 20. JAX-RS 2.1 • JSR 370 - In Early Stages • No builds available for testing. • Reboot: Add Circuit Breaker support JSR 370 Expert Group Activity
  • 21. JAX-RS 2.1 • Hypermedia API • Reactive API • Security API • Support for SSE (Server Sent Events) • Improved CDI Integration • Support for Non-Blocking IO in Providers JSR 370
  • 22. JAX-RS 2.1 • Conditional JAXB on Runtimes • Integration with JSON-B • Support for CDI in Java SE JSR 370
  • 23. JSF 2.3 • JSR 372 - in active progress • Milestones available for testing • Read, Test, Supply Feedback JSR 372 Emails from Oracle spec leads
  • 24. JSF 2.3 • Standardize Web Socket integration • f:websocket • Multi-field validation • Enhanced CDI Integration • Lifecycle Enhancements • PostRenderViewEvent • EL API Enhancements • Configuration Enhancements • AJAX Enhancements JSR 372
  • 25. JSF 2.3 Enhanced CDI Integration Injection of Resources @Inject FacesContext facesContext; @ApplicationMap @Inject Map applicationMap; JSR 372
  • 26. JSF 2.3 Enhanced CDI Integration • Wider Support of Injection into JSF Artifacts • javax.faces.convert.Converter • javax.faces.validator.Validator • javax.faces.component.behavior.Behavior • Upgraded to CDI qualifiers JSR 372
  • 27. CDI 2.0 • JSR 365 - in active progress • Early draft review 2 published August 2016 • Test Releases of Reference Implementation http://weld.cdi-spec.org/news/ JSR 374
  • 28. CDI 2.0 • Java SE Bootstrap • XML Configuration • Asynchronous Events • @Startup for CDI Beans • Portable Extension SPI Simplification • Small features and enhancements JSR 374
  • 29. CDI 2.0 Workshop Status Description Parts API was split Working on modularity (sub specs) Events Finished Enhance events (asynchronous, ordering,etc… ) AOP Started Interceptors & Decoractors enhancement Java SE First part done Boostrap CDI in Java SE JDK 8 Started Enhancements from Java 8 SPI Not Started more open SPI for 3rd party Contexts Not Started Provide a way to start/stop contexts for SE mode JSR 374
  • 30. CDI Event System Enhancements • Asynchronous Events @Inject private ExperimentalEvent<Configuration> event; … event.fireAsync(new Configuration()); • Call to event.fireAsync() returns immediately JSR 365
  • 31. CDI 2.0 @Schedule Outside EJB @ApplicationScoped public class MyScheduledBean { ... @Schedule(...) public void myScheduledTask() { ... } } @ApplicationScoped @Stereotype @Retention(RUNTIME) @Target(TYPE) @Schedule(...) public @interface MonthlyTask {} JSR 365
  • 32. JSON-P 1.1 • JSR 374 - In Early Draft Review • More Information: • https://json-processing-spec.java.net/ • Sources: https://java.net/projects/jsonp JSR 374
  • 33. JSON-P 1.1 • Updates to new API in Java EE 7 • New JSON Standards • JSON-Pointer and JSON-Patch • Editing Operations on JSON objects and arrays • Helper Classes and Enhanced Java SE 8 support JSR 374
  • 34. JSON-P 1.1 Java SE 8 Support • Java 8 Stream Support • JsonArray persons; persons.getValuesAs(JsonObject.class).stream() .filter(x->x.getString(“age”) >= 65) .forEach(System.out.println(x.getString(“name”))); JSR 374
  • 36. JSON-P 1.1: JSON-Patch public void shouldBuildJsonPatchExpressionUsingJsonPatchBuilder() { JsonPatchBuilder patchBuilder = new JsonPatchBuilder(); JsonObject result = patchBuilder.add("/email", "[email protected]") .replace("/age", 30) .remove("/phoneNumber") .test("/firstName", "John") .copy("/address/lastName", "/lastName") .apply(buildPerson()); } JSR 374
  • 37. Java EE Management API 2.0 • Oracle proposing to drop JSR from EE 8. • Currently working on Early Draft • Java EE Management API 1.0 – released 2002 • Join mailing list of JSR 373 JSR 373
  • 38. Java EE Management API 2.0 • REST Based Interface to Supersede EJB Management APIs of JSR 77 • Monitoring and deployment • SSE for Event Support (WebSockets also under consideration) JSR 373
  • 39. Bean Validation 2.0 • Add support for LocalTime, Optional, etc. • Leverage type annotation, repeatable annotations, reflective parameter name retrieval • Potential enhancements: • Customized constraint validations • Object graph validation • Example: List<@Email String> emails; JSR 380
  • 41. MVC • Model - View - Controller • JSR 371 • Active Progress…download milestones • Ozark: https://ozark.java.net/ JSR 371
  • 42. MVC • Action-Based Web Framework for Java EE • Follows suit of Spring MVC or Apache Struts • Does Not Replace JSF • Model: CDI, Bean Validation, JPA • View: Facelets, JSP (Extensible) • Controller: Layered on top of JAX-RS JSR 371
  • 43. MVC: Controller Example @Controller @Path("/customers") @View("my-view.jsp") public class CustomerController { @Inject private Models models; @GET public String getItems(){ . . . return “customers.jsp”; } JSR 371
  • 44. MVC: View Example <c:forEach var="customer" items="${customers}"> <tr> <td class="text-left">${customer.name}</td> <td class="text-center"> <form action="${pageContext.request.contextPath}/r/customers/edit" method="POST"> <input type="hidden" name="id" value="${item.id}"/> <button type="submit"> Edit </button> </form> </td> </tr> </c:forEach> JSR 371
  • 45. JSON-B • Java API for JSON Binding • JSR 367 - Public Review • Read the spec, start testing: https://java.net/projects/jsonb-spec/pages/Home JSR 367
  • 46. JSON-B Next Logical Step • Standardize means of converting JSON to Java objects and vice versa • Default mapping algorithm for converting Java classes • Draw from best of breed ideas in existing JSON binding solutions • Provide JAX-RS a standard way to support “application/json” for POJOs • JAX-RS currently supports JSON-P JSR 367
  • 47. JSON-B Mapping @Entity public class Person { @Id String name; String gender; @ElementCollection Map<String, String> phones; ... } Person duke = new Person(); duke.setName("Duke"); duke.setGender("Male"); phones = new HashMap<>(); phones.put("home", "650-123-4567"); phones.put("mobile", "650-234-5678"); duke.setPhones(phones); { "name":"Duke", "gender":"Male", "phones":{ "home":"650-123-4567", "mobile":"650-234-5678" } } JSR 367
  • 48. JSON-B: Proposed Custom Mapping • Utilization of annotations to map fields to JSON Document Elements @JsonProperty(“poolType”) public String poolType; @JsonPropertyOrder(“poolType”,”shape”) public class Pool(){ public String poolType; public String shape; … } { poolType : “Inground”, } { poolType : “Inground”, shape : “Rectangle” } JSR 367
  • 49. Java EE Security • Improve Java EE platform by ensuring that the security API is useful in the modern cloud/PaaS paradigm • Simplify, standardize, modernize • Promotes modern concepts (EL and CDI) JSR 367
  • 50. Java EE Security • Simplify security providers • Easy pluggability and mapping • Enabling existing security annotations for all beans • Proposed examples: • https://github.com/javaee-security-spec/javaee-security-proposals JSR 375
  • 51. Java EE Security: Proposed Provider @SecurityProvider public class MySecurityProvider { @Inject UserService userService; @OnAuthentication // The parameters could suit the credentials mechanism being used. public Principal getPrincipal(String username, String password) { // Construct the principal using the user service. } @OnAuthorization public String[] getRoles (Principal principal) { // Construct an array of roles using the principal and user service. } } JSR 375
  • 52. Java EE Security – JavaOne 2016 • Add OAuth and OpenID support • Secret management JSR 375
  • 53. JCache • Java Temporary Caching API • JSR 107 - Started in 2001 • Provides a common way for Java applications to create, access, update, and remove entries from caches JSR 197
  • 54. JCache • Provide applications with caching functionality…particularly the ability to cache Java objects • Define common set of caching concepts & facilities • Minimize learning curve • Maximize portability • Support in-process and distributed cache implementations JSR 107
  • 55. Others: Not Addressed • JPA • WebSocket • Concurrency Utilities • Batching • etc…
  • 57. Configuration • Standardize a mechanism of defining, injecting and using configuration within an application. • Define configuration persistence mechanisms, formats, and bindings. • Support for merging, overriding, and federating configurations from different sources • Provide a standard mechanism for working with mutable/dynamic configurations
  • 58. Health Check • Goal: Standardize health reporting • Proposed new REST API enabling health checking • Available via configurable context (/healthcheck) • Will include semantics for reporting health • Health status codes • Reasons/warnings • Health of dependencies
  • 59. Java EE Roadmap - JavaOne 2016 2016 • Feedback through Survey • Launch Java EE Next JSRs 2017 • Java EE 8 • Specs, RI, TCK complete • Initial microservices support • Define Java EE 9 • Early access implementation of Java EE 9 2018 • Java EE 9 • Specs, RI, TCK complete • Modular Java EE runtime • Enhanced microservices support
  • 60. Java EE: Take Action • Start working with Java EE 8 today • Tools: • GlassFish v5 (or Payara) • Tomcat 9 web sockets • Milestones • Examples and Specification Docs
  • 61. Java EE Resources • JavaOne 2016 EE 8 Update/Reboot • http://tinyurl.com/zeark5t • Java EE 8 by Arjan Tijms • https://javaee8.zeef.com/arjan.tijms • JavaOne 2016 Sessions • https://www.oracle.com/javaone/ • JSR 366 • https://www.jcp.org/en/jsr/detail?id=366
  • 63. Adopt-A-JSR • Started in 2007, easy way for JUGs to get involved • What you can do depends upon what you want to do & what spec leads are looking for