[1] O documento apresenta uma agenda sobre Java EE 7 e suas principais APIs. [2] As APIs incluem Web Socket API 1.0, Batch API 1.0, Concurrency Utilities, JSON API 1.0, JAX-RS 2.0 e outras. [3] O documento também discute a evolução da plataforma Java EE ao longo das versões.
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Java EE 7 In Action
1. Java EE 7 In Action
Rodrigo Cândido da Silva
@rcandidosilva
http://about.me/rcandidosilva
2. Agenda
! Plataforma Java EE
! Java EE 7
! Web Socket API 1.0
! Batch API 1.0
! Concurrency Utilities
! JSON API 1.0
! JAX-RS 2.0
! Java Message Service 2.0
! JavaServer Faces 2.2
! Bean Validation 1.1
! Java Persistence API 2.1
! Outras APIs
4. Java Enterprise Edition
! Suporte ao desenvolvimento de aplicações
“enterprise”
! Aplicações distribuídas, seguras, escaláveis, de alta
disponibilidade e com baixo custo de manutenção
! Plataforma para desenvolvimento de software de
pequeno, médio e grande porte em múltiplas
camadas de componentes
! Componentes “rodam” em um servidor Java EE
6. Java Enterprise Edition
! Serviços oferecidos pelos containeres Java EE:
!
!
!
!
!
!
!
!
!
Gestão de memória, ciclo de vida de objetos
Conexões, Transações, Serviço de nomes
Segurança
Tolerância a falhas
Integração
WebServices
Clustering
Alta disponibilidade
Confiabilidade...
7. Java EE History
Java EE 7
Java EE 6
Java EE 5
J2EE 1.4
J2EE 1.3
CMP,
Connector
Architecture
Web
Services
Mgmt,
Deployment,
Async
Connector
Ease of
Development,
EJB 3, JPA,
JSF, JAXB,
JAX-WS,
StAX, SAAJ
Pruning,
Extensibility
Ease of Dev,
CDI, JAX-RS
JMS 2,
Batch, TX,
Concurrency,
Interceptor,
WebSocket,
JSON
JAX-RPC, CMP/
BMP, JSR 88
Web
Profile
Servlet 3,
EJB 3.1 Lite
Web
Profile
JAX-RS 2
8. Top 10 no Java EE 6
!
!
!
!
!
!
!
!
!
!
EJB packaging no WAR
Type-safe deployment injection
Deployment descriptors opcionais (web.xml, etc)
Padronização do Facelets no JSF
EJB em apenas uma classe
Extensibilidade para Servlets e CDI
CDI events
EJBContainer API
@Schedule baseado no modelo Cron
Web Profile
10. Java EE 7 Overview
JSP 2.2
JSF 2.2
JAX-RS
2.0
EL 3.0
Concurrency Utilities
(JSR 236)
Servlet 3.1
Common
Annotations
1.1
Interceptors 1.1
Managed Beans 1.0
Connector
1.6
New
EJB 3.2
JPA 2.1
Major
Release
CDI 1.1
JTA 1.2
Updated
JMS 2.0
Bean Validation 1.1
Portable
Extensions
Batch Applications
(JSR 352)
Java API for JSON
(JSR 353)
Java API for WebSocket
(JSR 356)
11. WebSocket 1.0
! Web Socket
! Modelo de mensagem bi-direcional, full-duplex, TCP
! Definido pelo W3C
! Web Socket API 1.0
! Modelo de programação para Web Sockets da
plataforma Java
! Anotações (@ServerEndpoint, @ClientEndpoint)
! Lifecycle callback handlers
! Permite empactá-los em aplicações Java EE
15. WebSocket 1.0
WebSocket Communication
...
@OnMessage
public void message(String message, Session client)
throws IOException {
for (Session session : peers) {
if (!session.equals(client)) {
session.getRemote().sendObject(message);
}
}
}
}
16. Batch API 1.0
! Serve para executar tarefas não-iterativas e
processos longos
! Processamento computacional intensivo
! Pode ser executado em sequencial ou paralelo
! Pode ser inicializado com:
! Chamada adhoc
! Agendado
! Não há uma API de agendamento incluída
17. Batch API 1.0
!
!
!
!
Job: um processo a ser executado
Step: uma fase do job a ser executada
JobOperator: gerencia o ciclo do processamento
JobRepository: metadados dos jobs
18. Batch API 1.0
Step Example
@Named(“accountReader")
...implements ItemReader... {
public Account readItem() {
// read account using JPA
<step id=”sendStatements”>
<chunk reader=”accountReader”
processor=”accountProcessor”
writer=”emailWriter”
item-count=”10” />
</step>
@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
19. Concurrency Utilities
! Define uma API simples e padronizada para
utilização de concorrência, sem comprometer a
integridade do container
20. Concurrency Utilities
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
}
}
}
21. JSON API 1.0
!
!
!
!
API para parser e geração JSON
Streaming API
Object Model API
Realiza o binding de JSON para objetos Java
24. JAX-RS 2.0
!
!
!
!
!
!
Definição de APIs para cliente
Validar parâmetros via Bean Validation
Processamento assíncrono (server-side)
Possível definir filtros e interceptadores
Content negociation (server-side)
Suporte a Hypermedia (processar links)
25. JAX-RS 2.0
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);
26. JAX-RS 2.0
Logging Filter
public class RequestLoggingFilter
implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) {
log(requestContext);
// Non-wrapping => returns without invoking next filter
}
...
}
27. Java Message Service 2.0
Menos verboso
Redução de “boilerplate code”
Suporte a injeção de dependência
Connection, Session e outros objetos são
automaticamente finalizados (obj.close())
! Simplificação na API do Java SE e EE
!
!
!
!
29. Java Message Service 2.0
Simplified API
@Inject
private JMSContext context;
@Resource(mappedName = "jms/inboundQueue")
private Queue inboundQueue;
public void sendMessage (String payload) {
context.createProducer().send(inboundQueue, payload);
}
30. JavaServer Faces 2.2
Suporte ao Flow Faces
Integração com HTML 5
Utilização filas para múltiplas requisições Ajax
Injeção em todos os artefatos JSF (lifecycle +
converters + validators)
! Novos componentes: FileUpload & BackButton
! Mais simples:
!
!
!
!
! Tag Handler não é mais necessário
! URLs compactas para mapear TagLibraries
33. Bean Validation 1.1
!
!
!
!
Integração com outras especificações
Validação em parâmetros e/ou retorn de métodos
Validação elementos de uma coleção
Constraint composition com OR
35. Java Persistence API 2.1
!
!
!
!
!
Schema generation
Persistence Contexts não sincronizados
Bulk update/delete using Criteria API
User-defined functions using FUNCTION
Stored Procedure Query