Your SlideShare is downloading. ×
The Java EE 7 Platform: Higher Productivity & Embracing HTML 5
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

The Java EE 7 Platform: Higher Productivity & Embracing HTML 5

3,387
views

Published on

Video and slides synchronized, mp3 and slide download available at http://bit.ly/13EoXmQ. …

Video and slides synchronized, mp3 and slide download available at http://bit.ly/13EoXmQ.

Arun Gupta demoes some of the new features introduced or enhanced in Java EE 7: HTML5, JAX-RS 2, JMS 2, Batch Processing and Caching API, WebSocket, etc. Filmed at qconlondon.com.


Arun Gupta is a Java evangelist working at Oracle. He has extensive world wide speaking experience on myriad of topics and loves to engage with the community, customers, partners, and JUGs everywhere to spread the goodness of Java. He is a prolific blogger at http://blogs.oracle.com/arungupta with over 1200 blog entries. Twitter: @arungupta

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,387
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.1 Engage Session #: 7050
  • 2. InfoQ.com: News & Community Site• 750,000 unique visitors/month• Published in 4 languages (English, Chinese, Japanese and BrazilianPortuguese)• Post content from our QCon conferences• News 15-20 / week• Articles 3-4 / week• Presentations (videos) 12-15 / week• Interviews 2-3 / week• Books 1 / monthWatch the video with slidesynchronization on InfoQ.com!http://www.infoq.com/presentations/Java-ee7-html5
  • 3. Presented at QCon Londonwww.qconlondon.comPurpose of QCon- to empower software development by facilitating the spread ofknowledge and innovationStrategy- practitioner-driven conference designed for YOU: influencers ofchange and innovation in your teams- speakers and topics driving the evolution and innovation- connecting and catalyzing the influencers and innovatorsHighlights- attended by more than 12,000 delegates since 2007- held in 9 cities worldwide
  • 4. The Java EE 7 Platform:Productivity++ andEmbracing HTML5Arun Gupta, Java EE & GlassFish Guyblogs.oracle.com/arungupta@arungupta
  • 5. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.3 Engage Session #: 7050The preceding is intended to outline our general product direction. It isintended for information purposes only, and may not be incorporatedinto any contract. It is not a commitment to deliver any material, code,or functionality, and should not be relied upon in making purchasingdecisions. The development, release, and timing of any features orfunctionality described for Oracle s products remains at the solediscretion of Oracle.
  • 6. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.4 Engage Session #: 7050Java EE 6 PlatformDecember 10, 2009
  • 7. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5 Engage Session #: 7050Java EE 6 – Key Statistics§  50+ Million Java EE 6 Component Downloads§  #1 Choice for Enterprise Developers§  #1 Application Development Platform§  Fastest implementation of a Java EE release
  • 8. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.6 Engage Session #: 7050Java EE 7 Revised ScopeProductivity and HTML5•  Higher Productivity–  Less Boilerplate–  Richer Functionality–  More Defaults•  HTML5 Support–  WebSocket–  JSON–  HTML5 Friendly Markup
  • 9. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.7 Engage Session #: 7050Java EE 7 – Candidate JSRsConnector1.6Managed Beans 1.0 EJB 3.2Servlet 3.1PortableExtensionsJSF 2.2JAX-RS2.0BeanValidation1.1JMS 2.0JPA 2.1EL 3.0JTA 1.2JSP 2.2Interceptors 1.1 CDI 1.1CommonAnnotations 1.1UpdatedMajorReleaseNewJava Caching API(JSR 107)Java API for WebSocket(JSR 356)Batch Applications(JSR 352)Java API for JSON(JSR 353)Concurrency Utilities(JSR 236)
  • 10. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.8 Engage Session #: 7050Java API for RESTful Web Services 2.0•  Client API•  Message Filters & Entity Interceptors•  Asynchronous Processing – Server & Client•  Hypermedia Support•  Common Configuration
  • 11. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.9 Engage Session #: 7050Java API for RESTful Web Services 2.0Client API - Now// Get instance of ClientClient client = ClientFactory.newClient();

