SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
Java EE 7 In Action
Rodrigo Cândido da Silva
@rcandidosilva
http://about.me/rcandidosilva
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
Plataforma Java
!   Java SE
!   Java ME
!   Java EE
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
Java Enterprise Edition
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...
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
	
  
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
Java EE 7 Themes
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)
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
WebSocket 1.0
Connected !

open

open

message

Client

message

error
message

Server
message

close

Disconnected
WebSocket 1.0

Client

Remote
Endpoint

Session

Message
Handler

Remote
Endpoint

Internet

Session

Message
Handler

Client

Remote
Endpoint

Session

WebSocket
Endpoint

Client

Message
Handler
WebSocket 1.0
Connection Lifecycle
@ServerEndpoint(”/chat”)
public class ChatServer {
Set<Session> peers = ...
@OnOpen
public void onOpen(Session peer) {
peers.add(peer);
}
@OnClose
public void onClose(Session peer) {
peers.remove(peer);
}
...
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);
}
}
}
}
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
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
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
Concurrency Utilities
!   Define uma API simples e padronizada para
utilização de concorrência, sem comprometer a
integridade do container
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
}
}
}
JSON API 1.0
!
!
!
!

  API para parser e geração JSON
  Streaming API
  Object Model API
  Realiza o binding de JSON para objetos Java
JSON API 1.0
Writing JSON (Object Model API)
JsonArray value =
Json.createArrayBuilder()

[
{

.add(Json.createObjectBuilder()
.add("type", "home")

"type": "home ,

.add("number", "212 555-1234")

"number": "212 555-1234"

)

},

.add(Json.createObjectBuilder()

{

.add("type", "fax")

"type": "fax ,

.add("number", "646 555-4567")

"number": "646 555-4567"
}

)
.build();

]
JSON API 1.0
Reading JSON (Streaming API)
{
"firstName": "John", "lastName": "Smith", "age": 25,
"phoneNumber": [
{ "type": "home", "number": "212 555-1234" },
{ "type": "fax", "number": "646 555-4567" }
]
}
Event event = parser.next();

// START_OBJECT

event = parser.next();

// KEY_NAME

event = parser.next();

// VALUE_STRING

String name = parser.getString();

