Upload
ngohuong
View
234
Download
0
Embed Size (px)
Citation preview
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 1
JavaEE.Next(): Java EE 7, 8, and Beyond
Reza Rahman
Java EE/GlassFish Evangelist
@reza_rahman
♯jdt2014_B2
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public
Agenda Overview
A Taste of API Changes
Looking Ahead
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 3
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.
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 4
Java EE Past, Present, & Future
J2EE 1.3
CMP,
Connector
Architecture
J2EE 1.4
Web
Services
Mgmt,
Deployment,
Async
Connector
Java EE 5
Ease of
Development,
EJB 3, JPA,
JSF, JAXB,
JAX-WS,
StAX, SAAJ
Java EE 6
Pruning,
Extensibility
Ease of Dev,
JAX-RS
CDI
Validation
Web Profile
Servlet 3,
EJB 3.1 Lite
Java EE 7 JMS 2,
Batch, TX,
Concurrency,
Interceptor
WebSocket JSON
Web Profile JAX-RS 2
JAX-RPC,
CMP/ BMP,
JSR 88
J2EE 1.2
Servlet, JSP,
EJB, JMS,
RMI
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 5
Java EE 7
Connector
1.7
Managed Beans 1.0 EJB 3.2
Servlet 3.1
Portable
Extension
s
JSF 2.2 JAX-RS
2.0
Bean
Valid
ati
on
1.1
JMS 2.0 JPA 2.1
EL 3.0
JTA 1.2
JSP 2.3
Interceptors 1.2 CDI 1.1
Common
Annotations
1.2
Updated Major
Release
New
Concurrency Utilities
(JSR 236)
Batch Applications
(JSR 352)
Java API for JSON
(JSR 353)
Java API for WebSocket
(JSR 356)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 6
JMS 2
API modernization using dependency injection
Delivery delay, async send, MDB alignment, JMS resource definition
Fixes, clarifications
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 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);
}
}
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 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);
}
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 9
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")
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 10
Java API for WebSocket
Higher level API for WebSocket
Both client and server-side (Java SE and Java EE)
Both declarative and programmatic
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 11
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);
}
...
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 12
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);
}
}
}
}
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 13
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
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 14
Java API for JSON Processing Writing JSON (Object Model API)
[
{
"type": "home”,
"number": "212 555-1234"
},
{
"type": "fax”,
"number": "646 555-4567"
}
]
JsonArray value =
Json.createArrayBuilder()
.add(Json.createObjectBuilder()
.add("type", "home")
.add("number", "212 555-1234")
)
.add(Json.createObjectBuilder()
.add("type", "fax")
.add("number", "646 555-4567")
)
.build();
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 15
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”
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 16
JAX-RS 2
Client API
Message Filters & Entity Interceptors
Asynchronous Processing – Server & Client
Hypermedia Support
Content negotiation
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 17
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);
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 18
JPA 2.1
Schema generation
Stored procedures
Entity Graphs
Entity converters
Unsynchronized persistence contexts
Fixes and enhancements
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 19
JPA 2.1
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”
Schema Generation Properties
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 20
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);
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 21
JTA 1.2
Declarative transactions outside EJB
Transaction scope - @TransactionScoped
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 22
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 {...}
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 23
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
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 24
JSF 2.2 Pass-Through HTML 5 Components
<html>
...
<input type=“color” jsf:value=“#{colorBean.color2}” />
<input type=“date” jsf:value=“#{calendarBean.date1}” />
...
</html>
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 25
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();
}
}
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 26
Batch Applications for the Java Platform
API for robust batch processing targeted to Java EE, Java SE
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 27
Batch Applications for the Java Platform Step Example
<step id=”sendStatements”>
<chunk reader=”accountReader”
processor=”accountProcessor”
writer=”emailWriter”
item-count=”10” />
</step>
@Named(“accountReader")
...implements ItemReader... {
public Account readItem() {
// read account using JPA
@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
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 28
Bean Validation 1.1
Method constraints
Bean Validation artifacts injectable
Fixes, clarifications and enhancements
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 29
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() {
. . .
}
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 30
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
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 31
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
}
}
}
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 32
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…
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 33
Java EE 8 Community Survey
https://java.net/downloads/javaee-spec/JavaEE8_Community_Survey_Results.pdf
https://blogs.oracle.com/ldemichiel/entry/results_from_the_java_ee
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 34
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
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 35
Try it Out!
http://dlc.sun.com.edgesuite.net/glassfish/
4.0.1/promoted/
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 36
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
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Public 37