More Related Content Similar to Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7 Similar to Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7 (20) More from Roberto Cortez (6) Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 712. Websockets Chat Server
@ServerEndpoint("/chatWebSocket")!
public class ChatWebSocket {!
private static final Set<Session> sessions =
Collections.synchronizedSet(new HashSet<Session>());!
!
@OnOpen!
public void onOpen(Session session) {sessions.add(session);}!
!
@OnMessage!
public void onMessage(String message) {!
for (Session session : sessions)
{ session.getAsyncRemote().sendText(message);}!
}!
!
@OnClose!
public void onClose(Session session) {sessions.remove(session);}!
}
13. Batch Applications
•
Ideal para processos massivos, longos e nãointeractivos
•
Execução sequencial ou paralela
•
Processamento orientado à tarefa ou em secções.
15. Batch Applications - job.xml
<job id="myJob" xmlns="http://xmlns.jcp.org/xml/ns/
javaee" version="1.0">!
<step id="myStep" >!
<chunk item-count="3">!
<reader ref="myItemReader"/>!
<processor ref="myItemProcessor"/>!
<writer ref="myItemWriter"/>!
</chunk>! !
</step>!
</job>
17. Concurrency Utilities
public class TestServlet extends HttpServlet {!
@Resource(name = "concurrent/MyExecutorService")!
ManagedExecutorService executor;!
!
Future future = executor.submit(new MyTask());!
!
class MyTask implements Runnable {!
public void run() {!
! ! ! // do something!
}!
}!
}
19. JSON Processing
JsonArray jsonArray = Json.createArrayBuilder()!
.add(Json.createObjectBuilder()!
.add("name", “Jack"))!
.add("age", "30"))!
.add(Json.createObjectBuilder()!
.add("name", “Mary"))!
.add("age", "45"))!
.build();!
!
[ {“name”:”Jack”, “age”:”30”}, !
{“name”:”Mary”, “age”:”45”} ]
21. JMS
@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);!
}!
}
23. JAX-RS
•
Nova API para consumir serviços REST
•
Processamento assíncrono (cliente e servidor)
•
Filtros e Interceptors
24. JAX-RS
String movie = ClientBuilder.newClient()!
.target("http://www.movies.com/movie")!
.request(MediaType.TEXT_PLAIN)!
.get(String.class);
26. JPA
<persistence-unit name="myPU" transaction-type="JTA">!
<properties>!
<property name="javax.persistence.schemageneration.database.action" value="drop-and-create"/>!
<property name="javax.persistence.schema-generation.create-source"
value="script"/>!
<property name="javax.persistence.schema-generation.drop-source"
value="script"/>!
<property name="javax.persistence.schema-generation.create-scriptsource" value="META-INF/create.sql"/>!
<property name="javax.persistence.schema-generation.drop-scriptsource" value="META-INF/drop.sql"/>!
<property name="javax.persistence.sql-load-script-source"
value="META-INF/load.sql"/>!
</properties>!
</persistence-unit>
29. Outros
•
JTA: @Transactional, @TransactionScoped
•
Servlet: Non-blocking I/O, Segurança
•
CDI: Automáticos para EJB’s e beans anotados (beans.xml
opcional), @Vetoed
•
Interceptors: @Priority, @AroundConstruct
•
EJB: Passivation opcional
•
EL: Lambdas, API isolada
•
Bean Validator: Restrições nos parâmetros dos métodos e retornos
31. Futuro Java EE 8
•
JCache
•
Logging
•
JSON-B
•
Security
•
Testability
•
Cloud?
•
Modularity?
•
NoSQL?
32. Materiais
•
Tutorial Java EE 7 - http://docs.oracle.com/javaee/
7/tutorial/doc/home.htm
•
Exemplos Java EE 7 - https://github.com/javaeesamples/javaee7-samples