O documento discute as novidades da plataforma Java EE 7, incluindo o foco em serviços de computação em nuvem, auto provisionamento e multi-tenancy. A especificação Java EE 7 também trará melhorias em APIs existentes como JPA, JSF e JAX-RS e novas APIs como JSON-P e WebSocket. O lançamento está previsto para o primeiro semestre de 2013.
1. Java EE 7, na era do Cloud Computing
Eder Magalhães
@edermag
www.yaw.com.br
Globalcode
–
Open4education
2. Agenda
! Serviços de cloud computing atuais;
! A nova filosofia da plataforma Java EE;
! Objetivos da plataforma Java EE 7;
! Auto provisionamento;
! Multi-tenancy;
! Novas APIs & melhorias nas APIs atuais;
! Novidades do Java EE 7 para web;
! Planejamento do Java EE 7;
! Links;
Globalcode
–
Open4education
5. Foco: padrão para PaaS
! Produtos com suporte a Java:
! Amazon Elastic Beanstalk;
! Cloud Foundry;
! Google App Engine;
! Red Hat OpenShift;
! CloudBees;
! Heroku;
Muito pouco (quase nada) é padronizado!
Globalcode
–
Open4education
6. A filosofia ...
A plataforma Java EE oferece serviços!
Globalcode
–
Open4education
7. A nova filosofia !
A plataforma Java EE é o serviço!
Globalcode
–
Open4education
8. Java EE 7, objetivos da especificação
! Metadados e provisionamento automático;
! Elasticidade e escalabilidade autônoma;
! Suporte a Multi-tenancy nas APIs atuais;
! Adicionar APIs importantes na nuvem;
! Apoio as tecnologias HTML5 (WebSocket, JSON);
! Melhorias em APIs antigas;
! Definição de novas APIs;
! Atualização do Web Profile;
JSR 342
Globalcode
–
Open4education
9. Modelo de implantação atual
! Mapear as configurações dos serviços utilizados;
Globalcode
–
Open4education
10. Modelo de implantação atual
! Mapear as configurações dos serviços utilizados;
1 2 3 4
Globalcode
–
Open4education
11. Modelo de implantação atual
! Mapear as configurações dos serviços utilizados;
1 2 3 4
5 deploy ear/war
Globalcode
–
Open4education
12. Auto provisionamento
! Configuração via serviço cloud!
1
2 deploy ear/war
Globalcode
–
Open4education
13. Multi-tenancy
! Locação da mesma infra-estrutura e/ou aplicação
para vários clientes.
Globalcode
–
Open4education
14. Suporte a multi-tenancy
! Flexibilidade em distribuir instâncias da mesma
aplicação para diferentes clientes (tenants);
! Mapeamento do tenant é realizado no container;
! Algumas APIs que suportaram multi-tenancy:
! JPA 2.1;
! EJB 3.2;
! Servlets 3.1;
! JMS 2.0;
Globalcode
–
Open4education
16. Java Persistence API 2.1
! UPDATE e DELETE em lote usando Criteria;
! Novidades em JPA QL:
! FUNCTION: uso de funções pré-definidas;
! TREAT: permite cast em consultas;
! ON: outra abordagem para relacionamentos;
! Suporte a consultas via Stored Procedures;
! Listeners utilizando CDI;
! Controle da sincronização do persistence context;
JSR 338
Globalcode
–
Open4education
17. Exemplo JPA 2.1 (I)
//bulk update
CriteriaUpdate<Produto> q =
cb.createCriteriaUpdate(Produto.class);
Root<Produto> s = q.from(Produto.class);
q.set(s.get(Produto_.status), "indisponivel");
q.where(cb.lt(s.get(Produto_.preco), 100));
//downcasting via JPA-QL
SELECT l.nome, l.ISBN
FROM Pedido p JOIN TREAT(p.produto AS Livro) l;
Globalcode
–
Open4education
19. JavaServer Faces 2.2
! Integração com HTML5;
! Utilizar 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;
! cc:interfaces opcional; JSR 344
Globalcode
–
Open4education
20. 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 negotiation (server-side);
! Suporte a Hypermedia (processar links);
JSR 339
Globalcode
–
Open4education
21. Exemplo JAX-RS 2.0 (Server)
@Path("/produtoAsync")
public class ProdutoService {
@Context ExecutionContext ctx;
@GET @Suspend
public Product longOp() {
Executors.newSingleThreadExecutor().submit(
new Runnable() {
public void run() {
Produto p = qryFromDatabase();
ctx.resume(p);
}
});
}
} Globalcode
–
Open4education
22. Exemplo JAX-RS 2.0 (Client)
Client c = ClientFactory.newClient();
Future<String> f = c.target("http://.../produtoAsync")
.request("text/plain")
.async()
.get( new InvocationCallback<Produto>() {
@Override //sucesso
public void completed(Produto p) { ... }
@Override //falha
public void failed(InvocationException e) {
System.err.println(e.getCause());
}
} );
Globalcode
–
Open4education
23. Bean Validation 1.1
! Integração com outras especificações;
! Validação em parâmetros e/ou retorno de
métodos;
! Validar elementos de uma coleção;
! Constraint composition com OR;
JSR 349
Globalcode
–
Open4education
24. Exemplo Bean Validation 1.1
@MethodValidated
public class OrderService {
public void placeOrder(
@NotNull @Size(min=3) String customerCode,
@NotNull @Valid Item item){ ... }
@NotNull @Future
public Date getNextAvailableDeliveryDate(){ ... }
}
Globalcode
–
Open4education
25. Java Message Service 2.0
! Simplificar a API;
! Reduzir o volume de código na troca de
mensagens;
! Integração com CDI (@Inject);
! Connection, Session e outros são AutoCloseable;
! Maior integração entre provider e servidores;
JSR 343
Globalcode
–
Open4education
26. Concurrency utilities - new
! Define uma API simples e padronizada para
utilização de concorrência em componentes da
plataforma Java EE, sem comprometer a
integridade do container;
JSR 236
Globalcode
–
Open4education
28. JSON-P 1.0 - new
! Define uma API para representar conteúdo JSON;
! Define uma API para consumir/produzir JSON;
! Não cobre o binding de objetos Java x JSON;
JSR 353
Globalcode
–
Open4education
29. Exemplo JSON-P
JsonObject jObj = new JsonBuilder()
.beginObject()
.add("nome", "Eder")
.add("idade", 30)
.beginObject("endereco")
.add("logr", "Rua Casa do Ator, nro 285")
.add("cidade", "Sao Paulo")
.endObject()
.endObject()
.build();
String json = "{"nome":"Eder","idade":"30"}";
JsonValue jValue = new JsonReader(new StringReader(json))
.readObject();
Globalcode
–
Open4education
30. Java API for Web Sockets - new
! Define um modelo de programação para Web
Sockets dentro da plataforma Java;
JSR 356
Globalcode
–
Open4education
31. Outras especificações
! Servlets 3.1 (JSR 340);
! Expression Language 3.0 (JSR 341);
! EJB 3.1 (JSR 345);
! CDI 1.1 (JSR 346);
! State Managment (JSR 350);
! Batch Application for Java Platform (JSR 352);
Globalcode
–
Open4education
32. Projeto Avatar
! Modelo de programação híbrido para diferentes
clientes;
Globalcode
–
Open4education
33. Planejamento
! Previsão para o lançamento:
! 1o semestre de 2013;
*GlassFish Server 4
Globalcode
–
Open4education