The Java EE 7 Platform Productivity++ and HTML5 Arun Gupta Director, Developer Advocacy, Red Hat blog.arungupta.me, @arungupta 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Picture Here
Java: Broadest Industry Adoption 9,000,000 JAVA DEVELOPERS DEPLOYING TO 18 COMPLIANT APPLICATION SERVERS 2Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java EE 7 Platform Jun 12, 2013 3Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java EE 7 Themes ENTERPRISE EDITION MEETING ENTERPRISE DEMANDS DEVELOPER PRODUCTIVITY Java EE 7  More annotated POJOs  Less boilerplate code  Cohesive integrated platform 4Copyright © 2012, Oracle and/or its affiliates. All rights reserved.     WebSockets JSON Servlet 3.1 NIO REST  Batch  Concurrency  Simplified JMS
Top Ten Features in Java EE 7 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. WebSocket client/server endpoints Batch Applications JSON Processing Concurrency Utilities Simplified JMS API @Transactional and @TransactionScoped JAX-RS Client API Default Resources More annotated POJOs Faces Flow 5Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java API for WebSocket 1.0 Server and Client WebSocket Endpoint Annotated: @ServerEndpoint, @ClientEndpoint Programmatic: Endpoint Lifecycle methods Packaging and Deployment 6Copyright © 2012, Oracle and/or its affiliates. All rights reserved. @ServerEndpoint(“/chat”) public class ChatServer { @OnMessage public void chat(String m) { . . . } }
Java API for WebSocket 1.0 Chat Server @ServerEndpoint("/chat") public class ChatBean { static Set<Session> peers = Collections.synchronizedSet(…); @OnOpen public void onOpen(Session peer) { peers.add(peer); } @OnClose public void onClose(Session peer) { peers.remove(peer); } . . . 7Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java API for WebSocket 1.0 Chat Server (contd.) . . . @OnMessage public void message(String message) { for (Session peer : peers) { peer.getRemote().sendObject(message); } } } 8Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
JSON Processing 1.0 API to parse and generate JSON Streaming API ● Low-level, efficient way to parse/generate JSON ● Similar to StAX API in XML world Object Model API ● Simple, easy to use high-level API ● Similar to DOM API in XML world 9Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java API for JSON Processing 1.0 Streaming API { "firstName": "John", "lastName": "Smith", "age": 25, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] } JsonParser p = Json.createParser(…); JsonParser.Event event = p.next(); event = p.next(); event = p.next(); String name = p.getString(); 10Copyright © 2012, Oracle and/or its affiliates. All rights reserved. // START_OBJECT // KEY_NAME // VALUE_STRING // "John”
Batch Applications for Java Platform 1.0 Suited for non-interactive, bulk-oriented, and long-running tasks Batch execution: sequential, parallel, decision-based Processing Styles ● Item-oriented: Chunked (primary) ● Task-oriented: Batchlet 11Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Batch Applications 1.0 Concepts Batch process Manage batch process Independent sequential phase of job Chunk Metadata for jobs 12Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Batch Applications 1.0 Chunked Job Specification <step id=”sendStatements”> …implements ItemReader { <chunk item-count=“3”> public Object readItem() { <reader ref=”accountReader”/> // read account using JPA <processor ref=”accountProcessor”/> } <writer ref=”emailWriter”/> </step> …implements ItemProcessor { Public Object processItems(Object account) { // read Account, return Statement } …implements ItemWriter { public void writeItems(List accounts) { // use JavaMail to send email } 13Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Concurrency Utilities for Java EE 1.0 Extension of Java SE Concurrency Utilities API Provide asynchronous capabilities to Java EE application components Provides 4 types of managed objects ● ManagedExecutorService ● ManagedScheduledExecutorService ● ManagedThreadFactory ● ContextService Context Propagation 14Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Concurrency Utilities for Java EE 1.0 Submit Tasks to ManagedExecutorService using JNDI public class TestServlet extends HttpPServlet { @Resource(name=“java:comp/DefaultManagedExecutorService”) ManagedExecutorService executor; Future future = executor.submit(new MyTask()); class MyTask implements Runnable { public void run() { . . . // task logic } } } 15Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java Message Service 2.0 Get More from Less Java EE 7 New JMSContext interface AutoCloseable JMSContext, Connection, Session, … Use of runtime exceptions Method chaining on JMSProducer Simplified message sending 16Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java Message Service 2.0 Sending a Message using JMS 1.1 @Resource(lookup = "myConnectionFactory”) ConnectionFactory connectionFactory; @Resource(lookup = "myQueue”) Queue myQueue; public void sendMessage (String payload) { Connection connection = null; try { connection = connectionFactory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(myQueue); TextMessage textMessage = session.createTextMessage(payload); messageProducer.send(textMessage); } catch (JMSException ex) { //. . . } finally { if (connection != null) { try { connection.close(); } catch (JMSException ex) { //. . . } } } } 17Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Application Server Specific Resources Boilerplate Code Exception Handling
Java Message Service 2.0 Sending a Message @Inject JMSContext context; @Resource(lookup = "java:global/jms/demoQueue”) Queue demoQueue; public void sendMessage(String payload) { context.createProducer().send(demoQueue, payload); } 18Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java API for RESTful Web Services 2.0 Client API Message Filters and Entity Interceptors Asynchronous Processing – Server and Client Common Configuration 19Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java API for RESTful Web Services 2.0 Client API // Get instance of Client Client client = ClientBuilder.newClient(); // Get customer name for the shipped products String name = client.target(“../orders/ {orderId}/customer”) .resolveTemplate(”orderId", ”10”) .queryParam(”shipped", ”true”) .request() .get(String.class); 20Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Contexts and Dependency Injection 1.1 Automatic enablement for beans with scope annotation and EJBs “beans.xml” is optional Bean discovery mode ● all: All types ● annotated: Types with bean defining annotation ● none: Disable CDI @Vetoed for programmatic disablement of classes Global ordering/priority of interceptors and decorators 21Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Bean Validation 1.1 Java EE 7 Alignment with Dependency Injection Method-level validation Constraints on parameters and return values ● Check pre-/post-conditions Integration with JAX-RS 22Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Bean Validation 1.1 Method Parameter and Result Validation public void placeOrder( @NotNull String productName, Built-in @NotNull @Max(“10”) Integer quantity, @Customer String customer) { Custom //. . . } @Future public Date getAppointment() { //. . . } 23Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java Persistence API 2.1 Schema Generation javax.persistence.schema-generation.* properties Unsynchronized Persistence Contexts Bulk update/delete using Criteria User-defined functions using FUNCTION Stored Procedure Query 24Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Servlet 3.1 Non-blocking I/O Protocol Upgrade Security Enhancements <deny-uncovered-http-methods>: Deny request to HTTP methods not explicitly covered 25Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Servlet 3.1 Non-blocking I/O Traditional public class TestServlet extends HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ServletInputStream input = request.getInputStream(); byte[] b = new byte[1024]; int len = -1; while ((len = input.read(b)) != -1) { . . . } } } 26Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Servlet 3.1 Non-blocking I/O: doGet AsyncContext context = request.startAsync(); ServletInputStream input = request.getInputStream(); input.setReadListener( new MyReadListener(input, context)); 27Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Servlet 3.1 Non-blocking read @Override public void onDataAvailable() { try { StringBuilder sb = new StringBuilder(); int len = -1; byte b[] = new byte[1024]; while (input.isReady() && (len = input.read(b)) != -1) { String data = new String(b, 0, len); System.out.println("--> " + data); } } catch (IOException ex) { . . . } } . . . 28Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
JavaServer Faces 2.2 Faces Flow Resource Library Contracts HTML5 Friendly Markup Support Pass through attributes and elements Cross Site Request Forgery Protection Loading Facelets via ResourceHandler h:inputFile: New File Upload Component 29Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java Transaction API 1.2 @Transactional: Define transaction boundaries on CDI managed beans @TransactionScoped: CDI scope for bean instances scoped to the active JTA transaction Java EE 7 30Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Java EE 7 JSRs CDI Extensions JSF 2.2, JSP 2.3, EL 3.0 Web Fragments JAX-RS 2.0, JAX-WS 2.2 JSON 1.0 WebSocket 1.0 CDI 1.1 Interceptors 1.2, JTA 1.2 Common Annotations 1.1 EJB 3.2 Managed Beans 1.0 JPA 2.1 31Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JMS 2.0 Concurrency 1.0 JCA 1.7 Batch 1.0 Bean Validation 1.1 Servlet 3.1
DOWNLOAD Java EE 7 SDK oracle.com/javaee GlassFish 4.0 Full Platform or Web Profile glassfish.org 32Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
From JBoss Community wildfly.org/download 33Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Adopt-a-JSR Participating JUGs 34Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Java EE 7 Platform: Boosting Productivity and Embracing HTML5 - Arun Gupta (Red Hat)

  • 1.
    The Java EE7 Platform Productivity++ and HTML5 Arun Gupta Director, Developer Advocacy, Red Hat blog.arungupta.me, @arungupta 1Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Picture Here
  • 2.
    Java: Broadest IndustryAdoption 9,000,000 JAVA DEVELOPERS DEPLOYING TO 18 COMPLIANT APPLICATION SERVERS 2Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 3.
    Java EE 7Platform Jun 12, 2013 3Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 4.
    Java EE 7Themes ENTERPRISE EDITION MEETING ENTERPRISE DEMANDS DEVELOPER PRODUCTIVITY Java EE 7  More annotated POJOs  Less boilerplate code  Cohesive integrated platform 4Copyright © 2012, Oracle and/or its affiliates. All rights reserved.     WebSockets JSON Servlet 3.1 NIO REST  Batch  Concurrency  Simplified JMS
  • 5.
    Top Ten Featuresin Java EE 7 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. WebSocket client/server endpoints Batch Applications JSON Processing Concurrency Utilities Simplified JMS API @Transactional and @TransactionScoped JAX-RS Client API Default Resources More annotated POJOs Faces Flow 5Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 6.
    Java API forWebSocket 1.0 Server and Client WebSocket Endpoint Annotated: @ServerEndpoint, @ClientEndpoint Programmatic: Endpoint Lifecycle methods Packaging and Deployment 6Copyright © 2012, Oracle and/or its affiliates. All rights reserved. @ServerEndpoint(“/chat”) public class ChatServer { @OnMessage public void chat(String m) { . . . } }
  • 7.
    Java API forWebSocket 1.0 Chat Server @ServerEndpoint("/chat") public class ChatBean { static Set<Session> peers = Collections.synchronizedSet(…); @OnOpen public void onOpen(Session peer) { peers.add(peer); } @OnClose public void onClose(Session peer) { peers.remove(peer); } . . . 7Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 8.
    Java API forWebSocket 1.0 Chat Server (contd.) . . . @OnMessage public void message(String message) { for (Session peer : peers) { peer.getRemote().sendObject(message); } } } 8Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 9.
    JSON Processing 1.0 APIto parse and generate JSON Streaming API ● Low-level, efficient way to parse/generate JSON ● Similar to StAX API in XML world Object Model API ● Simple, easy to use high-level API ● Similar to DOM API in XML world 9Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 10.
    Java API forJSON Processing 1.0 Streaming API { "firstName": "John", "lastName": "Smith", "age": 25, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] } JsonParser p = Json.createParser(…); JsonParser.Event event = p.next(); event = p.next(); event = p.next(); String name = p.getString(); 10Copyright © 2012, Oracle and/or its affiliates. All rights reserved. // START_OBJECT // KEY_NAME // VALUE_STRING // "John”
  • 11.
    Batch Applications forJava Platform 1.0 Suited for non-interactive, bulk-oriented, and long-running tasks Batch execution: sequential, parallel, decision-based Processing Styles ● Item-oriented: Chunked (primary) ● Task-oriented: Batchlet 11Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 12.
    Batch Applications 1.0 Concepts Batch process Manage batch process Independent sequential phaseof job Chunk Metadata for jobs 12Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 13.
    Batch Applications 1.0 ChunkedJob Specification <step id=”sendStatements”> …implements ItemReader { <chunk item-count=“3”> public Object readItem() { <reader ref=”accountReader”/> // read account using JPA <processor ref=”accountProcessor”/> } <writer ref=”emailWriter”/> </step> …implements ItemProcessor { Public Object processItems(Object account) { // read Account, return Statement } …implements ItemWriter { public void writeItems(List accounts) { // use JavaMail to send email } 13Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 14.
    Concurrency Utilities forJava EE 1.0 Extension of Java SE Concurrency Utilities API Provide asynchronous capabilities to Java EE application components Provides 4 types of managed objects ● ManagedExecutorService ● ManagedScheduledExecutorService ● ManagedThreadFactory ● ContextService Context Propagation 14Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 15.
    Concurrency Utilities forJava EE 1.0 Submit Tasks to ManagedExecutorService using JNDI public class TestServlet extends HttpPServlet { @Resource(name=“java:comp/DefaultManagedExecutorService”) ManagedExecutorService executor; Future future = executor.submit(new MyTask()); class MyTask implements Runnable { public void run() { . . . // task logic } } } 15Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 16.
    Java Message Service2.0 Get More from Less Java EE 7 New JMSContext interface AutoCloseable JMSContext, Connection, Session, … Use of runtime exceptions Method chaining on JMSProducer Simplified message sending 16Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 17.
    Java Message Service2.0 Sending a Message using JMS 1.1 @Resource(lookup = "myConnectionFactory”) ConnectionFactory connectionFactory; @Resource(lookup = "myQueue”) Queue myQueue; public void sendMessage (String payload) { Connection connection = null; try { connection = connectionFactory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(myQueue); TextMessage textMessage = session.createTextMessage(payload); messageProducer.send(textMessage); } catch (JMSException ex) { //. . . } finally { if (connection != null) { try { connection.close(); } catch (JMSException ex) { //. . . } } } } 17Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Application Server Specific Resources Boilerplate Code Exception Handling
  • 18.
    Java Message Service2.0 Sending a Message @Inject JMSContext context; @Resource(lookup = "java:global/jms/demoQueue”) Queue demoQueue; public void sendMessage(String payload) { context.createProducer().send(demoQueue, payload); } 18Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 19.
    Java API forRESTful Web Services 2.0 Client API Message Filters and Entity Interceptors Asynchronous Processing – Server and Client Common Configuration 19Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 20.
    Java API forRESTful Web Services 2.0 Client API // Get instance of Client Client client = ClientBuilder.newClient(); // Get customer name for the shipped products String name = client.target(“../orders/ {orderId}/customer”) .resolveTemplate(”orderId", ”10”) .queryParam(”shipped", ”true”) .request() .get(String.class); 20Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 21.
    Contexts and DependencyInjection 1.1 Automatic enablement for beans with scope annotation and EJBs “beans.xml” is optional Bean discovery mode ● all: All types ● annotated: Types with bean defining annotation ● none: Disable CDI @Vetoed for programmatic disablement of classes Global ordering/priority of interceptors and decorators 21Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 22.
    Bean Validation 1.1 JavaEE 7 Alignment with Dependency Injection Method-level validation Constraints on parameters and return values ● Check pre-/post-conditions Integration with JAX-RS 22Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 23.
    Bean Validation 1.1 MethodParameter and Result Validation public void placeOrder( @NotNull String productName, Built-in @NotNull @Max(“10”) Integer quantity, @Customer String customer) { Custom //. . . } @Future public Date getAppointment() { //. . . } 23Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 24.
    Java Persistence API2.1 Schema Generation javax.persistence.schema-generation.* properties Unsynchronized Persistence Contexts Bulk update/delete using Criteria User-defined functions using FUNCTION Stored Procedure Query 24Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 25.
    Servlet 3.1 Non-blocking I/O ProtocolUpgrade Security Enhancements <deny-uncovered-http-methods>: Deny request to HTTP methods not explicitly covered 25Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 26.
    Servlet 3.1 Non-blocking I/OTraditional public class TestServlet extends HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ServletInputStream input = request.getInputStream(); byte[] b = new byte[1024]; int len = -1; while ((len = input.read(b)) != -1) { . . . } } } 26Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 27.
    Servlet 3.1 Non-blocking I/O:doGet AsyncContext context = request.startAsync(); ServletInputStream input = request.getInputStream(); input.setReadListener( new MyReadListener(input, context)); 27Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 28.
    Servlet 3.1 Non-blocking read @Override publicvoid onDataAvailable() { try { StringBuilder sb = new StringBuilder(); int len = -1; byte b[] = new byte[1024]; while (input.isReady() && (len = input.read(b)) != -1) { String data = new String(b, 0, len); System.out.println("--> " + data); } } catch (IOException ex) { . . . } } . . . 28Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 29.
    JavaServer Faces 2.2 FacesFlow Resource Library Contracts HTML5 Friendly Markup Support Pass through attributes and elements Cross Site Request Forgery Protection Loading Facelets via ResourceHandler h:inputFile: New File Upload Component 29Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 30.
    Java Transaction API1.2 @Transactional: Define transaction boundaries on CDI managed beans @TransactionScoped: CDI scope for bean instances scoped to the active JTA transaction Java EE 7 30Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 31.
    Java EE 7JSRs CDI Extensions JSF 2.2, JSP 2.3, EL 3.0 Web Fragments JAX-RS 2.0, JAX-WS 2.2 JSON 1.0 WebSocket 1.0 CDI 1.1 Interceptors 1.2, JTA 1.2 Common Annotations 1.1 EJB 3.2 Managed Beans 1.0 JPA 2.1 31Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JMS 2.0 Concurrency 1.0 JCA 1.7 Batch 1.0 Bean Validation 1.1 Servlet 3.1
  • 32.
    DOWNLOAD Java EE 7SDK oracle.com/javaee GlassFish 4.0 Full Platform or Web Profile glassfish.org 32Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 33.
    From JBoss Community wildfly.org/download 33Copyright© 2012, Oracle and/or its affiliates. All rights reserved.
  • 34.
    Adopt-a-JSR Participating JUGs 34Copyright ©2012, Oracle and/or its affiliates. All rights reserved.