Mais conteúdo relacionado The Java EE 7 Platform: Higher Productivity & Embracing HTML 51. 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 Brazilian
Portuguese)
• 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 / month
Watch the video with slide
synchronization on InfoQ.com!
http://www.infoq.com/presentations
/Java-ee7-html5
3. Presented at QCon London
www.qconlondon.com
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
4. The Java EE 7 Platform:
Productivity++ and
Embracing HTML5
Arun Gupta, Java EE & GlassFish Guy
blogs.oracle.com/arungupta
@arungupta
5. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.3 Engage Session #: 7050
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.
6. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.4 Engage Session #: 7050
Java EE 6 Platform
December 10, 2009
7. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5 Engage Session #: 7050
Java 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 #: 7050
Java EE 7 Revised Scope
Productivity 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 #: 7050
Java EE 7 – Candidate JSRs
Connector
1.6
Managed Beans 1.0 EJB 3.2
Servlet 3.1
Portable
Extensions
JSF 2.2
JAX-RS
2.0
BeanValidation1.1
JMS 2.0JPA 2.1
EL 3.0
JTA 1.2
JSP 2.2
Interceptors 1.1 CDI 1.1
Common
Annotations 1.1
UpdatedMajor
Release
New
Java 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 #: 7050
Java 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 #: 7050
Java API for RESTful Web Services 2.0
Client API - Now
// Get instance of Client
Client client = ClientFactory.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);"
12. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.10 Engage Session #: 7050
Java Message Service 2.0
• Less verbose
• Reduce boilerplate code
• Resource injection
• Connection, Session, and other objects are
AutoCloseable
• Requires Resource Adapter for Java EE containers
• Simplified API in both Java SE and EE
Simplify the existing API
13. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.11 Engage Session #: 7050
Java 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.1
Application Server
Specific Resources
Boilerplate Code
Exception Handling
14. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.12 Engage Session #: 7050
Java 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 #: 7050
Java 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_OBJECT
event = it.next(); // KEY_NAME
event = it.next(); // VALUE_STRING
String name = parser.getString(); // "John”
"
Java API for JSON Processing 1.0
Streaming API – JsonParser
17. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.15 Engage Session #: 7050
Java 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 #: 7050
Java API for WebSocket 1.0
Hello World – POJO/Annotation-driven
import 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 #: 7050
Java 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 #: 7050
Java 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 #: 7050
Bean 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 #: 7050
Bean Validation 1.1
Method Parameter and Result Validation
Built-in
Custom
@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 #: 7050
Batch 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 jobs
Batch Applications for the Java Platform 1.0
Concepts
25. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.23 Engage Session #: 7050
Batch 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 #: 7050
Java 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 #: 7050
Servlet 3.1
§ Non-blocking I/O
§ Protocol Upgrade
§ Security Enhancements
28. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.26 Engage Session #: 7050
Servlet 3.1
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) {
. . .
}
}
}"
Non-blocking IO - Traditional
29. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.27 Engage Session #: 7050
Servlet 3.1
AsyncContext 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 #: 7050
Servlet 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 #: 7050
Concurrency Utilities for Java EE 1.0
§ Provide concurrency capabilities to Java EE application
components
– Without compromising container integrity
§ Support simple (common) and advanced concurrency
patterns
Goals
32. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.30 Engage Session #: 7050
Concurrency Utilities for Java EE 1.0
§ Recommended to bind in java:comp/env/concurrent
subcontext
<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 #: 7050
Concurrency Utilities for Java EE 1.0
public 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 #: 7050
JavaServer 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 #: 7050
4.0
Java EE 7 – Implementation Status
download.java.net/glassfish/4.0/promoted/
36. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.34 Engage Session #: 7050
Java EE 8 and Beyond
Standards-based cloud programming model
• Deliver cloud architecture
• Multi tenancy for SaaS
applications
• Incremental delivery of JSRs
• Modularity based on Jigsaw
Java EE 7
PaaS
Enablement
Multitenancy
NoSQL
JSON-B
Modularity
Cloud
Storage
Thin Server
Architecture
37. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.35 Engage Session #: 7050
Adopt-a-JSR
How do I get started ? – glassfish.org/adoptajsr
38. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.36 Engage Session #: 7050
Adopt-a-JSR
Participating JUGs
39. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.37 Engage Session #: 7050
SPEAK UP, BE HEARDIF YOU DON’T SAY A WORD, EVERYTHING WILL STAY THE SAME
Gothenburg JUG
40. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.38 Engage Session #: 7050
Call 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 #: 7050
Q&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