// "John”
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)
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);
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
}
...
}
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
!
!
!
!
Java Message Service 2.0
Old Client API
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);
}
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
JavaServer Faces 2.2
Pass-Through HTML 5 Components
<html>
...
<input type=“color” jsf:value=“#{colorBean.color2}” />
<input type=“date” jsf:value=“#{calendarBean.date1}” />
...
</html>
JavaServer Faces 2.2
Faces Flow
@Named
@FlowScoped(id="flow-a")
public class FlowABean implements Serializable {
public String getName() {
return "FlowABean";
}
public String getReturnValue() {
return "/return1";
}
@Produces
public Flow getFlow(FlowBuilder builder) {
builder.startNode("router1");
builder.flowReturn("success").fromOutcome("/complete");
builder.flowReturn("errorOccurred").fromOutcome("error");
builder.switchNode("router1")
.navigationCase().condition("#{facesFlowScope.customerId == null}")
.fromOutcome("create-customer")
.defaultOutcome("view-customer");
builder.viewNode("create-customer");
builder.viewNode("maintain-customer-record");
builder.methodCall("upgrade-customer")
.method("#{maintainCustomerBean.upgradeCustomer}").defaultOutcome("view-customer");
builder.initializer("#{maintainCustomerBean.initializeFlow}");
builder.finalizer("#{maintainCustomerBean.cleanUpFlow}");
return builder.getFlow();
}
}
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
Bean Validation 1.1
Method Level Constraints
public void placeOrder(
@NotNull String productName,
@NotNull @Max(“10”) Integer quantity,
@Customer String customer) {
. . .
}
@Future
public Date getAppointment() {
. . .
}
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
Java Persistence API 2.1
Schema Generation Properties
!   javax.persistence.schema-generation.[database|scripts].action
!   “none”, “create”, “drop-and-create”, “drop”
!   javax.persistence.schema-generation.scripts.[create|drop]-target
!   javax.persistence.schema-generation.[create|drop]-script-source
!   javax.persistence.sql-load-script-source
!   javax.persistence.schema-generation.[create|drop]-source
!   “metadata”, “script”, “metadata-then-script”, “script-thenmetadata”
Java Persistence API 2.1
Stored Procedures
@Entity
@NamedStoredProcedureQuery(name="topGiftsStoredProcedure”,
procedureName="Top10Gifts")
public class Product {
StoredProcedreQuery query = EntityManager.createNamedStoredProcedureQuery(
"topGiftsStoredProcedure");
query.registerStoredProcedureParameter(1, String.class,
ParameterMode.INOUT);
query.setParameter(1, "top10");
query.registerStoredProcedureParameter(2, Integer.class, ParameterMode.IN);
query.setParameter(2, 100);
. . .
query.execute();
String response = query.getOutputParameterValue(1);
Outros APIs
!   Servlet 3.1
!   Non-blocking I/O, upgrade to WebSocket, security…

!   CDI 1.1
!   Global enablement, @AroundConstruct, @Vetoed…

!   EL 3.0
!   Lambda expressions, collections, operators, standalone API

!   EJB 3.2
!   Truncating CMP/BMP…
Demonstração
Java EE 8
!
!
!
!
!
!
!
!
!
!
!

 
 
 
 
 
 
 
 
 
 
 

JSON-B
JCache
More CDI/EJB alignment
CDI.next()
Cloud, PaaS, multitenancy/SaaS
JMS.next()?
JAX-RS.next()?
Security?
Modularity?
NoSQL?
Action-oriented Web framework/HTML 5?
Perguntas e Respostas

?

Más contenido relacionado

La actualidad más candente

Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvemEvitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvemDr. Spock
 
TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2Rodrigo Cândido da Silva
 
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Microservices com Spring Cloud e Netflix OSSWorkshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Microservices com Spring Cloud e Netflix OSSRodrigo Cândido da Silva
 
Workshop Microservices - Arquitetura Microservices
Workshop Microservices - Arquitetura MicroservicesWorkshop Microservices - Arquitetura Microservices
Workshop Microservices - Arquitetura MicroservicesRodrigo Cândido da Silva
 
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootWorkshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootRodrigo Cândido da Silva
 
TDC Floripa 2017 - Criando Microservices Reativos com Java
TDC Floripa 2017 - Criando Microservices Reativos com JavaTDC Floripa 2017 - Criando Microservices Reativos com Java
TDC Floripa 2017 - Criando Microservices Reativos com JavaRodrigo Cândido da Silva
 
Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webelliando dias
 
Spring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do FrameworkSpring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do FrameworkDr. Spock
 
Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2Dr. Spock
 
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring CloudTDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring CloudRodrigo Cândido da Silva
 
As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!Diego Santos
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebElenilson Vieira
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 

La actualidad más candente (20)

Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvemEvitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
 
TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2
 
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Microservices com Spring Cloud e Netflix OSSWorkshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
 
MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)MC - Java Enterprise Edition 6 (Java EE)
MC - Java Enterprise Edition 6 (Java EE)
 
Workshop Microservices - Arquitetura Microservices
Workshop Microservices - Arquitetura MicroservicesWorkshop Microservices - Arquitetura Microservices
Workshop Microservices - Arquitetura Microservices
 
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootWorkshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring Boot
 
TDC Floripa 2017 - Criando Microservices Reativos com Java
TDC Floripa 2017 - Criando Microservices Reativos com JavaTDC Floripa 2017 - Criando Microservices Reativos com Java
TDC Floripa 2017 - Criando Microservices Reativos com Java
 
Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento web
 
