1 / 46

JavaEE.Next(): Java EE 7, 8, and Beyond

JavaEE.Next(): Java EE 7, 8, and Beyond. Reza Rahman Java EE/GlassFish Evangelist Reza.Rahman@Oracle.com.

terry
Download Presentation

JavaEE.Next(): Java EE 7, 8, and Beyond

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JavaEE.Next(): Java EE 7, 8, and Beyond Reza Rahman Java EE/GlassFish Evangelist Reza.Rahman@Oracle.com

  2. The following 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. Program Agenda • Overview • A Taste of API Changes • Looking Ahead

  4. Java EE Past, Present, & Future Java EE 6 Pruning,ExtensibilityEase of Dev, CDI, JAX-RS Java EE 5 Ease of Development, EJB 3.0, JPA, JSF, JAXB, JAX-WS, StAX, SAAJ Java EE 7 JMS 2.0, Batch, Caching, TX Interceptor, WebSocket, JSON J2EE 1.4 Web Services Mgmt, Deployment, Async Connector J2EE 1.3 CMP,Connector Architecture Web Profile Servlet 3.0, EJB 3.1Lite J2EE 1.2 Servlet, JSP, EJB, JMS, RMI JAX-RPC, CMP/ BMP, JSR 88 Web Profile JAX-RS 2.0

  5. Java EE 7 – Candidate JSRs Portable Extensions JSP 2.2 JSF 2.2 JAX-RS 2.0 EL 3.0 Bean Validation 1.1 Concurrency Utilities (JSR 236) Servlet 3.1 Batch Applications(JSR 352) Common Annotations 1.1 Interceptors 1.1 CDI 1.1 Java API for JSON(JSR 353) Managed Beans 1.0 EJB 3.2 Java API for WebSocket (JSR 356) New MajorRelease Updated Connector 1.6 JPA 2.1 JTA 1.2 JMS 2.0

  6. JMS 2 API modernization using dependency injection JCA adapter required Delivery delay, async send, delivery count, MDB alignment Fixes, clarifications

  7. 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); } }

  8. 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); }

  9. JMS 2/Java EE 7 JMS Resource Definition @JMSConnectionFactoryDefinition( name="java:global/jms/demoConnectionFactory", className= "javax.jms.ConnectionFactory", description="ConnectionFactory to use in demonstration") @JMSDestinationDefinition( name = "java:global/jms/demoQueue", description = "Queue to use in demonstration", className = "javax.jms.Queue", destinationName="demoQueue")

  10. JMS 2/EJB 3.2 More Standard 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) { ... } ... }

  11. Java API for WebSocket Higher level API for WebSocket Both client and server-side (Java SE and Java EE) Both declarative and programmatic

  12. Java API for WebSocket Connection Life Cycle @Singleton @WebSocketEndpoint(path=”/chat”) public class ChatServer { Set<Session> peers = ... @WebSocketOpen public void onOpen(Session peer) { peers.add(session); } @WebSocketClose public void onClose(Session session) { peers.remove(session); } ...

  13. Java API for WebSocket WebSocket Communication ... @WebSocketMessage public void message(String message, Session client) throws IOException { for (Session session : peers) { if (!session.equals(client)) { session.getRemote().sendObject(message); } } } }

  14. 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

  15. Java API for JSON Processing Writing JSON (Object Model API) JsonObject jsonObject = new JsonBuilder() .beginArray("phoneNumber") .beginObject() .add("type", "home") .add("number", "408-123-4567") .endObject() .beginObject() .add("type", ”work") .add("number", "408-987-6543") .endObject() .endArray() .build(); "phoneNumber": [ { "type": "home", "number": ”408-123-4567” }, { "type": ”work", "number": ”408-987-6543” } ]

  16. 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" } ] } Iterator<Event> it = parser.iterator(); Event event = it.next(); // START_OBJECT event = it.next(); // KEY_NAME event = it.next(); // VALUE_STRING String name = parser.getString();// "John”

  17. JAX-RS 2 • Client API • Message Filters & Entity Interceptors • Asynchronous Processing – Server & Client • Hypermedia Support • Content Negotiation • Common Configuration

  18. JAX-RS 2 Client API // Get instance of ClientClient client = ClientFactory.newClient();// Get customer name for the shipped productsString name = client.target(“../orders/{orderId}/customer”) .pathParam(”orderId", ”10”) .queryParam(”shipped", ”true”) .request() .get(String.class);

  19. 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 } ... }

  20. JPA 2.1 Schema generation Stored procedures Unsynchronized persistence contexts Entity converters Fixes and enhancements

  21. JPA 2.1 What: Generation of database artifacts Tables, indexes, constraints, generators, … Scenarios: Prototyping, database provisioning (e.g. in cloud), production To: Database, DDL, Both From: O/R mapping metadata, SQL DDL scripts When: Prior to app deployment Schema Generation

  22. JPA 2.1 javax.persistence.schema-generation-action “none”, “create”, “drop-and-create”, “drop” javax.persistence.schema-generation-target “database”, “scripts”, “database-and-scripts” javax.persistence.ddl-create-script-target/source javax.persistence.ddl-drop-script-target/source javax.persistence.sql-load-script-source Schema Generation Properties

  23. JPA 2.1 Schema Generation Example @Table(indexes= {@Index(columnList=“NAME”) @Index(columnList=“DEPT_ID”)}) @Entity public class Employee { @Id private Integer id; private String name; ... @ManyToOne private Department dept; … }

  24. 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);

  25. JPA 2.1 Unsynchronized Persistence Context @Stateful public class ShoppingCart { @PersistenceContext(type=EXTENDED, synchronization=UNSYNCHRONIZED) EntityManager em; Customer customer; Order order; public void startToShop(Integer custId) { customer = em.find(Customer.class, custId); order = new Order(); } public Collection<Book> findBooksByAuthor(String author) { ... } public Collection<Book> findBooksBySubject(String subject) { ... }

  26. JPA 2.1 Unsynchronized Persistence Context public void addToCart(Book book) { Item item = new Item(book); order.addItem(item); } public Collection<Book> viewCart() { ... } // Purchase the books public void confirmOrder() { em.joinTransaction(); customer.addOrder(order); } }

  27. JTA 1.2 Declarative transactions outside EJB Transaction scope - @TransactionScoped

  28. 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 {...}

  29. JSF 2.2 HTML5 Support @FlowScoped @ViewScoped for CDI Managed beans deprecated/CDI alignment File upload component View actions Multi-templating Security Fixes and enhancements

  30. JSF 2.2 Pass-Through HTML 5 Components <html> ... <input type=“color” jsf:value=“#{colorBean.color2}” /> <input type=“date” jsf:value=“#{calendarBean.date1}” /> ... </html>

  31. 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(); } }

  32. JSF 2.2 File Upload Component <h:inputFile id="file“ value="#{fileUploadBean.uploadedFile}"> <f:validator validatorId="FileValidator" /> </h:inputFile> @Named @RequestScoped public class FileUploadBean { private Part uploadedFile; // getter/setter public String getFileText() { String text = ""; if (null != uploadedFile) { try { InputStream is = uploadedFile.getInputStream(); text = new Scanner( is ).useDelimiter("\\A").next(); } catch (IOException ex) {} } return text; } }

  33. Batch Applications for the Java Platform API for robust batch processing targeted to Java EE

  34. Batch Applications for the Java Platform Step Example <step id=”sendStatements”> <chunk reader=”AccountReader” processor=”AccountProcessor” writer=”EmailWriter” chunk-size=”10” /> </step> @ReadItem public Account readAccount() {// read account using JPA } @ProcessItem public Account processAccount(Account account) {// calculate balance } @WriteItems public void sendEmail(List<Account> accounts) {// use JavaMail to send email }

  35. Bean Validation 1.1 Method constraints Bean Validation artifacts injectable Fixes, clarifications and enhancements

  36. Bean Validation 1.1 Method Level Constraints public void placeOrder( @NotNull String productName,@NotNull @Max(“10”) Integer quantity,@Customer String customer) { . . .} @Futurepublic Date getAppointment() { . . .}

  37. 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

  38. Concurrency Utilities for Java EE Managed Execution

  39. 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 } }}

  40. Others Servlet 3.1: Non-blocking I/O, upgrade to WebSocket, security… CDI 1.1: Ordering of interceptors, Servlet events, @Veto… EL 3.0: Lambda expressions, Collection, operators, standalone API… EJB 3.2: Truncating CMP/BMP…

  41. Java EE 8 JSON-B JCache More CDI/EJB alignment Cloud, PaaS, multitenancy/SaaS JMS.next()? JAX-RS.next()? Modularity? NoSQL? Action-oriented Web framework/HTML 5? Configuration API?

  42. Try it Out! 4.0 download.java.net/glassfish/4.0/promoted/

  43. Resources Java EE 7 Transparent Expert Groups javaee-spec.java.net Java EE 7 Reference Implementation glassfish.org The Aquarium blogs.oracle.com/theaquarium Java EE 7 Survey https://blogs.oracle.com/reza/entry/java_ee_7_survey_results

More Related