Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java EE 8 Update

730 views

Published on

Java EE 8 Presentation delivered at JDK.IO and Java2Days

Published in: Software
  • Settling for less on valentine's? Then you need VigRX pLUS! ★★★ https://tinyurl.com/yy3nfggr
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Java EE 8 Update

  1. 1. JAVA EE 8 UPDATE Ryan Cuprak
  2. 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. 3. Importance of Java EE https://javaee-guardians.io/java-ee-adoption-surveys
  4. 4. Java EE Ecosystem
  5. 5. Microservices and Java EE http://microprofile.io
  6. 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. 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. 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. 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. 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
  11. 11. UPDATED SPECIFICATION
  12. 12. Servlet 4.0 • Early Draft published 10/2015 • Early implementation available in Tomcat 9 JSR 369 Expert Group Activity
  13. 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. 14. Servlet 4.0: HTTP/2 Support NOTE: HTTPS only for browsers!
  15. 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. 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. 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. 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. 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. 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. 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. 22. JAX-RS 2.1 • Conditional JAXB on Runtimes • Integration with JSON-B • Support for CDI in Java SE JSR 370
  23. 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. 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. 25. JSF 2.3 Enhanced CDI Integration Injection of Resources @Inject FacesContext facesContext; @ApplicationMap @Inject Map applicationMap; JSR 372
  26. 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. 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. 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. 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. 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. 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. 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. 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. 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
  35. 35. JSON-P 1.1: JSON-Pointer JSR 374
  36. 36. 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
  37. 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. 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. 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
  40. 40. NEW SPECIFICATIONS
  41. 41. MVC • Model - View - Controller • JSR 371 • Active Progress…download milestones • Ozark: https://ozark.java.net/ JSR 371
  42. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 52. Java EE Security – JavaOne 2016 • Add OAuth and OpenID support • Secret management JSR 375
  53. 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. 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. 55. Others: Not Addressed • JPA • WebSocket • Concurrency Utilities • Batching • etc…
  56. 56. PROPOSED JSRS
  57. 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. 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. 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. 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. 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
  62. 62. Join Us! https://javaee-guardians.io
  63. 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

×