Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 132
As novidades do Java EE 7:
do HTML5 ao JMS 2.0
Bruno Borges
Oracle Product Manager
Java Evangelist
Insert Picture Here
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 133
Bruno Borges
● Oracle Product Manager / Evangelist
● Desenvolvedor, Gamer
● Entusiasta em Java Embedded e JavaFX
● Twitter: @brunoborges
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 134Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 16
Agenda  Java EE 7: quais as novidades?
 Construindo aplicações HTML5
– WebSockets 1.0
– JAX-RS 2.0
– JavaServer Faces 2.2
– JSON API 1.0
 Mensageria com JMS 2.0
 Códigos de exemplo de Java EE 7
 O que vem por aí
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 135
Java EE 7: quais as novidades?
 Servlet 3.1
 Java API for JSON Processing 1.0
 Bean Validation 1.1
 Batch Applications API 1.0
 Java Persistence API 2.1
 Concurrency Utilities for Java EE 1.0
 E muito mais... :-)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 136
Java EE 7: quais as novidades?
 Web Profile updated to include
– JAX-RS
– WebSocket
– JSON-P
– EJB 3.2 Lite
 Outras APIs
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 137
Construindo aplicações HTML5
 WebSocket 1.0
 JAX-RS 2.0
 JavaServer Faces 2.2
 JSON-P API
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 138
WebSockets 1.0
 API para definir WebSockets, tanto Client como Server
– Annotation-driven (@ServerEndpoint)
– Interface-driven (Endpoint)
– Client (@ClientEndpoint)
 SPI para data frames
– Negociação handshake na abertura do WebSocket
 Integração com o Java EE Web container
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 139
WebSockets 1.0
import javax.websocket.*;
import javax.websocket.server.*;
@ServerEndpoint(“/hello”)
public class HelloBean {
    @OnMessage
    public String sayHello(String name) {
        return “Hello “ + name;
    }
}
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1310
WebSockets 1.0
@ServerEndpoint(“/chat”)
public class ChatBean {
    @OnOpen
    public void onOpen(Session peer) {
        peers.add(peer);
    }
    @OnClose
    public void onClose(Session peer) {
        peers.remove(peer);
    }
    @OnMessage
    public void message(String msg, Session client) {
        peers.forEach(p ­> p.getRemote().sendMessage(msg));
    }
}
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1311
DEMO
WebSockets
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1312
Maven Archetype para o Java EE 7
 Maven Archetypes para Java EE 7
– http://mojo.codehaus.org
 Maven Archetype com o Embedded GlassFish configurado
– http://github.com/brunoborges/javaee7-archetype
 Só precisa...
– $ mvn package embedded-glassfish:run
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1313
DEMO
Maven Archetype
Java EE 7
GlassFish Embedded
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1314
JAX-RS 2.0
 Client API
 Message Filters & Entity Interceptors
 Asynchronous Processing – Server & Client
 Suporte Hypermedia
 Common Configuration
