java ee past, present and future - hroug · java api for websocket (jsr 356) concurrency utilities...
TRANSCRIPT
![Page 1: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/1.jpg)
<Insert Picture Here>
Java EE – Past, Present and Future
Mike Keith, Oracle
![Page 2: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/2.jpg)
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.
Standard Disclaimer
![Page 3: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/3.jpg)
Agenda
• Explore the Past
• Analyze the Present
• Foresee the Future
• Claim victory and go eat lunch
![Page 4: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/4.jpg)
Java SE Timeline
![Page 5: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/5.jpg)
0
10
20
30
40
50
60
13
22 19 21
31 27
55
Java Standard Edition
JDK 1.1
JDK 1.2
JDK 1.3
JDK 1.4
SE 5
SE 6
SE 7
Java SE Release Cycle Length
![Page 6: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/6.jpg)
Java EE Timeline
![Page 7: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/7.jpg)
Java EE Release Cycle Length
![Page 8: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/8.jpg)
Java EE Release Features
J2EE 1.2
Servlet, JSP, EJB, JMS,
RMI
J2EE 1.3
CMP, Connector
Architecture
J2EE 1.4
Web Services,
Deployment
Java EE 5
Ease of Dev, EJB 3, JPA, JSF, JAXB, JAX-WS,
StAX, SAAJ
Java EE 6
Pruning, Extensibility, Ease of Dev, CDI, JAX-RS, Web Profile
Java EE 7
Batch, Web Sockets,
JSON Parsing,
Transaction Interceptor, Concurrency
![Page 9: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/9.jpg)
Java EE 6 Success
• 40+ Million Java EE 6 Component Downloads
• #1 Choice for Enterprise Developers
• #1 Application Development Platform
• Fastest implementation of a Java EE release
![Page 10: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/10.jpg)
Java EE 7 Specifications
Connector 1.6
Managed Beans 1.0 EJB 3.2
Servlet 3.1
Portable
Extensions
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.2
Interceptors 1.1 CDI 1.1 Common
Annotations 1.1
Updated Major Release
New
Batch Applications (JSR 352)
Java API for WebSocket (JSR 356)
Concurrency Utilities (JSR 236)
Java API for JSON (JSR 353)
![Page 11: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/11.jpg)
Java API for
JSON Processing
(JSON-P)
![Page 12: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/12.jpg)
JavaScript Object Notation (JSON)
• Simple format for portable data
• Fulfils same purpose as XML, but easier to read and write
• Started from JavaScript, now used by REST and
Web Sockets, etc.
• API’s exported by social media (Twitter, Facebook Graph API, etc.)
• Limited set of types
• Objects, arrays, key-value pairs, strings, numbers, booleans, null
• Simple syntax
• { } around objects, [ ] around arrays, : between key and value
• Comma separator
![Page 13: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/13.jpg)
JSON Example
{
"firstName": "Mike",
"lastName": "Keith",
"age": 21,
"phoneNumbers": [
{ "type": "home",
"number": "1-613-123-456" },
{ "type": "mobile",
"number": "1-613-987-6543" }
]
}
![Page 14: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/14.jpg)
Java API for JSON Processing (JSON-P)
• 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 (similar to XML DOM API)
• Implemented on top of Streaming API
• JSON binding to Java objects (JSON-B) to come later
![Page 15: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/15.jpg)
JSON-P 1.0 – Streaming API
•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_OBJECT, END_OBJECT
• START_ARRAY, END_ARRAY
• KEY_NAME, VALUE_STRING, VALUE_NUMBER,
VALUE_TRUE, VALUE_FALSE, VALUE_NULL
![Page 16: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/16.jpg)
JSON-P 1.0 – Streaming API
{
"firstName": "Mike",
"lastName": "Keith",
"age": 21,
"phoneNumbers": [
{ "type": "home",
"number": "1-613-123-456" },
{ "type": "mobile",
"number": "1-613-987-6543" }
]
}
START_OBJECT
KEY_NAME
VALUE_NUMBER
VALUE_STRING
START_ARRAY
END_ARRAY
END_OBJECT
Iterator<Event> iter = parser.iterator();
iter.next(); iter.next();
String attributeName = parser.getString();
iter.next();
String attributeValue = parser.getString();
![Page 17: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/17.jpg)
JSON-P 1.0 – Streaming API
•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
![Page 18: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/18.jpg)
JSON-P 1.0 – Streaming API
JsonGenerator jsonGen = Json.createGenerator(…);
jsonGen.writeStartObject()
.write("firstname", "Mike")
.write("lastname", "Keith")
.write("age", 21)
.writeEndObject();
jsonGen.close();
{
"firstName": "Mike",
"lastName": "Keith",
"age": 21
}
![Page 19: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/19.jpg)
JSON-P 1.0 – Object Model API
• JsonObject/JsonArray – object and array structures
• JsonString/JsonNumber – string and number values
• JsonObjectBuilder – Builds JsonObjects
• JsonArrayBuilder – Builds JsonArrays
• JsonReader – Reads JsonObject and JsonArray
from input source
• JsonWriter – Writes JsonObject and JsonArray
to output source
![Page 20: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/20.jpg)
JSON-P 1.0 – Object Model API
JsonObject person = Json.createObjectBuilder()
.add("firstName", "Mike")
.add("lastName", "Keith")
.add("age", 21)
.build();
{
"firstName": "Mike",
"lastName": "Keith",
"age": 21
}
![Page 21: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/21.jpg)
JSON-P 1.0 – Object Model API
• Reads JsonObject and JsonArray from input source
• Uses pluggable JsonParser
• Reads from InputStream or Reader
try (JsonReader reader = Json.createReader(input)) {
JsonObject person = reader.readObject();
}
![Page 22: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/22.jpg)
JSON-P 1.0 – Object Model API
• Writes JsonObject and JsonArray to output source
• Uses pluggable JsonGenerator
• Writes to an OutputStream or Writer
try (JsonWriter writer = Json.createWriter(output)) {
writer.writeObject(person);
}
![Page 23: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/23.jpg)
Can stay under water for 15 minutes at a time
Second only to humans in ability to "modify" their environment
Use their tail as an alarm
Culture Break – Beavers
![Page 24: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/24.jpg)
Java API for
WebSockets
![Page 25: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/25.jpg)
Java API for WebSockets 1.0
• API for WebSocket Client/Server Endpoints
• Annotation-driven or code-driven
• Server endpoint
– @ServerEndpoint or subclass Endpoint class
• Client endpoint
– @ClientEndpoint or subclass Endpoint class
• Integration with Java EE Web container
– ServerContainer accessible as ServletContext attribute to permit dynamic registration of endpoints
![Page 26: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/26.jpg)
Java API for WebSockets 1.0
import javax.websocket.OnMessage; import javax.websocket.server.ServerEndpoint; @ServerEndpoint("/hello") public class HelloBean { @OnMessage public String sayHello(String name) { return “Hello “ + name; } }
![Page 27: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/27.jpg)
WebSocket Annotations
Annotation Level Purpose
@ServerEndpoint class Turns a POJO into a WebSocket Endpoint
@ClientEndpoint class Turns a POJO into a WebSocket Client
@OnOpen method Intercepts WebSocket connection Open events
@OnClose method Intercepts WebSocket connection Close events
@OnMessage method Intercepts WebSocket Message events
@OnError method Intercepts errors during a conversation
@PathParam method
parameter Flags a matched path segment of a URI-template
![Page 28: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/28.jpg)
@ServerEndpoint Elements
value Relative URI or URI template
e.g. “/hello” or “/chat/{subscriber-level}”
configurator Custom configurator to use to create new instances of the endpoint
decoders List of message decoder classes
encoders List of message encoder classes
subprotocols List of the names of the supported subprotocols
![Page 29: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/29.jpg)
WebSocket Custom Payloads
@ServerEndpoint( value="/hello", encoders={MyMessage.class}, decoders={MyMessage.class} ) public class MyEndpoint { . . . }
![Page 30: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/30.jpg)
WebSocket Custom Payloads
public class MyMessage implements Decoder.Text<MyMessage>, Encoder.Text<MyMessage> { public JsonObject jsonObject;
public void init(EndpointConfig config) {} public void destroy() {}
public boolean willDecode(String string) { return true; } public MyMessage decode(String s) { jsonObject = Json.createReader(newStringReader(s)) .readObject(); return this;
}
public String encode(MyMessage myMessage) { return myMessage.jsonObject.toString(); } }
![Page 31: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/31.jpg)
WebSocket Client Side
@ClientEndpoint public class HelloClient { @OnMessage public void message(String message, Session session) { // process message from server } }
WebSocketContainer container = ContainerProvider .getWebSocketContainer();
container.connectToServer(HelloClient.class, “…/hello”);
![Page 32: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/32.jpg)
WebSocket Chat Example
@ServerEndpoint("/chat") public class ChatBean {
Set<Session> peers = Collections.synchronizedSet(…); @OnOpen public void open(Session peer) { peers.add(peer); } @OnClose public void close(Session peer) { peers.remove(peer); }
@OnMessage public void message(String msg, Session client) { for (Session peer : peers) { peer.getRemote().sendObject(msg); } } }
![Page 33: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/33.jpg)
What is so good about Java EE?
Very broad and healthy platform of technologies
Mature and time-tested
Standards offer application/knowledge portability
Both corporate and grass roots support
Continues to advance at a sustainable pace
Web Profile offers relevant technology subset
As easy to develop as any other technology
![Page 34: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/34.jpg)
What is missing from Java EE?
• Temporary Caching (JSR 107)
• JSON Binding to Java objects
• No defined notion of a cluster
• Web framework still not very easy to use
• No support for NoSQL and Big Data
• Little in-container multitenancy support defined
• Still too hard for DevOps to deploy artifacts
![Page 35: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/35.jpg)
What will be in Java EE 8 and Beyond?
Hopefully the expected stuff:
• JSON-B – Binding JSON to Java objects
• Temporary Caching
• Externalization of deployment configuration
• More features in the various subspecs
But also:
• Domain-specific services?
• Some support for cloud-based infrastructure?
![Page 36: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/36.jpg)
Java EE – Still a Winner
Java EE still defines the most ubiquitous
technologies used for enterprise
software development on the planet!
![Page 37: Java EE Past, Present and Future - HrOUG · Java API for WebSocket (JSR 356) Concurrency Utilities ... Java API for WebSockets 1.0 ... •Java EE 7 Reference Implementation glassfish.org](https://reader031.vdocuments.mx/reader031/viewer/2022020315/5b0cbb107f8b9abc0a8ca20e/html5/thumbnails/37.jpg)
More Information
• Java EE landing page oracle.com/us/javaee
• Java EE 7 Tutorial docs.oracle.com/javaee/7/tutorial/doc/
• Java EE 7 Reference Implementation glassfish.org
• The Aquarium blogs.oracle.com/theaquarium