// Get customer name for the shipped productsString name = client.target(“../orders/{orderId}/customer”)
.resolveTemplate(”orderId", ”10”)
.queryParam(”shipped", ”true”)
.request()
.get(String.class);"
  • 12. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.10 Engage Session #: 7050Java Message Service 2.0•  Less verbose•  Reduce boilerplate code•  Resource injection•  Connection, Session, and other objects areAutoCloseable•  Requires Resource Adapter for Java EE containers•  Simplified API in both Java SE and EESimplify the existing API
  • 13. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.11 Engage Session #: 7050Java Message Service 2.0@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) {"//. . .
}
}
}
}"Sending a Message using JMS 1.1Application ServerSpecific ResourcesBoilerplate CodeException Handling
  • 14. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.12 Engage Session #: 7050Java Message Service 2.0@Inject
JMSContext context;""@Resource(lookup = "java:global/jms/demoQueue”)
Queue demoQueue;""public void sendMessage(String payload) {"context.createProducer().send(demoQueue, payload);"}"Sending message using JMS 2.0
  • 15. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.13 Engage Session #: 7050Java API for JSON Processing 1.0•  API to parse and generate JSON•  Streaming API–  Low-level, efficient way to parse/generate JSON–  Provides pluggability for parsers/generators•  Object Model–  Simple, easy-to-use high-level API–  Implemented on top of Streaming API•  Binding JSON to Java objects forthcoming
  • 16. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.14 Engage Session #: 7050{""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_OBJECTevent = it.next(); // KEY_NAMEevent = it.next(); // VALUE_STRINGString name = parser.getString(); // "John”"Java API for JSON Processing 1.0Streaming API – JsonParser
  • 17. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.15 Engage Session #: 7050Java API for WebSocket 1.0§ API for WebSocket Client/Endpoints–  Annotation-driven (@WebSocketEndpoint)–  Interface-driven (Endpoint)–  Client (@WebSocketClient)§ SPI for data frames–  WebSocket opening handshake negotiation§ Integration with Java EE Web container
  • 18. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.16 Engage Session #: 7050Java API for WebSocket 1.0Hello World – POJO/Annotation-drivenimport javax.websocket.*;

@ServerEndpoint("/hello")
public class HelloBean {

@OnMessage
public String sayHello(String name) {
return “Hello “ + name;
}
}"
  • 19. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.17 Engage Session #: 7050Java API for WebSocket 1.0@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);
}

. . ."Chat Server
  • 20. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.18 Engage Session #: 7050Java API for WebSocket 1.0. . .

@OnMessage"public void message(String message, Session client) {"for (Session peer : peers) {
peer.getRemote().sendObject(message);
}
}
}"Chat Server (contd.)
  • 21. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.19 Engage Session #: 7050Bean Validation 1.1§ Open: Spec, Reference Implementation, TCK§ Alignment with Dependency Injection§ Method-level validation–  Constraints on parameters and return values–  Check pre-/post-conditions
  • 22. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.20 Engage Session #: 7050Bean Validation 1.1Method Parameter and Result ValidationBuilt-inCustom@Future
public Date getAppointment() {
//. . .
}"public void placeOrder( 
@NotNull String productName,
@NotNull @Max(“10”) Integer quantity,
@Customer String customer) { 
//. . .
}"
  • 23. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.21 Engage Session #: 7050Batch Applications for the Java Platform 1.0§ Suited for non-interactive, bulk-oriented and long-running tasks§ Computationally intensive§ Can execute sequentially/parallel§ May be initiated–  Adhoc–  Scheduled§  No scheduling APIs included
  • 24. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.22 Engage Session #: 7050•  Job: Entire batch process–  Put together through a Job Specification Language (XML)•  Step: Independent, sequential phase of a job–  ItemReader: Retrieval of input for a step, one at a time–  ItemProcessor: Business processing of an item–  ItemWriter: Output of an item, chunks of items at a time•  JobOperator: Manage batch processing•  JobRepository: Metadata for jobsBatch Applications for the Java Platform 1.0Concepts
  • 25. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.23 Engage Session #: 7050Batch Applications for the Java Platform 1.0<step id=”sendStatements”>"<chunk reader ref=”AccountReader”"processor ref=”AccountProcessor”