Spring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do FrameworkSpring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do Framework
 
Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2Novidades do JSF: Um tour completo no JSF 2.2
Novidades do JSF: Um tour completo no JSF 2.2
 
Jee6
Jee6Jee6
Jee6
 
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring CloudTDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
 
As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!As grandes novidades do JSF 2.0!
As grandes novidades do JSF 2.0!
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
Visão Geral de EJB 3.0
Visão Geral de EJB 3.0Visão Geral de EJB 3.0
Visão Geral de EJB 3.0
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 

Destacado

Desenvolvimento de Aplicações Móveis em Java
Desenvolvimento de Aplicações Móveis em JavaDesenvolvimento de Aplicações Móveis em Java
Desenvolvimento de Aplicações Móveis em JavaWaldir R. Pires Jr
 
Proposta de Projeto de Pesquisa - CEFET - 2014
Proposta de Projeto de Pesquisa - CEFET - 2014Proposta de Projeto de Pesquisa - CEFET - 2014
Proposta de Projeto de Pesquisa - CEFET - 2014Waldir R. Pires Jr
 
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...Rodrigo Cândido da Silva
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTRodrigo Cândido da Silva
 
Suportando Aplicações Multi-tenancy com Java EE
Suportando Aplicações Multi-tenancy com Java EESuportando Aplicações Multi-tenancy com Java EE
Suportando Aplicações Multi-tenancy com Java EERodrigo Cândido da Silva
 
GUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com JavaGUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com JavaRodrigo Cândido da Silva
 
Batch Processing - Processamento em Lotes no Mundo Corporativo
Batch Processing - Processamento em Lotes no Mundo CorporativoBatch Processing - Processamento em Lotes no Mundo Corporativo
Batch Processing - Processamento em Lotes no Mundo CorporativoRodrigo Cândido da Silva
 
JavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EEJavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EERodrigo Cândido da Silva
 
ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2Rodrigo Cândido da Silva
 
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EEJavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EERodrigo Cândido da Silva
 
JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Securing RESTful Resources with OAuth2JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Securing RESTful Resources with OAuth2Rodrigo Cândido da Silva
 
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EEConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EERodrigo Cândido da Silva
 

Destacado (13)

Desenvolvimento de Aplicações Móveis em Java
Desenvolvimento de Aplicações Móveis em JavaDesenvolvimento de Aplicações Móveis em Java
Desenvolvimento de Aplicações Móveis em Java
 
Proposta de Projeto de Pesquisa - CEFET - 2014
Proposta de Projeto de Pesquisa - CEFET - 2014Proposta de Projeto de Pesquisa - CEFET - 2014
Proposta de Projeto de Pesquisa - CEFET - 2014
 
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
 
Suportando Aplicações Multi-tenancy com Java EE
Suportando Aplicações Multi-tenancy com Java EESuportando Aplicações Multi-tenancy com Java EE
Suportando Aplicações Multi-tenancy com Java EE
 
GUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com JavaGUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com Java
 
Batch Processing - Processamento em Lotes no Mundo Corporativo
Batch Processing - Processamento em Lotes no Mundo CorporativoBatch Processing - Processamento em Lotes no Mundo Corporativo
Batch Processing - Processamento em Lotes no Mundo Corporativo
 
JavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EEJavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EE
 
ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2
 
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EEJavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
 
JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Securing RESTful Resources with OAuth2JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Securing RESTful Resources with OAuth2
 
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EEConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
 

Similar a GUJavaSC - Java EE 7 In Action

GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE
GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EEGUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE
GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EERodrigo Cândido da Silva
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesRafael Ponte
 
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Ramon Durães
 
Apresentação LifeRay
Apresentação LifeRayApresentação LifeRay
Apresentação LifeRayPT.JUG
 
ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)mauriciopel
 