– Compartilhar configuração comum entre diversos serviços
REST
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1315
JAX-RS 2.0 - Client
// Get instance of Client
Client client = ClientFactory.getClient();
// Get customer name for the shipped products
String name = client.target(“http://.../orders/{orderId}/customer”)
                    .resolveTemplate(“orderId”, “10”)
                    .queryParam(“shipped”, “true)”
                    .request()
                    .get(String.class);
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1316
JAX-RS 2.0 - Server
@Path("/async/longRunning")
public class MyResource {
@GET
public void longRunningOp(@Suspended AsyncResponse ar) {
ar.setTimeoutHandler(new MyTimoutHandler());
ar.setTimeout(15, SECONDS);
Executors.newSingleThreadExecutor().submit(new Runnable() {
public void run() {
...
ar.resume(result);
}});
}
}
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1317
JavaServer Faces 2.0
 Flow Faces
 HTML5 Friendly Markup
 Cross-site Request Forgery Protection
 Loading Facelets via ResourceHandler
 Componente de File Upload
 Multi-templating
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1318
JSON API 1.0
 JsonParser
– Processa JSON em modo “streaming”
– Similar ao XMLStreamReader do StaX
 Como criar
– Json.createParser(...)
– Json.createParserFactory().createParser(...)
 Eventos do processador
– START_ARRAY, END_ARRAY, START_OBJECT, END_OBJECT, ...
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1319
JSON API 1.0
"phoneNumber": [
{
"type": "home",
"number": ”408-123-4567”
},
{
"type": ”work",
"number": ”408-987-6543”
}
]
JsonGenerator jg = Json.createGenerator(..
jg.
.beginArray("phoneNumber")
.beginObject()
.add("type", "home")
.add("number", "408-123-4567")
.endObject()
.beginObject()
.add("type", ”work")
.add("number", "408-987-6543")
.endObject()
.endArray();
jg.close();
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1320
JMS para Mensageria
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1321
Java Message Service API 2.0
 Simplificação da JMS API 1.1 sem quebrar compatibilidade
 Nova API requer menos objetos
– JMSContext, JMSProducer...
 No Java EE, permite que JMSContext seja injetado e gerenciado
pelo container, usando CDI
 Objetos JMS implementam AutoCloseable
 Envio Async de mensagens
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1322
Java Message Service API 2.0
 JMSContext
 Encapsula Connection e Session
 Criado a partir de um default ConnectionFactory
– Permite especificar um ConnectionFactory também
 Unchecked exceptions
 Suporta encadeamento de métodos, para fluid style
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1323
Java Message Service API 2.0
@Resource(lookupName =
“java:comp/defaultJMSConnectionFactory”)
ConnectionFactory myJMScf;
@Resource(lookupName = “jms/inboud”)
private Queue inboundQueue;
@Inject
@JMSConnectionFactory(“jms/myCF”)
private JMSContext context;
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1324
Java Message Service API 2.0
@JMSConnectionFactoryDefinition(
name=”java:global/jms/demoCF”
className = “javax.jms.ConnectionFactory”)
@JMSDestinationDefinition(
name = “java:global/jms/inboudQueue”
className = “javax.jms.Queue”
destinationName = “inboundQueue”)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1325
Message Driven Beans para JMS 2.0
@MessageDriven(
mappedName = “jms/myQueue”,
activationConfig = {
@ActivationConfigProperty(
propertyName = “destinationLookup”,
propertyValue = “jms/myQueue”),
@ActivationConfigProperty(
propertyName = “connectionFactoryLookup”,
propertyValue = “jms/myCF”)
})
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1326
Outros exemplos
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1327
Bean Validation 1.1
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. Insert Information Protection Policy Classification from Slide 1328
Batch API 1.0
<job id=“myJob”>
<step id=“init”>
<chunk reader=“R” writer=W” processor=“P” />
<next on=“initialized” to=“process”/>
<fail on=“initError”/>
</step>
<step id=“process”>
<batchlet ref=“ProcessAndEmail”/>
<end on=”success”/>
<fail on=”*” exit-status=“FAILURE”/>
</step>
</job>
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1329
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1330
GlassFish 4.0, NetBeans, e Java EE 7
 Java EE 7 Expert Group Project
– http://javaee-spec.java.net
 GlassFish 4.0 - Java EE 7 Reference Implementation
– http://www.glassfish.org
 Adopt a JSR
– http://glassfish.org/adoptajsr
 NetBeans e Java EE 7
– http://wiki.netbeans.org/JavaEE7
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1331
GlassFish 4.0, NetBeans, e Java EE 7
 JUGs participando ativamente
 Promovendo as JSRs
– Para a comunidade Java
– Revendo specs
– Testando betas e códigos de exemplo
– Examplos, docs, bugs
– Blogging, palestrando, reuniões de JUG
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1333
OBRIGADO!
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1334
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. Insert Information Protection Policy Classification from Slide 1335

As novidades do Java EE 7: do HTML5 ao JMS 2.0

  • 1.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 132 As novidades do Java EE 7: do HTML5 ao JMS 2.0 Bruno Borges Oracle Product Manager Java Evangelist Insert Picture Here
  • 2.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 133 Bruno Borges ● Oracle Product Manager / Evangelist ● Desenvolvedor, Gamer ● Entusiasta em Java Embedded e JavaFX ● Twitter: @brunoborges
  • 3.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 134Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 16 Agenda  Java EE 7: quais as novidades?  Construindo aplicações HTML5 – WebSockets 1.0 – JAX-RS 2.0 – JavaServer Faces 2.2 – JSON API 1.0  Mensageria com JMS 2.0  Códigos de exemplo de Java EE 7  O que vem por aí
  • 4.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 135 Java EE 7: quais as novidades?  Servlet 3.1  Java API for JSON Processing 1.0  Bean Validation 1.1  Batch Applications API 1.0  Java Persistence API 2.1  Concurrency Utilities for Java EE 1.0  E muito mais... :-)
  • 5.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 136 Java EE 7: quais as novidades?  Web Profile updated to include – JAX-RS – WebSocket – JSON-P – EJB 3.2 Lite  Outras APIs
  • 6.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 137 Construindo aplicações HTML5  WebSocket 1.0  JAX-RS 2.0  JavaServer Faces 2.2  JSON-P API
  • 7.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 138 WebSockets 1.0  API para definir WebSockets, tanto Client como Server – Annotation-driven (@ServerEndpoint) – Interface-driven (Endpoint) – Client (@ClientEndpoint)  SPI para data frames – Negociação handshake na abertura do WebSocket  Integração com o Java EE Web container
  • 8.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 139 WebSockets 1.0 import javax.websocket.*; import javax.websocket.server.*; @ServerEndpoint(“/hello”) public class HelloBean {     @OnMessage     public String sayHello(String name) {         return “Hello “ + name;     } }
  • 9.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1310 WebSockets 1.0 @ServerEndpoint(“/chat”) public class ChatBean {     @OnOpen     public void onOpen(Session peer) {         peers.add(peer);     }     @OnClose     public void onClose(Session peer) {         peers.remove(peer);     }     @OnMessage     public void message(String msg, Session client) {         peers.forEach(p ­> p.getRemote().sendMessage(msg));     } }
  • 10.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1311 DEMO WebSockets
  • 11.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1312 Maven Archetype para o Java EE 7  Maven Archetypes para Java EE 7 – http://mojo.codehaus.org  Maven Archetype com o Embedded GlassFish configurado – http://github.com/brunoborges/javaee7-archetype  Só precisa... – $ mvn package embedded-glassfish:run
  • 12.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1313 DEMO Maven Archetype Java EE 7 GlassFish Embedded
  • 13.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1314 JAX-RS 2.0  Client API  Message Filters & Entity Interceptors  Asynchronous Processing – Server & Client  Suporte Hypermedia  Common Configuration – Compartilhar configuração comum entre diversos serviços REST
  • 14.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1315 JAX-RS 2.0 - Client // Get instance of Client Client client = ClientFactory.getClient(); // Get customer name for the shipped products String name = client.target(“http://.../orders/{orderId}/customer”)                     .resolveTemplate(“orderId”, “10”)                     .queryParam(“shipped”, “true)”                     .request()                     .get(String.class);
  • 15.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1316 JAX-RS 2.0 - Server @Path("/async/longRunning") public class MyResource { @GET public void longRunningOp(@Suspended AsyncResponse ar) { ar.setTimeoutHandler(new MyTimoutHandler()); ar.setTimeout(15, SECONDS); Executors.newSingleThreadExecutor().submit(new Runnable() { public void run() { ... ar.resume(result); }}); } }
  • 16.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1317 JavaServer Faces 2.0  Flow Faces  HTML5 Friendly Markup  Cross-site Request Forgery Protection  Loading Facelets via ResourceHandler  Componente de File Upload  Multi-templating
  • 17.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1318 JSON API 1.0  JsonParser – Processa JSON em modo “streaming” – Similar ao XMLStreamReader do StaX  Como criar – Json.createParser(...) – Json.createParserFactory().createParser(...)  Eventos do processador – START_ARRAY, END_ARRAY, START_OBJECT, END_OBJECT, ...
  • 18.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1319 JSON API 1.0 "phoneNumber": [ { "type": "home", "number": ”408-123-4567” }, { "type": ”work", "number": ”408-987-6543” } ] JsonGenerator jg = Json.createGenerator(.. jg. .beginArray("phoneNumber") .beginObject() .add("type", "home") .add("number", "408-123-4567") .endObject() .beginObject() .add("type", ”work") .add("number", "408-987-6543") .endObject() .endArray(); jg.close();
  • 19.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1320 JMS para Mensageria
  • 20.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1321 Java Message Service API 2.0  Simplificação da JMS API 1.1 sem quebrar compatibilidade  Nova API requer menos objetos – JMSContext, JMSProducer...  No Java EE, permite que JMSContext seja injetado e gerenciado pelo container, usando CDI  Objetos JMS implementam AutoCloseable  Envio Async de mensagens
  • 21.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1322 Java Message Service API 2.0  JMSContext  Encapsula Connection e Session  Criado a partir de um default ConnectionFactory – Permite especificar um ConnectionFactory também  Unchecked exceptions  Suporta encadeamento de métodos, para fluid style
  • 22.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1323 Java Message Service API 2.0 @Resource(lookupName = “java:comp/defaultJMSConnectionFactory”) ConnectionFactory myJMScf; @Resource(lookupName = “jms/inboud”) private Queue inboundQueue; @Inject @JMSConnectionFactory(“jms/myCF”) private JMSContext context;
  • 23.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1324 Java Message Service API 2.0 @JMSConnectionFactoryDefinition( name=”java:global/jms/demoCF” className = “javax.jms.ConnectionFactory”) @JMSDestinationDefinition( name = “java:global/jms/inboudQueue” className = “javax.jms.Queue” destinationName = “inboundQueue”)
  • 24.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1325 Message Driven Beans para JMS 2.0 @MessageDriven( mappedName = “jms/myQueue”, activationConfig = { @ActivationConfigProperty( propertyName = “destinationLookup”, propertyValue = “jms/myQueue”), @ActivationConfigProperty( propertyName = “connectionFactoryLookup”, propertyValue = “jms/myCF”) })
  • 25.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1326 Outros exemplos
  • 26.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1327 Bean Validation 1.1 public void placeOrder( @NotNull String productName, @NotNull @Max(“10”) Integer quantity, @Customer String customer) { //. . . } @Future public Date getAppointment() { //. . . }
  • 27.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1328 Batch API 1.0 <job id=“myJob”> <step id=“init”> <chunk reader=“R” writer=W” processor=“P” /> <next on=“initialized” to=“process”/> <fail on=“initError”/> </step> <step id=“process”> <batchlet ref=“ProcessAndEmail”/> <end on=”success”/> <fail on=”*” exit-status=“FAILURE”/> </step> </job>
  • 28.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1329
  • 29.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1330 GlassFish 4.0, NetBeans, e Java EE 7  Java EE 7 Expert Group Project – http://javaee-spec.java.net  GlassFish 4.0 - Java EE 7 Reference Implementation – http://www.glassfish.org  Adopt a JSR – http://glassfish.org/adoptajsr  NetBeans e Java EE 7 – http://wiki.netbeans.org/JavaEE7
  • 30.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1331 GlassFish 4.0, NetBeans, e Java EE 7  JUGs participando ativamente  Promovendo as JSRs – Para a comunidade Java – Revendo specs – Testando betas e códigos de exemplo – Examplos, docs, bugs – Blogging, palestrando, reuniões de JUG
  • 31.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1333 OBRIGADO!
  • 32.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1334 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.
  • 33.
    Copyright © 2012,Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 1335