Architectural Considerations For Complex Mobile And Web Applications
Indic threads pune12-java ee 7 platformsimplification html5
1. The Java EE 7 Platform:
Simplicity, Productivity and HTML 5
Sivakumar Thyagarajan
Oracle India
2. Disclaimer
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.
4. Java EE 6 – Key Statistics
40+ Million Java EE 6 Component Downloads
#1 Choice for Enterprise Developers
#1 Application Development Platform
Fastest implementation of a Java EE release
5. Top Ten Features in Java EE 6
1. EJB packaging in a WAR
2. Type-safe dependency injection
3. Optional deployment descriptors (web.xml, faces-config.xml)
4. JSF standardizing on Facelets
5. One class per EJB
6. Servlet and CDI extension points
7. CDI Events
8. EJBContainer API
9. Cron-based @Schedule
10. Web Profile
6. Java EE 7 Revised Scope
Productivity and HTML5
• Higher Productivity
– Less Boilerplate
– Richer Functionality
– More Defaults
• HTML5 Support
– WebSocket
– JSON
– HTML5 Forms
7. Java EE 7 – Candidate JSRs
JAX-RS Java Caching API
Portable JSP 2.2 JSF 2.2 2.0
EL 3.0 (JSR 107)
Extension
Bean Validation 1.1
s Concurrency Utilities
Servlet 3.1 (JSR 236)
Common Batch Applications
Interceptors 1.1 CDI 1.1 (JSR 352)
Annotations 1.1
Java API for JSON
Managed Beans 1.0 EJB 3.2 (JSR 353)
Connector Java API for WebSocket
JPA 2.1 JTA 1.2 JMS 2.0 (JSR 356)
1.7
New Major Updated
Release
8. Java API for RESTful Web Services 2.0
• Client API
• Message Filters & Entity Interceptors
• Asynchronous Processing – Server & Client
• Hypermedia Support
• Common Configuration
9. Java API for RESTful Web Services 2.0
Client API - Before
String address = String.format("http://…/orders/%0$s/customer?shipped=%1$b",
"10", true);
URL url = new URL(address);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(false);
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
//. . .
}
10. 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);
11. Java API for RESTful Web Services 2.0
Filters
@Provider
class LoggingFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext context) {
logRequest(ctx.getRequest());
// non-wrapping => returns without invoking next filter
}
}
12. Java API for RESTful Web Services 2.0
Client-side Async
Client client = ClientFactory.newClient();
Future<String> future = client.target("http://.../atm/{card}/balance")
.pathParam("card", "1111222233334444")
.queryParam("pin", "1234")
.request("text/plain")
.async()
.get(
new InvocationCallback<String>() {
public void completed(String result) {
}
public void failed(InvocationException e) {
}
}
);
13. Java Message Service 2.0
Simplify the existing API
• 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
14. Java Message Service 2.0
Sending message using JMS 1.1
@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); 13 lines of
messageProducer.send(textMessage); code just
} finally { to send a
connection.close(); message
}
} catch (JMSException ex) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
}
}
21. Java Message Service 2.0
Simpler API to close JMS objects Create closeable
resources in a try-
@Resource(lookup = "jms/connFactory")
with-resources block
ConnectionFactory cf;
@Resource(lookup="jms/inboundQueue")
Destination dest;
public void sendMessage (String payload) throws JMSException {
try ( Connection conn = connectionFactory.createConnection();
Session session = conn.createSession();
MessageProducer producer = session.createProducer(dest);
){
Message mess = sess.createTextMessage(payload);
producer.send(mess);
} catch(JMSException e){ close() is called
// exception handling automatically
} at end of block
}
22. Java Message Service 2.0
Introducing JMSContext and JMSProducer JMSContext
combines
Connection
and Session
@Resource(lookup = "java:global/jms/demoConnectionFactory")
ConnectionFactory connectionFactory;
Payload
@Resource(lookup = "java:global/jms/demoQueue") can be sent
Queue demoQueue; directly
public void sendMessage (String payload) {
try (JMSContext context = connectionFactory.createContext();){
context.createProducer().send(demoQueue, payload);
} catch (JMSRuntimeException ex) {
// exception handling
} close() is called
} automatically
No checked at end of block
exceptions
thrown
23. Java Message Service 2.0
Default resource definition
Default resource definition Or
@JmsConnectionFactory
@Inject
JMSContext context;
@Resource(lookup = "java:global/jms/demoQueue”)
Queue demoQueue;
public void sendMessage(String payload) {
context.createProducer().send(demoQueue, payload);
}
13 lines 1 line
24. 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
25. Java API for JSON Processing 1.0
Streaming API – JsonParser and JsonGenerator
• JsonParser
• Parses JSON in a streaming way from input sources
• Similar to StaX’s XMLStreamReader, a pull parser
• Created using
• Json.createParser(…)
• Json.createParserFactory().createParser(…)
• Parser state events
• START_ARRAY, END_ARRAY, START_OBJECT, END_OBJECT, ...
26. Java API for JSON Processing 1.0
Streaming API – JsonParser and JsonGenerator
• JsonGenerator
• Generates JSON in a streaming way to output sources
• Similar to StaX’s XMLStreamWriter
• Created using
• Json.createGenerator(…)
• Json.createGeneratorFactory().createGenerator(…)
• Optionally, configured with features
• E.g. for pretty printing
28. Java API for JSON Processing 1.0
Object Model API
• JsonObject/JsonArray – JSON object and array
structures
• JsonString and JsonNumber for string and number values
• JsonBuilder – Builds JsonObject and JsonArray
• JsonReader – Reads JsonObject and JsonArray from
input source
• JsonWriter – Writes JsonObject and JsonArray to output
source
29. Java API for JSON Processing 1.0
DOM API – JsonReader
• Reads JsonObject and JsonArray from input source
– I/O Reader, InputStream (+ encoding)
• Optionally, configured with features
• Uses pluggable JsonParser
// Reads a JSON object
try(JsonReader reader = new JsonReader(io)) {
JsonObject obj = reader.readObject();
}
30. Java API for WebSocket 1.0
• Create WebSocket Client/Endpoints
• Annotation-driven (@WebSocketEndpoint)
• Interface-driven (Endpoint)
• Integration with Java EE Web container
31. Java API for WebSocket 1.0
Hello World – POJO/Annotation-driven
import javax.net.websocket.annotations.*;
@WebSocketEndpoint("/hello")
public class HelloBean {
@WebSocketMessage
public String sayHello(String name) {
return “Hello “ + name;
}
}
32. Java API for WebSocket 1.0
WebSocket Annotations
Annotation Level Purpose
@WebSocketEndpoint class Turns a POJO into a WebSocket Endpoint
@WebSocketOpen method Intercepts WebSocket Open events
@WebSocketClose method Intercepts WebSocket Close events
@WebSocketMessage method Intercepts WebSocket Message events
method
@WebSocketPathParam parameter
Flags a matched path segment of a URI-template
@WebSocketError method Intercepts errors during a conversation
33. Java API for WebSocket 1.0
@WebSocketEndpoint Attributes
Relative URI or URI template
value e.g. “/hello” or “/chat/{subscriber-level}”
decoders list of message decoder classnames
encoders list of message encoder classnames
subprotocols list of the names of the supported subprotocols
34. 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
35. Bean Validation 1.1
Method Parameter and Result Validation
public void placeOrder(
@NotNull String productName,
Built-in
@NotNull @Max(“10”) Integer quantity,
Custom @Customer String customer) {
//. . .
}
@Future
public Date getAppointment() {
//. . .
}
36. 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
37. Batch Applications for the Java Platform 1.0
Concepts
• 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
39. Java Temporary Caching API 1.0
• API and semantics for temporary, in-memory caching of
Java objects
• SPI for implementers
• Designed to support “local” and “distributed” caching
• Caching strategies supported
By value (default)
By reference (not suitable for “distributed” caching)
40. Java Temporary Caching API 1.0
• javax.cache.*
• Delivered as part of Java EE 7
• Immediately usable by Java EE 6, Spring and Guice
• Immediately usable by any Java app
• Not a Data Grid specification
• JSR 107 does not mandate a topology
• JSR 347 does: builds on JSR 107
41. Java Temporary Caching API 1.0
Key Concepts
Cache Manager =>Caches
Cache => Entries
Entry => Key,Value
• CacheManager acquired via CacheManagerFactory
• CacheManagerFactory acquired via Service Provider
META-INF/services/javax.cache.spi.CachingProvider
42. Java Temporary Caching API 1.0
Code Sample – Blog
public class BlogManager {
@CachePut(cacheName=”blogManager”)
public void createEntry(
@CacheKeyParam String title,
@CacheValue Blog blog) {...}
...
43. Java Temporary Caching API 1.0
Code Sample – Blog
...
@CacheResult(cacheName="blogManager")
public Blog getBlogEntry(String title) {...}
@CacheResult(cacheName="blogManager")
public Blog getEntryCached(
String randomArg,
@CacheKeyParam String title) {...}
...
44. Java Temporary Caching API 1.0
Annotations – Blog Sample
...
@CacheRemoveEntry(cacheName="blogManager")
public void removeBlogEntry(String title) {...}
@CacheRemoveAll(cacheName="blogManager")
public void removeAllBlogs() {...}
}
45. Java Persistence API 2.1
Schema Generation
Unsynchronized Persistence Contexts
Converters
Bulk update/delete using Criteria
User-defined functions using FUNCTION
Stored Procedure Query
47. Enterprise JavaBeans 3.2
Updates: Opt-out passivation of Stateful Session Beans
@Stateful(passivationCapable=false)
public class HelloBean {
private NonSerializableType ref = …;
…
}
48. Enterprise JavaBeans 3.2
Updates: Simplified Rules for Local/Remote Client Views
@Stateless
public class Bean implements Foo, Bar {
}
Local
@Local @Stateless
public class Bean implements Foo, Bar {
}
Remote
@Remote @Stateless
public class Bean implements Foo, Bar {
}
49. Enterprise JavaBeans 3.2
Updates: Simplified Rules for Local/Remote Client Views
@Remote
public interface Foo { . . . }
public interface Bar { . . . ] Remote
@Stateless
public class Bean implements Foo, Bar {
}
55. Concurrency Utilities for Java EE 1.0
Goals
• Provide concurrency capabilities to Java EE application
components
• Without compromising container integrity
• Support simple (common) and advanced concurrency
patterns
• Provide consistency between Java SE and Java EE
concurrency programming model
• Extend the Concurrency Utilities API (JSR 166)
56. Concurrency Utilities for Java EE 1.0
ManagedExecutorService
• Manageable version of
java.util.concurrent.ExecutorService
• Lookup using JNDI
• Java EE components create task classes
• Implement java.lang.Runnable or java.util.concurrent.Callable
• Submitted using submit or invoke methods
• Multiple (configurable) executors are permitted
57. Concurrency Utilities for Java EE 1.0
Defining ManagedExecutorService using JNDI
• 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>
58. Concurrency Utilities for Java EE 1.0
Submit Tasks to ManagedExecutorService using JNDI
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
}
}
}
59. Java Transaction API 1.2
• Declarative transactions outside EJB
• Based on CDI interceptors
• Adds annotation and standard values to
javax.transaction package
60. Java Transaction API 1.2
public @interface Transactional {
TxType value() default TxType.REQUIRED
}
public enum TxType {
REQUIRED,
REQUIRED_NEW,
MANDATORY,
SUPPORTS,
NOT_SUPPORTED,
NEVER
}
61. Java Transaction API 1.2
public class ShoppingCart {
...
@Transactional
public void checkOut() {...}
...
}
62. JavaServer Faces 2.2
HTML5 Friendly Markup Support
Pass through attributes and elements
Faces Flows
Cross Site Request Forgery Protection
Loading Facelets via ResourceHandler
File Upload Component
Multi-templating
63. Contexts & Dependency Injection 1.1
Embedded mode to startup outside Java EE container
Global ordering of interceptors and decorators
API for managing built-in contexts
Send Servlet events as CDI events
...
64. Java EE 7 – Implementation Status
4.0
http://download.java.net/glassfish/4.0/promoted/
65. Java EE 8 and Beyond
Standards-based cloud programming model
• Deliver cloud architecture Storage
NoSQL
• Multi tenancy for SaaS JSON-B
Multitenancy
Java EE 7
applications Concurrency
Cloud
• Incremental delivery of JSRs
PaaS
Enablement Thin Server
Architecture
• Modularity based on Jigsaw
66. Call to Action
• Java EE 7 Expert Group
– javaee-spec.java.net
• Java EE 7 Reference Implementation
– glassfish.org
• The Aquarium
– blogs.oracle.com/theaquarium
• Adopt-a-JSR
– glassfish.org/adoptajsr
67. Transparency
• Oracle’s Java EE 7 JSRs are run in the open on java.net
• http://javaee-spec.java.net
• One project per spec – e.g., jpa-spec, jax-rs-spec, jms-spec,
connector-spec …
• Publicly viewable Expert Group mail archive
• Users observer list gets copies of all Expert Group emails
• Publicly viewable download area
• Publicly viewable issue tracker
• Commitment to update to JCP 2.8 Process
68. Status and Schedule
• All JSRs up and running
• All Early Drafts, and several Public Drafts
• Final release target: Q2 2013
69. GlassFish Roadmap
GlassFish v3 GlassFish Server 3.1 GlassFish Server 3.1.2
• Java EE 6 support • Centralized administration • Bug Fixes
• Single instance • Clustering / HA
• GlassFish Server Control
• Incremental features
• GlassFish Enterprise Mgr
2009 2010 2011 2012 2013
GlassFish Server 3.0.1 GlassFish Server 3.1.1 GlassFish Server 4
• Oracle branding • Bug fixes • Java EE 7
• Oracle platform support • Multitenancy
• Oracle interoperability
• Updated components
• Incremental features • PaaS-enablement
70. The Java EE 7 Platform:
Simplicity, Productivity and HTML 5
Sivakumar Thyagarajan
Oracle India