writer ref=”EmailWriter”"chunk-size=”10” />"</step>"…implements ItemReader<Account> {
public Account readAccount() {
// read account using JPA"}""…implements ItemProcessor<Account,Statement>"public Statement processAccount(Account account) {
// calculate balance"}""…implements ItemWriter<Statement>"public void sendEmail(List<Statement> accounts) {
// use JavaMail to send email"}""Job Specification Language – Chunked Step
  • 26. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.24 Engage Session #: 7050Java Persistence API 2.1§ Schema Generation§ Unsynchronized Persistence Contexts§ Bulk update/delete using Criteria"§ User-defined functions using FUNCTION§ Stored Procedure Query
  • 27. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.25 Engage Session #: 7050Servlet 3.1§ Non-blocking I/O§ Protocol Upgrade§ Security Enhancements
  • 28. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.26 Engage Session #: 7050Servlet 3.1public 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) {
. . .
}
}
}"Non-blocking IO - Traditional
  • 29. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.27 Engage Session #: 7050Servlet 3.1AsyncContext context = request.startAsync();
ServletInputStream input = request.getInputStream();
input.setReadListener(
new MyReadListener(input, context)); "Non-blocking I/O: doGet Code Sample
  • 30. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.28 Engage Session #: 7050Servlet 3.1@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) {
. . .
}
}
. . .
"Non-blocking I/O: MyReadListener Code Sample
  • 31. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.29 Engage Session #: 7050Concurrency Utilities for Java EE 1.0§ Provide concurrency capabilities to Java EE applicationcomponents–  Without compromising container integrity§ Support simple (common) and advanced concurrencypatternsGoals
  • 32. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.30 Engage Session #: 7050Concurrency Utilities for Java EE 1.0§ Recommended to bind in java:comp/env/concurrentsubcontext<resource-env-ref>
<resource-env-ref-name>
concurrent/BatchExecutor
</resource-env-ref-name>
<resource-env-ref-type>
javax.enterprise.concurrent.ManagedExecutorService
</resource-env-ref-type>
</resource-env-ref>"Defining ManagedExecutorService using JNDI
  • 33. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.31 Engage Session #: 7050Concurrency Utilities for Java EE 1.0public class TestServlet extends HTTPServlet {
@Resource(name=“concurrent/BatchExecutor”)
ManagedExecutorService executor;

Future future = executor.submit(new MyTask());

class MyTask implements Runnable {
public void run() { 
. . . // task logic
}
}
}
"Submit Tasks to ManagedExecutorService using JNDI
  • 34. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.32 Engage Session #: 7050JavaServer Faces 2.2§ Flow Faces§ Resource Library Contracts§ HTML5 Friendly Markup Support–  Pass through attributes and elements§ Cross Site Request Forgery Protection§ Loading Facelets via ResourceHandler"§ File Upload Component
  • 35. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.33 Engage Session #: 70504.0Java EE 7 – Implementation Statusdownload.java.net/glassfish/4.0/promoted/
  • 36. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.34 Engage Session #: 7050Java EE 8 and BeyondStandards-based cloud programming model•  Deliver cloud architecture•  Multi tenancy for SaaSapplications•  Incremental delivery of JSRs•  Modularity based on JigsawJava EE 7PaaSEnablementMultitenancyNoSQLJSON-BModularityCloudStorageThin ServerArchitecture
  • 37. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.35 Engage Session #: 7050Adopt-a-JSRHow do I get started ? – glassfish.org/adoptajsr
  • 38. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.36 Engage Session #: 7050Adopt-a-JSRParticipating JUGs
  • 39. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.37 Engage Session #: 7050SPEAK UP, BE HEARDIF YOU DON’T SAY A WORD, EVERYTHING WILL STAY THE SAMEGothenburg JUG
  • 40. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.38 Engage Session #: 7050Call to Action•  Specs: javaee-spec.java.net•  Implementation: glassfish.org•  The Aquarium: blogs.oracle.com/theaquarium•  Adopt a JSR: glassfish.org/adoptajsr•  NetBeans: wiki.netbeans.org/JavaEE7
  • 41. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.39 Engage Session #: 7050Q&A
  • 42. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.40 Engage Session #: 7050
  • 43. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.41 Engage Session #: 7050