JavaEE.Next(): Java EE 7, 8, and Beyond Reza Rahman Java EE/GlassFish Evangelist [email protected] @reza_rahman ♯jdt2014_B2 1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Overview Agenda A Taste of API Changes Looking Ahead 2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public The preceding 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. 3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Java EE Past, Present, & Future Java EE 7 Java EE 6 Java EE 5 J2EE 1.4 Web Services Mgmt, Deployment, Async Connector J2EE 1.3 J2EE 1.2 Servlet, JSP, EJB, JMS, RMI 4 CMP, Connector Architecture Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Ease of Development, EJB 3, JPA, JSF, JAXB, JAX-WS, StAX, SAAJ Pruning, Extensibility Ease of Dev, JAX-RS CDI Validation JMS 2, Batch, TX, Concurrency, Interceptor WebSocket JSON JAX-RPC, CMP/ BMP, JSR 88 Web Profile Web Profile Servlet 3, EJB 3.1 Lite JAX-RS 2 Java EE 7 JSF 2.2 Portable Extension s JAX-RS 2.0 EL 3.0 Servlet 3.1 Common Annotations 1.2 Interceptors 1.2 Managed Beans 1.0 Connector 1.7 New 5 EJB 3.2 JPA 2.1 Major Release CDI 1.1 JTA 1.2 Updated Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JMS 2.0 Concurrency Utilities (JSR 236) Bean Validation 1.1 JSP 2.3 Batch Applications (JSR 352) Java API for JSON (JSR 353) Java API for WebSocket (JSR 356) JMS 2 API modernization using dependency injection Delivery delay, async send, MDB alignment, JMS resource definition Fixes, clarifications 6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JMS 2 Old API @Resource(lookup = "java:global/jms/demoConnectionFactory") ConnectionFactory connectionFactory; @Resource(lookup = "java:global/jms/demoQueue") Queue demoQueue; public void sendMessage(String payload) { try { Connection connection = connectionFactory.createConnection(); try { Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer messageProducer = session.createProducer(demoQueue); TextMessage textMessage = session.createTextMessage(payload); messageProducer.send(textMessage); } finally { connection.close(); } } catch (JMSException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } } 7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JMS 2 Simplified API @Inject private JMSContext context; @Resource(mappedName = "jms/inboundQueue") private Queue inboundQueue; public void sendMessage (String payload) { context.createProducer().send(inboundQueue, payload); } 8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JMS 2/Java EE 7 JMS Resource Definition @JMSConnectionFactoryDefinition( name="java:global/jms/demoConnectionFactory", interfaceName= "javax.jms.ConnectionFactory", description="ConnectionFactory to use in demonstration") @JMSDestinationDefinition( name = "java:global/jms/demoQueue", description = "Queue to use in demonstration", interfaceName = "javax.jms.Queue", destinationName="demoQueue") 9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Java API for WebSocket Higher level API for WebSocket Both client and server-side (Java SE and Java EE) Both declarative and programmatic 10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Java API for WebSocket Connection Life Cycle @ServerEndpoint(”/chat”) public class ChatServer { Set<Session> peers = ... @OnOpen public void onOpen(Session peer) { peers.add(peer); } @OnClose public void onClose(Session peer) { peers.remove(peer); } ... 11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Java API for WebSocket WebSocket Communication ... @OnMessage public void message(String message, Session client) throws IOException { for (Session session : peers) { if (!session.equals(client)) { session.getRemote().sendObject(message); } } } } 12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Java API for JSON Processing API to parse, generate, transform, query JSON Object Model and Streaming API -- similar to DOM and StAX Binding JSON to Java objects forthcoming 13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Java API for JSON Processing Writing JSON (Object Model API) JsonArray value = Json.createArrayBuilder() [ { .add(Json.createObjectBuilder() .add("type", "home") "type": "home”, .add("number", "212 555-1234") "number": "212 555-1234" ) }, .add(Json.createObjectBuilder() { .add("type", "fax") "type": "fax”, .add("number", "646 555-4567") "number": "646 555-4567" } ) ] .build(); 14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Java API for JSON Processing Reading JSON (Streaming API) { "firstName": "John", "lastName": "Smith", "age": 25, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] } 15 Event event = parser.next(); // START_OBJECT event = parser.next(); // KEY_NAME event = parser.next(); // VALUE_STRING String name = parser.getString(); // "John” Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JAX-RS 2 Client API Message Filters & Entity Interceptors Asynchronous Processing – Server & Client Hypermedia Support Content negotiation 16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JAX-RS 2 Client API // Get instance of Client Client client = ClientBuilder.newClient(); // Get customer name for the shipped products String name = client.target(“../orders/{orderId}/customer”) .pathParam(”orderId", ”10”) .queryParam(”shipped", ”true”) .request() .get(String.class); 17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JPA 2.1 Schema generation Stored procedures Entity Graphs Entity converters Unsynchronized persistence contexts Fixes and enhancements 18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JPA 2.1 Schema Generation Properties javax.persistence.schema- generation.[database|scripts].action – “none”, “create”, “drop-and-create”, “drop” javax.persistence.schema- generation.scripts.[create|drop]-target javax.persistence.schema-generation.[create|drop]script-source javax.persistence.sql-load-script-source javax.persistence.schema-generation.[create|drop]source – “metadata”, “script”, “metadata-then-script”, “script-then-metadata” 19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JPA 2.1 Stored Procedures @Entity @NamedStoredProcedureQuery(name="topGiftsStoredProcedure”, procedureName="Top10Gifts") public class Product { StoredProcedreQuery query = EntityManager.createNamedStoredProcedureQuery( "topGiftsStoredProcedure"); query.registerStoredProcedureParameter(1, String.class, ParameterMode.INOUT); query.setParameter(1, "top10"); query.registerStoredProcedureParameter(2, Integer.class, ParameterMode.IN); query.setParameter(2, 100); . . . query.execute(); String response = query.getOutputParameterValue(1); 20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JTA 1.2 Declarative transactions outside EJB Transaction scope - @TransactionScoped 21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JTA 1.2 @Transactional Annotation @Inherited @InterceptorBinding @Target({TYPE, METHOD}) @Retention(RUNTIME) public @interface Transactional { TxType value() default TxType.REQUIRED; Class[] rollbackOn() default {}; Class[] dontRollbackOn() default {}; } @Transactional(rollbackOn={SQLException.class}, dontRollbackOn={SQLWarning.class}) public class UserService {...} 22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JSF 2.2 HTML5 Support @FlowScoped @ViewScoped for CDI Managed beans deprecated/CDI alignment Stateless views Resource library contracts File upload component View actions Fixes and enhancements 23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JSF 2.2 Pass-Through HTML 5 Components <html> ... <input type=“color” jsf:value=“#{colorBean.color2}” /> <input type=“date” jsf:value=“#{calendarBean.date1}” /> ... </html> 24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public JSF 2.2 Faces Flow @Named @FlowScoped(id="flow-a") public class FlowABean implements Serializable { public String getName() { return "FlowABean"; } public String getReturnValue() { return "/return1"; } @Produces public Flow getFlow(FlowBuilder builder) { builder.startNode("router1"); builder.flowReturn("success").fromOutcome("/complete"); builder.flowReturn("errorOccurred").fromOutcome("error"); builder.switchNode("router1") .navigationCase().condition("#{facesFlowScope.customerId == null}") .fromOutcome("create-customer") .defaultOutcome("view-customer"); builder.viewNode("create-customer"); builder.viewNode("maintain-customer-record"); builder.methodCall("upgrade-customer") .method("#{maintainCustomerBean.upgradeCustomer}").defaultOutcome("view-customer"); builder.initializer("#{maintainCustomerBean.initializeFlow}"); builder.finalizer("#{maintainCustomerBean.cleanUpFlow}"); return builder.getFlow(); } } 25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Batch Applications for the Java Platform API for robust batch processing targeted to Java EE, Java SE 26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Batch Applications for the Java Platform Step Example @Named(“accountReader") ...implements ItemReader... { public Account readItem() { // read account using JPA <step id=”sendStatements”> <chunk reader=”accountReader” processor=”accountProcessor” writer=”emailWriter” item-count=”10” /> </step> @Named(“accountProcessor") ...implements ItemProcessor... { Public Statement processItems(Account account) { // read Account, return Statement @Named(“emailWriter") ...implements ItemWriter... { public void writeItems(List<Statements> statements) { // use JavaMail to send email 27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Bean Validation 1.1 Method constraints Bean Validation artifacts injectable Fixes, clarifications and enhancements 28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Bean Validation 1.1 Method Level Constraints public void placeOrder( @NotNull String productName, @NotNull @Max(“10”) Integer quantity, @Customer String customer) { . . . } @Future public Date getAppointment() { . . . } 29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Concurrency Utilities for Java EE Provides simple, safe API for concurrency in Java EE Builds on Java SE concurrency – java.util.concurrent.ExecutorService Relatively low-level API Important enabler for Java EE ecosystem 30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Concurrency Utilities for Java EE Managed Task Executor public class TestServlet extends HTTPServlet { @Resource(name=“concurrent/MyExecutorService”) ManagedExecutorService executor; Future future = executor.submit(new MyTask()); class MyTask implements Runnable { public void run() { ... // Task logic } } } 31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Others Servlet 3.1: Non-blocking I/O, upgrade to WebSocket, security… CDI 1.1: Global enablement, @AroundConstruct, @Vetoed… EL 3.0: Lambda expressions, collections, operators, standalone API… EJB 3.2: Truncating CMP/BMP… 32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Java EE 8 Community Survey https://blogs.oracle.com/ldemichiel/entry/results_from_the_java_ee https://java.net/downloads/javaee-spec/JavaEE8_Community_Survey_Results.pdf 33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Java EE 8 Possibilities HTTP 2 JSON-B JCache CDI 2 CDI/EJB alignment Security Action-oriented Web framework/HTML 5 alignment Java SE 8 alignment Cloud, PaaS, multitenancy/SaaS Configuration, deployment, management, monitoring Further pruning 34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Try it Out! http://dlc.sun.com.edgesuite.net/glassfish/ 4.0.1/promoted/ 35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public Resources Java EE Tutorials – http://docs.oracle.com/javaee/7/tutorial/doc/home.htm Digging Deeper – http://docs.oracle.com/javaee/7/firstcup/doc/home.htm – https://glassfish.java.net/hol/ – https://java.net/projects/cargotracker/ Java EE 7 Transparent Expert Groups – http://javaee-spec.java.net Java EE 7 Reference Implementation – http://glassfish.org The Aquarium – http://blogs.oracle.com/theaquarium 36 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public
© Copyright 2024 ExpyDoc