javaee 7, na era do cloud computing
DESCRIPTION
Slides da apresentação sobre Java EE 7, na era do Cloud Computing. Palestra realizada durante o #TDC2012.TRANSCRIPT
Globalcode – Open4education
Java EE 7, na era do Cloud Computing
Eder Magalhães @edermag
www.yaw.com.br
Globalcode – Open4education
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
Computação em nuvem...
Globalcode – Open4education
Modelos de serviços para Cloud
Globalcode – Open4education
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
A filosofia ...
A plataforma Java EE oferece serviços!
Globalcode – Open4education
A nova filosofia !
A plataforma Java EE é o serviço!
Globalcode – Open4education
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
Modelo de implantação atual
! Mapear as configurações dos serviços utilizados;
Globalcode – Open4education
Modelo de implantação atual
! Mapear as configurações dos serviços utilizados;
1 2 3 4
Globalcode – Open4education
Modelo de implantação atual
! Mapear as configurações dos serviços utilizados;
1 2 3 4
5 deploy ear/war
Globalcode – Open4education
Auto provisionamento
! Configuração via serviço cloud!
1
2 deploy ear/war
Globalcode – Open4education
Multi-tenancy
! Locação da mesma infra-estrutura e/ou aplicação para vários clientes.
Globalcode – Open4education
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
Outras melhorias...
Globalcode – Open4education
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
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
Exemplo JPA 2.1 (II)
/*stored procedure */
StoredProcedreQuery sp = EntityManager.createNamedStoredProcedureQuery("procExecute");
sp.registerStoredProcedureParameter(1,
String.class,
ParameterMode.INOUT);
sp.setParameter(1, "Executando stored procedure");
sp. registerStoredProcedureParameter(2,
Integer.class,
ParameterMode.IN);
sp.setParameter(2, 50);
sp.execute();
String result = sp.getOutputParameterValue(1);
Globalcode – Open4education
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
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
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
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
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
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
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
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
Novidades para web...
Globalcode – Open4education
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
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
Java API for Web Sockets - new
! Define um modelo de programação para Web Sockets dentro da plataforma Java;
JSR 356
Globalcode – Open4education
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
Projeto Avatar
! Modelo de programação híbrido para diferentes clientes;
Globalcode – Open4education
Planejamento
! Previsão para o lançamento: ! 1o semestre de 2013;
*GlassFish Server 4
Globalcode – Open4education
Links ! http://java.net/projects/javaee-spec/pages/Home ! https://blogs.oracle.com/arungupta/entry/
java_ee_7_key_features
! https://blogs.oracle.com/arungupta/tags/javaee
! https://blogs.oracle.com/theaquarium/
! http://www.slideshare.net/arungupta1 ! http://glassfish.java.net/javaone2011/
! http://www.infoq.com/br/articles/javaee7-cloud-support
! http://www.infoq.com/br/news/2012/01/javaEE7-novidades