JUDCON India 2014 Java EE 7 talk

5,481
-1

Published on

Published in: Technology, Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,481
On Slideshare
0
From Embeds
0
Number of Embeds
30
Actions
Shares
0
Downloads
20
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

JUDCON India 2014 Java EE 7 talk

  1. 1. JavaEE.Next():Java EE 7,8 and Beyond Vijay Nair vijay.nair@oracle.com @FusionVJ
  2. 2. Java EE 7 – Candidate JSRs
  3. 3. Java EE, Past, Present & Future
  4. 4. WebSocket Primer • • HTTP is half duplex and traditional flavors of server push were long polling, Comet/AJAX → Inefficient and wasteful WebSocket to the rescue ! TCP based, bi-directional, full-duplex messaging Originally proposed as part of HTML5 W3C defined Javascript API
  5. 5. WebSocket Primer • In 4 lines Establish connection (Single TCP Connection) Send messages in both directions (Bi-directional) Send messages independent of each other (Full Duplex) End Connection
  6. 6. Java API for WebSocket • Higher level API for WebSocket • Both client and server-side (Java SE and Java EE) • Both declarative and programmatic
  7. 7. Java API for WebSocket @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); } ...
  8. 8. Java API for WebSocket ... @OnMessage public void message(String message, Session client) throws IOException { for (Session session : peers) { if (!session.equals(client)) { session.getRemote().sendObject(message); } } } • }
  9. 9. 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
  10. 10. Java API for JSON Processing Writing JSON (Object Model API) JsonArray value = Json.createArrayBuilder() [ { .add(Json.createObjectBuilder() "type": "home”, "number": "212 555-1234" }, { "type": "fax”, "number": "646 555-4567" } .add("type", "home") .add("number", "212 555-1234") ) .add(Json.createObjectBuilder() .add("type", "fax") .add("number", "646 555-4567") ).build(); ]
  11. 11. 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" } ] } Event event = parser.next(); // START_OBJECT event = parser.next(); // KEY_NAME event = parser.next(); // VALUE_STRING String name = parser.getString(); // "John”
  12. 12. Batch Applications for the Java Platform API for robust batch processing targeted to Java EE, Java SE
  13. 13. Batch Applications for the Java Platform Step Example
  14. 14. 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 and provides ManagedExecutorService ManagedScheduledExecutorService ManagedThreadFactory ContextService • Context Propagation (except Transactions !!)
  15. 15. 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 } } }
  16. 16. JMS 2 • • • API modernization using dependency injection Delivery delay, async send, MDB alignment, JMS resource definition Fixes, clarifications
  17. 17. 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); } }
  18. 18. 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); }
  19. 19. JMS 2 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")
  20. 20. JMS 2/EJB 3.2 More Standard MDB Properties @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty( propertyName = "destinationLookup", propertyValue = "jms/OrderQueue"), @ActivationConfigProperty( propertyName = "connectionFactoryLookup", propertyValue = "jms/MyConnectionFactory")}) public class OrderListener implements MessageListener { ... public void onMessage(Message message) { ... } ... }
  21. 21. JAX-RS 2 • Client API • Message Filters & Entity Interceptors • Asynchronous Processing – Server & Client • Hypermedia Support • Content negotiation
  22. 22. 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);
  23. 23. JAX-RS 2 Logging Filter public class RequestLoggingFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) { log(requestContext); // Non-wrapping => returns without invoking next filter } ... }
  24. 24. Bean Validation 1.1 • Method constraints • Bean Validation artifacts injectable • Fixes, clarifications and enhancements
  25. 25. 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() { ... }
  26. 26. JPA 2.1 • Schema generation • Stored procedures • Unsynchronized persistence contexts • Entity converters • Entity Graphs • Dynamic Named Queries • Fixes and enhancements
  27. 27. JPA 2.1 Schema Generation Properties javax.persistence.schema-generation.[database|scripts].action - “none”, “create”, “drop-and-create”, “drop” javax.persistence.schema-generation.[create|drop]-source -“metadata”, “script”, “metadata-then-script”, “script-then- metadata” javax.persistence.schema-generation.[create|drop]-script-source javax.persistence.schema-generation.scripts.[create|drop]-target javax.persistence.sql-load-script-source
  28. 28. JPA 2.1 Stored Procedures @Entity @NamedStoredProcedureQuery(name="topGiftsStoredProcedure”, procedureName="Top10Gifts") public class Product { StoredProcedureQuery 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);
  29. 29. JTA 1.2 • Declarative transactions outside EJB • Transaction scope - @TransactionScoped
  30. 30. 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 {...}
  31. 31. JSF 2.2 • HTML5 Support • @FlowScoped • @ViewScoped for CDI • Managed beans deprecated/CDI alignment • Stateless views • Resource library contracts • File upload component • Cross-Site Request Forgery handling support
  32. 32. JSF 2.2 Pass-Through HTML 5 Components <html> ... <input type=“color” jsf:value=“#{colorBean.color2}” /> <input type=“date” jsf:value=“#{calendarBean.date1}” /> ... </html>
  33. 33. JSF 2.2 Faces Flows @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(); • • }
  34. 34. Others • • • • Servlet 3.1: Non-blocking I/O, Security Enhancements CDI 1.1: Global enablement, @AroundConstruct, @Vetoed… EL 3.0: Lambda expressions, collections, operators, standalone API… EJB 3.2: Truncating CMP/BMP…
  35. 35. Java EE 8 • • • • • • • • • • • • JSON-B JCache CDI.next() More CDI/EJB alignment Cloud, PaaS, multitenancy/SaaS Security? Testability? Modularity? Management/deployment APIs? NoSQL? Action-oriented Web framework/HTML 5? JMS.next()?
  36. 36. Resources • Java EE Tutorials http://docs.oracle.com/javaee/7/tutorial/doc/home.htm http://www.programming-simplified.com/index.html • 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
  37. 37. Cargo Tracker Planned Reference Architectural Blueprint for Java EE 7 utilizing DDD • • • • Clean DDD design utilizing almost all the JSRs for Java EE 7 Demonstrates building of modern mobile/desktop applications utilizing Java EE 7 Project code is available at https://java.net/projects/cargotracker/pages/Home Contributors/Reviewers needed. Ask Reza Rahman/myself for more details
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×