Rest In Peace com JBOSS RESTEasy
Rest In Peace com JBOSS RESTEasyRest In Peace com JBOSS RESTEasy
Rest In Peace com JBOSS RESTEasyArthur Cesar Oreana
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0jesuinoPower
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaEduardo Bregaida
 
Novidades de Java EE 7
Novidades de Java EE 7Novidades de Java EE 7
Novidades de Java EE 7pt_programar
 
Web Sphere Application Server
Web Sphere Application ServerWeb Sphere Application Server
Web Sphere Application ServerFabricio Carvalho
 
Inovações Na Plataforma Java
Inovações Na Plataforma JavaInovações Na Plataforma Java
Inovações Na Plataforma JavaFilipe Portes
 

Similar a GUJavaSC - Java EE 7 In Action (20)

Serra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EESerra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EE
 
GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE
GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EEGUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE
GUJavaSC - Alternativas ao Desenvolvimento do Back-end Mobile com Java EE
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer Faces
 
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
 
Flisolgo2010
Flisolgo2010Flisolgo2010
Flisolgo2010
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Acelerando o desenvolvimento java com rad 7.5
Acelerando o desenvolvimento java com rad 7.5Acelerando o desenvolvimento java com rad 7.5
Acelerando o desenvolvimento java com rad 7.5
 
Tutorial JSF 2.0 (2012)
Tutorial JSF 2.0 (2012)Tutorial JSF 2.0 (2012)
Tutorial JSF 2.0 (2012)
 
Apresentação LifeRay
Apresentação LifeRayApresentação LifeRay
Apresentação LifeRay
 
ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)
 
J2EE Na Vida Real
J2EE Na Vida RealJ2EE Na Vida Real
J2EE Na Vida Real
 
Rest In Peace com JBOSS RESTEasy
Rest In Peace com JBOSS RESTEasyRest In Peace com JBOSS RESTEasy
Rest In Peace com JBOSS RESTEasy
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.java
 
Curso jsf
Curso jsfCurso jsf
Curso jsf
 
JavaServer Faces
JavaServer FacesJavaServer Faces
JavaServer Faces
 
Novidades de Java EE 7
Novidades de Java EE 7Novidades de Java EE 7
Novidades de Java EE 7
 
Java wsdp
Java wsdpJava wsdp
Java wsdp
 
Web Sphere Application Server
Web Sphere Application ServerWeb Sphere Application Server
Web Sphere Application Server
 
Inovações Na Plataforma Java
Inovações Na Plataforma JavaInovações Na Plataforma Java
Inovações Na Plataforma Java
 

Más de Rodrigo Cândido da Silva

Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de ImplementaçãoProtegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de ImplementaçãoRodrigo Cândido da Silva
 
Protecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and StrategiesProtecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and StrategiesRodrigo Cândido da Silva
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesWorkshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesRodrigo Cândido da Silva
 
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOpsGUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOpsRodrigo Cândido da Silva
 

Más de Rodrigo Cândido da Silva (6)

Cloud Native Java EE
Cloud Native Java EECloud Native Java EE
Cloud Native Java EE
 
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de ImplementaçãoProtegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
 
Protecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and StrategiesProtecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and Strategies
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesWorkshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
 
GUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em JavaGUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em Java
 
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOpsGUJavaSC - Combinando Micro-serviços com Práticas DevOps
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
  • 3. Plataforma Java !   Java SE !   Java ME !   Java EE
  • 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
  • 9. Java EE 7 Themes
  • 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
  • 14. WebSocket 1.0 Connection Lifecycle @ServerEndpoint(”/chat”) public class ChatServer { Set<Session> peers = ... @OnOpen public void onOpen(Session peer) { peers.add(peer); } @OnClose public void onClose(Session peer) { peers.remove(peer); } ...
  • 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
  • 22. JSON API 1.0 Writing JSON (Object Model API) JsonArray value = Json.createArrayBuilder() [ { .add(Json.createObjectBuilder() .add("type", "home") "type": "home , .add("number", "212 555-1234") "number": "212 555-1234" ) }, .add(Json.createObjectBuilder() { .add("type", "fax") "type": "fax , .add("number", "646 555-4567") "number": "646 555-4567" } ) .build(); ]
  • 23. JSON API 1.0 Reading JSON (Streaming API) { "firstName": "John", "lastName": "Smith", "age": 25, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] } Event event = parser.next(); // START_OBJECT event = parser.next(); // KEY_NAME event = parser.next(); // VALUE_STRING String name = parser.getString(); // "John”
  • 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 ! ! ! !
  • 28. Java Message Service 2.0 Old Client API
  • 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
  • 31. JavaServer Faces 2.2 Pass-Through HTML 5 Components <html> ... <input type=“color” jsf:value=“#{colorBean.color2}” /> <input type=“date” jsf:value=“#{calendarBean.date1}” /> ... </html>
  • 32. JavaServer Faces 2.2 Faces Flow @Named @FlowScoped(id="flow-a") public class FlowABean implements Serializable { public String getName() { return "FlowABean"; } public String getReturnValue() { return "/return1"; } @Produces public Flow getFlow(FlowBuilder builder) { builder.startNode("router1"); builder.flowReturn("success").fromOutcome("/complete"); builder.flowReturn("errorOccurred").fromOutcome("error"); builder.switchNode("router1") .navigationCase().condition("#{facesFlowScope.customerId == null}") .fromOutcome("create-customer") .defaultOutcome("view-customer"); builder.viewNode("create-customer"); builder.viewNode("maintain-customer-record"); builder.methodCall("upgrade-customer") .method("#{maintainCustomerBean.upgradeCustomer}").defaultOutcome("view-customer"); builder.initializer("#{maintainCustomerBean.initializeFlow}"); builder.finalizer("#{maintainCustomerBean.cleanUpFlow}"); return builder.getFlow(); } }
  • 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
  • 34. Bean Validation 1.1 Method Level Constraints public void placeOrder( @NotNull String productName, @NotNull @Max(“10”) Integer quantity, @Customer String customer) { . . . } @Future public Date getAppointment() { . . . }
  • 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
  • 36. Java Persistence API 2.1 Schema Generation Properties !   javax.persistence.schema-generation.[database|scripts].action !   “none”, “create”, “drop-and-create”, “drop” !   javax.persistence.schema-generation.scripts.[create|drop]-target !   javax.persistence.schema-generation.[create|drop]-script-source !   javax.persistence.sql-load-script-source !   javax.persistence.schema-generation.[create|drop]-source !   “metadata”, “script”, “metadata-then-script”, “script-thenmetadata”
  • 37. Java Persistence API 2.1 Stored Procedures @Entity @NamedStoredProcedureQuery(name="topGiftsStoredProcedure”, procedureName="Top10Gifts") public class Product { StoredProcedreQuery query = EntityManager.createNamedStoredProcedureQuery( "topGiftsStoredProcedure"); query.registerStoredProcedureParameter(1, String.class, ParameterMode.INOUT); query.setParameter(1, "top10"); query.registerStoredProcedureParameter(2, Integer.class, ParameterMode.IN); query.setParameter(2, 100); . . . query.execute(); String response = query.getOutputParameterValue(1);
  • 38. Outros APIs !   Servlet 3.1 !   Non-blocking I/O, upgrade to WebSocket, security… !   CDI 1.1 !   Global enablement, @AroundConstruct, @Vetoed… !   EL 3.0 !   Lambda expressions, collections, operators, standalone API !   EJB 3.2 !   Truncating CMP/BMP…
  • 40. Java EE 8 ! ! ! ! ! ! ! ! ! ! !                       JSON-B JCache More CDI/EJB alignment CDI.next() Cloud, PaaS, multitenancy/SaaS JMS.next()? JAX-RS.next()? Security? Modularity? NoSQL? Action-oriented Web framework/HTML 5?