JAX-RS 2.0
As novidades do padrão para desenvolvimento REST
Fabio Velloso
Wednesday, September 18, 13
Fabio Velloso
• Bacharel em Ciência da Computação pela Universidade Federal
de São Carlos - UFSCar
• Fundador do SouJava
• Desenvolvendo projetos com tecnologia Java desde 96
• Professor de SOA e Web Services do curso de Pós-Graduação
"Lato-Sensu" em Desenvolvimento de Software para Web da
UFSCar
• Gerente de Arquitetura da Telefonica | VIVO
• Atualmente desenvolve projetos pessoais com Big Data, Cloud,
Design Thinking, Service Design e Economia Criativa
Wednesday, September 18, 13
Agenda
• REST
• Conceitos
• JAX-RS
• Conceitos e principais anotações
• JAX-RS 2.0
• Novidades
Wednesday, September 18, 13
Agenda
• REST
• Conceitos
• JAX-RS
• Conceitos e principais anotações
• JAX-RS 2.0
• Novidades
Wednesday, September 18, 13
REST
• Estilo de arquitetura e suas restrições
• Recursos identificados unicamente por uma URI
• Interface uniforme (GET, POST, PUT, DELETE)
• Componentes REST manipulam recursos alterando sua
representação
• Mensagens auto-descritivas e sem estado ou “stateless”
• Informações podem estar em cache
• Multiplas representações
• Hypermedia
Wednesday, September 18, 13
Aplicação CRUD com REST
• Consultar o livro por seu ID
GET http://www.soujava.org.br/books/123
• Adicionar um livro
POST http://www.soujava.org.br/books
• Alterar um livro
PUT http://www.soujava.org.br/books
• Remover o livro pelo ID
DELETE http://www.soujava.org.br/books/123
Wednesday, September 18, 13
Aplicação CRUD com REST
Wednesday, September 18, 13
Aplicação CRUD com REST
<book>
<id>123</id>
<name>Java: The Good Parts </name>
<author>Jim Waldo</author>
<isbn>0596803737</isbn>
<isbn13>978-0596803735</isbn13>
</book>
Wednesday, September 18, 13
Agenda
• REST
• Conceitos
• JAX-RS
• Conceitos e principais anotações
• JAX-RS 2.0
• Novidades
Wednesday, September 18, 13
Java API for RESTful Web Services - JSR 331
• Suporte a RESTful em Java
• API padronizada
• Programação declarativa
• Anotações
• POJO
• Integrado ao JEE6 (JSR 313)
Wednesday, September 18, 13
Java API for RESTful Web Services - JSR 331
Wednesday, September 18, 13
Java API for RESTful Web Services - JSR 331
Recurso
Recurso
Wednesday, September 18, 13
Java API for RESTful Web Services - JSR 331
Recurso
Recurso
Método HTTP
Wednesday, September 18, 13
Java API for RESTful Web Services - JSR 331
Recurso
Recurso
Método HTTP
Serialização
Serialização
Wednesday, September 18, 13
Java API for RESTful Web Services - JSR 331
• @Path, @PathParam, @Produces, @Consumes
@HeaderParam, @QueryParam, @MatrixParam
@NewCookie
Recurso
Recurso
Método HTTP
Serialização
Serialização
Wednesday, September 18, 13
Agenda
• REST
• Conceitos
• JAX-RS
• Conceitos e principais anotações
• JAX-RS 2.0
• Novidades
Wednesday, September 18, 13
JAX-RS 2.0 Java API for RESTful Web Services
• JSR 339
• Client API
• Validação
• Filters e Interceptors
• Processamento assíncrono
• Melhorias
• ResourceTemplate
• Link
JAX-RS 2.0JCP JAVA
EXTRA!!
Wednesday, September 18, 13
Client API
• Objetivos:
• Encapsular os conceitos e principais restrições da
arquitetura REST como artefatos Java em clientes
• Facilitar o consumo de RESTfull Web Services
• como JAX-RS facilitou desenvolvimento no servidor
• Compartilhar conceitos comuns entre client e server
JAX-RS
Wednesday, September 18, 13
Client API
• Padronização da API client
• Portável entre implementações
• Consumo de Web Services expostos sobre HTTP
• Pode acessar serviços REST construídos em outras
linguagens e frameworks
• ou acessar extensões como Web Dav
• Setar parâmetros e configurações
• Form, headers, SSL
Wednesday, September 18, 13
Client API
• Classes e interfaces mais importantes
• Client
• Usada para criar e acessar “web resources” e
configurar propriedades de conexões e requisições
• ClientBuilder.newClient();
• WebTarget
• encapsula um Web resource
• podendo criar e envia-lo requests e processar seus
responses
• .get() , .post() , .put() , .delete()
Wednesday, September 18, 13
Client API
• Client API com todos objetos
• Fluent API
Wednesday, September 18, 13
Client API
• Invocation
• Requisição preparada e pronta a ser executada
• Interface genérica (command) com clara separação de
conceitos:
• Creator - cria a requisição
• Submitter - envia a requisição
• Não precisa conhecer como o “Invocation” é
preparado e sim quando e como ele é executado
• Forma síncrona
• Forma assíncrona
Wednesday, September 18, 13
Client API
• Invocation
Invocation inv1 = client.target("http://examples.org/atm/balance")
.queryParam("card", "111122223333")
.queryParam("pin", "9876").request("text/plain").buildGet();
Invocation inv2 = client.target("http://examples.org/atm/withdrawal")
.queryParam("card", "111122223333").queryParam("pin", "9876")
.request().buildPost(text("50.0")));
Collection<Invocation> invs = Arrays.asList(inv1, inv2);
Collection<Response> ress =
Collections.transform(invs,
new F<Invocation, Response>() {
@Override
public Response apply(Invocation inv) {
return inv.invoke(); } });
Wednesday, September 18, 13
Client API
• Setar parâmetros do request
• “fluent” api
• Form
Wednesday, September 18, 13
Client API
• Setar parâmetros do request
• “fluent” api
• Form
Objeto JAXB
Wednesday, September 18, 13
Validation
• Verifica o conteúdo e formação de um ou mais campos
• Utiliza Beans Validation
• Suporte por anotações de validação em:
• Campos e propriedades
• Métodos (response entities)
• Resource classes
• Parâmetros (inclusive request entity)
• lança javax.validation.ValidationException
Wednesday, September 18, 13
Validation
• @NotNull
• Varifica se o campo é nulo
• se nulo javax.validation.ValidationException
Wednesday, September 18, 13
Validation
• @NotNull
• Varifica se o campo é nulo
• se nulo javax.validation.ValidationException
Wednesday, September 18, 13
Validation
• Aplicável a campos
@Path("/")
public class UserResource {
@NotNull
@FormParam("userName")
private String userName;
• Aplicável a métodos
@NotNull
@FormParam("userName")
public void setUserName(String userName) {
this.username = userName;
}
Wednesday, September 18, 13
Validation
• Aplicável a recursos
@Path("/createUser")
@PhoneRequired
public class CreateUserResource {
@FormParam("homePhone")
private Phone homePhone;
@FormParam("mobilePhone")
private Phone mobilePhone;
}
Wednesday, September 18, 13
Validation
• @Pattern com expressões regulares
• javax.validation.constraints.Pattern
• Erro - HTTP Status 400 - Bad Request
Wednesday, September 18, 13
Validation
• @Valid
• valida no método classes que tem “constraints”
public class Book {
private int id;
@NotNull
private String name; ...}
@POST
@Consumes(MediaType.APPLICATION_XML)
public void createBook(@Valid BookConstraints book) {
//Executa criacão }
• Erro na validação (ValidationException) retorna
• HTTP 400 ou HTTP 500
Wednesday, September 18, 13
Validation
• Custom Validation
• Validação definida pelo desenvolvedor
• Implementar a interface ConstraintValidator
Wednesday, September 18, 13
Filters
• Utilizados para modificar requests e responses
• Adicionar e/ou alterar headers
• Filtros podem ser server side e/ou client side
• ContainerRequestFilter
• ContainerResponseFilter
• ClientResponseFilter
• ClientRequestFilter
Wednesday, September 18, 13
ContainerResponseFilters
• Utilizado para modificar response
• alterando Headers
• Classe tem de implementar ContainerResponseFilter
• Filtros são aplicados globalmente em todos recursos da
aplicação por padrão
Wednesday, September 18, 13
ContainerResponseFilters
• Filtros por padrão são chamados de globais
• e aplicados a todos os recursos da aplicação
• Anotação @NameBinding
• Altera o comportamento padrão
• Especifica a quais recursos o filtro é aplicado
• Filtros com essa característica são chamados name-bound
Wednesday, September 18, 13
@NameBinding - passos
• Definir a Interface e anotação
• Definir e anotar a classe com @Provider e @<nome>
Wednesday, September 18, 13
@NameBinding - passos
• Anotar os recursos para o filtro
• Todos os flitros são executados como pos matching
• Executados após selecionar qual método deve ser acessado
para cada request
• Pode ser alterado usando a anotação @PreMatching
• são executados antes do iniciar o “matching”
Wednesday, September 18, 13
ContainerRequestFilters
• Similares aos ResponseFilters
• Possibilitam alteram os parâmetros do request
• Não possuem parâmetro ContainerResponseContext
• RequestFilters são executados como post-matching
• executados após o recurso a ser executado ser
“encontrado”
• GET, POST, PUT ou DELETE
• Pode-se alterar utilizando a anotação @PreMatching
• executa o filtro antes do “matching” do método
Wednesday, September 18, 13
ContainerRequestFilters
• @PreMatching
• Altera todos os métodos PUT para POST
• Assume que o código a ser executado é o mesmo
Wednesday, September 18, 13
Interceptors
• Manipular input/output streams
• Podem ser utilizados no cliente ou server
• Dois tipos de Interceptors
• ReaderInterceptors (manipulam stream de entrada)
• WriterInterceptors (manipulam streams de saída)
• Interceptors são globais (aplicados a todos os recursos)
• Anotação @NameBinding (name-bound)
• Especifica a quais recursos o filtro é aplicado
Wednesday, September 18, 13
Interceptors
Wednesday, September 18, 13
Asynchronous Processing
• Possibilita o processamento multithread no servidor,
aumentando o seu throughput
• Libera a thread do servidor para executar outras tarefas
• Processamento executa em outra thread ou espera em
uma fila até execução
• Quando recebe a resposta envia para o client
• @Suspended indica que o método será executado de
maneira assíncrona
• Possível setar timeout, portanto faça!
Wednesday, September 18, 13
Asynchronous Processing
Wednesday, September 18, 13
Asynchronous Processing
@Suspended
método assíncrono
Wednesday, September 18, 13
Asynchronous Processing
@Suspended
método assíncrono
Nova thread
Wednesday, September 18, 13
Asynchronous Processing
@Suspended
método assíncrono
Nova thread
retorna void
Wednesday, September 18, 13
Asynchronous Processing
@Suspended
método assíncrono
Nova thread
Executa na
nova thread
retorna void
Wednesday, September 18, 13
Asynchronous Processing
@Suspended
método assíncrono
Nova thread
Executa na
nova thread
retorna void
retorna o
resultado
Wednesday, September 18, 13
Asynchronous Processing - timeout
Wednesday, September 18, 13
Asynchronous Processing - timeout
Cria
TimeoutHandler
Wednesday, September 18, 13
Asynchronous Processing - timeout
Define
mensagem de
erro
Cria
TimeoutHandler
Wednesday, September 18, 13
Asynchronous Processing - timeout
Define
mensagem de
erro
Cria
TimeoutHandler
Lança uma
ServiceUnavailable
Exception
Mapeada em 503,
"Service
Unavailable" HTTP
error response
Wednesday, September 18, 13
Asynchronous Processing - timeout
Define timeout e
unidade
Define
mensagem de
erro
Cria
TimeoutHandler
Lança uma
ServiceUnavailable
Exception
Mapeada em 503,
"Service
Unavailable" HTTP
error response
Wednesday, September 18, 13
Asynchronous Processing
• Cliente assíncrono
• Arquiteturas fracamente acopladas
Wednesday, September 18, 13
Asynchronous Processing
• Cliente assíncrono
• Arquiteturas fracamente acopladas
Define a
execução
assíncrona
Wednesday, September 18, 13
Asynchronous Processing
• Cliente assíncrono
• Arquiteturas fracamente acopladas
Define a
execução
assíncrona
Representa o
resultado de
processamento
assíncrono
Wednesday, September 18, 13
Asynchronous Processing
• Cliente assíncrono
• Arquiteturas fracamente acopladas
Define a
execução
assíncrona
Representa o
resultado de
processamento
assíncrono
Wednesday, September 18, 13
JAX-RS 2.0
• Novas funcionalidades para “build” de URIs
• Possibilida de uso de “templates” na classe UriBuilder
• método resolveTemplate()
• Resultado:
• http://www.thedevelopersconference.com.br/2013?
trilha=JavaEE
Wednesday, September 18, 13
JAX-RS 2.0
• Classe Link
• Implementa RFC 5988 (Web Link)
• Inserir metadados em mensagens HTTP
• Link é serializado em um HTTP Response como um header
HTTP
• Representa um link hypermedia
Wednesday, September 18, 13
Richardson Maturity Model
• Nível 0
• POX
• URI única
• Nível 1
• URIs, verbo único
• Nível 2
• CRUD
• URIs, verbos
• Nível 3
• Hypermedia
• RESTful Service POX
Recursos
Verbos HTTP
Controles
Hypermedia
Wednesday, September 18, 13
Hypermedia
• Links para declarar próximos passos
• Links para descrever transições de estado
• Navegação altera estado do recurso
• Máquina de estados e workflow
• XHTML, ATOM , JSON
Wednesday, September 18, 13
JAX-RS 2.0
• Link
• adicionando links a um objeto Response
• Consumindo em um cliente
Wednesday, September 18, 13
Link: <http://.../orders/1/review>;rel=review;op=POST
Link: <http://.../orders/1/cancel>;rel=cancel;op=POST
<order>
<id>1</id>
<customer>http://.../customers/21</customer>
<shippingAddress>http://.../customers/21/address/1<shippingAddress>
<orderItems>
<product>http://.../products/3345</product>
<quantity>1</quantity>
</orderItems>
<status>RECEIVED</status>
</order>
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday, September 18, 13
Wednesday, September 18, 13
OBRIGADO !!!!!
Wednesday, September 18, 13
OBRIGADO !!!!!
  fabio@soujava.org.br
@fabiovelloso
Wednesday, September 18, 13
OBRIGADO !!!!!
  fabio@soujava.org.br
@fabiovelloso
facebook.com/soujava
@soujava
soujava.org.br
Wednesday, September 18, 13

JAX-RS 2.0

  • 1.
    JAX-RS 2.0 As novidadesdo padrão para desenvolvimento REST Fabio Velloso Wednesday, September 18, 13
  • 2.
    Fabio Velloso • Bacharelem Ciência da Computação pela Universidade Federal de São Carlos - UFSCar • Fundador do SouJava • Desenvolvendo projetos com tecnologia Java desde 96 • Professor de SOA e Web Services do curso de Pós-Graduação "Lato-Sensu" em Desenvolvimento de Software para Web da UFSCar • Gerente de Arquitetura da Telefonica | VIVO • Atualmente desenvolve projetos pessoais com Big Data, Cloud, Design Thinking, Service Design e Economia Criativa Wednesday, September 18, 13
  • 3.
    Agenda • REST • Conceitos •JAX-RS • Conceitos e principais anotações • JAX-RS 2.0 • Novidades Wednesday, September 18, 13
  • 4.
    Agenda • REST • Conceitos •JAX-RS • Conceitos e principais anotações • JAX-RS 2.0 • Novidades Wednesday, September 18, 13
  • 5.
    REST • Estilo dearquitetura e suas restrições • Recursos identificados unicamente por uma URI • Interface uniforme (GET, POST, PUT, DELETE) • Componentes REST manipulam recursos alterando sua representação • Mensagens auto-descritivas e sem estado ou “stateless” • Informações podem estar em cache • Multiplas representações • Hypermedia Wednesday, September 18, 13
  • 6.
    Aplicação CRUD comREST • Consultar o livro por seu ID GET http://www.soujava.org.br/books/123 • Adicionar um livro POST http://www.soujava.org.br/books • Alterar um livro PUT http://www.soujava.org.br/books • Remover o livro pelo ID DELETE http://www.soujava.org.br/books/123 Wednesday, September 18, 13
  • 7.
    Aplicação CRUD comREST Wednesday, September 18, 13
  • 8.
    Aplicação CRUD comREST <book> <id>123</id> <name>Java: The Good Parts </name> <author>Jim Waldo</author> <isbn>0596803737</isbn> <isbn13>978-0596803735</isbn13> </book> Wednesday, September 18, 13
  • 9.
    Agenda • REST • Conceitos •JAX-RS • Conceitos e principais anotações • JAX-RS 2.0 • Novidades Wednesday, September 18, 13
  • 10.
    Java API forRESTful Web Services - JSR 331 • Suporte a RESTful em Java • API padronizada • Programação declarativa • Anotações • POJO • Integrado ao JEE6 (JSR 313) Wednesday, September 18, 13
  • 11.
    Java API forRESTful Web Services - JSR 331 Wednesday, September 18, 13
  • 12.
    Java API forRESTful Web Services - JSR 331 Recurso Recurso Wednesday, September 18, 13
  • 13.
    Java API forRESTful Web Services - JSR 331 Recurso Recurso Método HTTP Wednesday, September 18, 13
  • 14.
    Java API forRESTful Web Services - JSR 331 Recurso Recurso Método HTTP Serialização Serialização Wednesday, September 18, 13
  • 15.
    Java API forRESTful Web Services - JSR 331 • @Path, @PathParam, @Produces, @Consumes @HeaderParam, @QueryParam, @MatrixParam @NewCookie Recurso Recurso Método HTTP Serialização Serialização Wednesday, September 18, 13
  • 16.
    Agenda • REST • Conceitos •JAX-RS • Conceitos e principais anotações • JAX-RS 2.0 • Novidades Wednesday, September 18, 13
  • 17.
    JAX-RS 2.0 JavaAPI for RESTful Web Services • JSR 339 • Client API • Validação • Filters e Interceptors • Processamento assíncrono • Melhorias • ResourceTemplate • Link JAX-RS 2.0JCP JAVA EXTRA!! Wednesday, September 18, 13
  • 18.
    Client API • Objetivos: •Encapsular os conceitos e principais restrições da arquitetura REST como artefatos Java em clientes • Facilitar o consumo de RESTfull Web Services • como JAX-RS facilitou desenvolvimento no servidor • Compartilhar conceitos comuns entre client e server JAX-RS Wednesday, September 18, 13
  • 19.
    Client API • Padronizaçãoda API client • Portável entre implementações • Consumo de Web Services expostos sobre HTTP • Pode acessar serviços REST construídos em outras linguagens e frameworks • ou acessar extensões como Web Dav • Setar parâmetros e configurações • Form, headers, SSL Wednesday, September 18, 13
  • 20.
    Client API • Classese interfaces mais importantes • Client • Usada para criar e acessar “web resources” e configurar propriedades de conexões e requisições • ClientBuilder.newClient(); • WebTarget • encapsula um Web resource • podendo criar e envia-lo requests e processar seus responses • .get() , .post() , .put() , .delete() Wednesday, September 18, 13
  • 21.
    Client API • ClientAPI com todos objetos • Fluent API Wednesday, September 18, 13
  • 22.
    Client API • Invocation •Requisição preparada e pronta a ser executada • Interface genérica (command) com clara separação de conceitos: • Creator - cria a requisição • Submitter - envia a requisição • Não precisa conhecer como o “Invocation” é preparado e sim quando e como ele é executado • Forma síncrona • Forma assíncrona Wednesday, September 18, 13
  • 23.
    Client API • Invocation Invocationinv1 = client.target("http://examples.org/atm/balance") .queryParam("card", "111122223333") .queryParam("pin", "9876").request("text/plain").buildGet(); Invocation inv2 = client.target("http://examples.org/atm/withdrawal") .queryParam("card", "111122223333").queryParam("pin", "9876") .request().buildPost(text("50.0"))); Collection<Invocation> invs = Arrays.asList(inv1, inv2); Collection<Response> ress = Collections.transform(invs, new F<Invocation, Response>() { @Override public Response apply(Invocation inv) { return inv.invoke(); } }); Wednesday, September 18, 13
  • 24.
    Client API • Setarparâmetros do request • “fluent” api • Form Wednesday, September 18, 13
  • 25.
    Client API • Setarparâmetros do request • “fluent” api • Form Objeto JAXB Wednesday, September 18, 13
  • 26.
    Validation • Verifica oconteúdo e formação de um ou mais campos • Utiliza Beans Validation • Suporte por anotações de validação em: • Campos e propriedades • Métodos (response entities) • Resource classes • Parâmetros (inclusive request entity) • lança javax.validation.ValidationException Wednesday, September 18, 13
  • 27.
    Validation • @NotNull • Varificase o campo é nulo • se nulo javax.validation.ValidationException Wednesday, September 18, 13
  • 28.
    Validation • @NotNull • Varificase o campo é nulo • se nulo javax.validation.ValidationException Wednesday, September 18, 13
  • 29.
    Validation • Aplicável acampos @Path("/") public class UserResource { @NotNull @FormParam("userName") private String userName; • Aplicável a métodos @NotNull @FormParam("userName") public void setUserName(String userName) { this.username = userName; } Wednesday, September 18, 13
  • 30.
    Validation • Aplicável arecursos @Path("/createUser") @PhoneRequired public class CreateUserResource { @FormParam("homePhone") private Phone homePhone; @FormParam("mobilePhone") private Phone mobilePhone; } Wednesday, September 18, 13
  • 31.
    Validation • @Pattern comexpressões regulares • javax.validation.constraints.Pattern • Erro - HTTP Status 400 - Bad Request Wednesday, September 18, 13
  • 32.
    Validation • @Valid • validano método classes que tem “constraints” public class Book { private int id; @NotNull private String name; ...} @POST @Consumes(MediaType.APPLICATION_XML) public void createBook(@Valid BookConstraints book) { //Executa criacão } • Erro na validação (ValidationException) retorna • HTTP 400 ou HTTP 500 Wednesday, September 18, 13
  • 33.
    Validation • Custom Validation •Validação definida pelo desenvolvedor • Implementar a interface ConstraintValidator Wednesday, September 18, 13
  • 34.
    Filters • Utilizados paramodificar requests e responses • Adicionar e/ou alterar headers • Filtros podem ser server side e/ou client side • ContainerRequestFilter • ContainerResponseFilter • ClientResponseFilter • ClientRequestFilter Wednesday, September 18, 13
  • 35.
    ContainerResponseFilters • Utilizado paramodificar response • alterando Headers • Classe tem de implementar ContainerResponseFilter • Filtros são aplicados globalmente em todos recursos da aplicação por padrão Wednesday, September 18, 13
  • 36.
    ContainerResponseFilters • Filtros porpadrão são chamados de globais • e aplicados a todos os recursos da aplicação • Anotação @NameBinding • Altera o comportamento padrão • Especifica a quais recursos o filtro é aplicado • Filtros com essa característica são chamados name-bound Wednesday, September 18, 13
  • 37.
    @NameBinding - passos •Definir a Interface e anotação • Definir e anotar a classe com @Provider e @<nome> Wednesday, September 18, 13
  • 38.
    @NameBinding - passos •Anotar os recursos para o filtro • Todos os flitros são executados como pos matching • Executados após selecionar qual método deve ser acessado para cada request • Pode ser alterado usando a anotação @PreMatching • são executados antes do iniciar o “matching” Wednesday, September 18, 13
  • 39.
    ContainerRequestFilters • Similares aosResponseFilters • Possibilitam alteram os parâmetros do request • Não possuem parâmetro ContainerResponseContext • RequestFilters são executados como post-matching • executados após o recurso a ser executado ser “encontrado” • GET, POST, PUT ou DELETE • Pode-se alterar utilizando a anotação @PreMatching • executa o filtro antes do “matching” do método Wednesday, September 18, 13
  • 40.
    ContainerRequestFilters • @PreMatching • Alteratodos os métodos PUT para POST • Assume que o código a ser executado é o mesmo Wednesday, September 18, 13
  • 41.
    Interceptors • Manipular input/outputstreams • Podem ser utilizados no cliente ou server • Dois tipos de Interceptors • ReaderInterceptors (manipulam stream de entrada) • WriterInterceptors (manipulam streams de saída) • Interceptors são globais (aplicados a todos os recursos) • Anotação @NameBinding (name-bound) • Especifica a quais recursos o filtro é aplicado Wednesday, September 18, 13
  • 42.
  • 43.
    Asynchronous Processing • Possibilitao processamento multithread no servidor, aumentando o seu throughput • Libera a thread do servidor para executar outras tarefas • Processamento executa em outra thread ou espera em uma fila até execução • Quando recebe a resposta envia para o client • @Suspended indica que o método será executado de maneira assíncrona • Possível setar timeout, portanto faça! Wednesday, September 18, 13
  • 44.
  • 45.
  • 46.
  • 47.
    Asynchronous Processing @Suspended método assíncrono Novathread retorna void Wednesday, September 18, 13
  • 48.
    Asynchronous Processing @Suspended método assíncrono Novathread Executa na nova thread retorna void Wednesday, September 18, 13
  • 49.
    Asynchronous Processing @Suspended método assíncrono Novathread Executa na nova thread retorna void retorna o resultado Wednesday, September 18, 13
  • 50.
    Asynchronous Processing -timeout Wednesday, September 18, 13
  • 51.
    Asynchronous Processing -timeout Cria TimeoutHandler Wednesday, September 18, 13
  • 52.
    Asynchronous Processing -timeout Define mensagem de erro Cria TimeoutHandler Wednesday, September 18, 13
  • 53.
    Asynchronous Processing -timeout Define mensagem de erro Cria TimeoutHandler Lança uma ServiceUnavailable Exception Mapeada em 503, "Service Unavailable" HTTP error response Wednesday, September 18, 13
  • 54.
    Asynchronous Processing -timeout Define timeout e unidade Define mensagem de erro Cria TimeoutHandler Lança uma ServiceUnavailable Exception Mapeada em 503, "Service Unavailable" HTTP error response Wednesday, September 18, 13
  • 55.
    Asynchronous Processing • Clienteassíncrono • Arquiteturas fracamente acopladas Wednesday, September 18, 13
  • 56.
    Asynchronous Processing • Clienteassíncrono • Arquiteturas fracamente acopladas Define a execução assíncrona Wednesday, September 18, 13
  • 57.
    Asynchronous Processing • Clienteassíncrono • Arquiteturas fracamente acopladas Define a execução assíncrona Representa o resultado de processamento assíncrono Wednesday, September 18, 13
  • 58.
    Asynchronous Processing • Clienteassíncrono • Arquiteturas fracamente acopladas Define a execução assíncrona Representa o resultado de processamento assíncrono Wednesday, September 18, 13
  • 59.
    JAX-RS 2.0 • Novasfuncionalidades para “build” de URIs • Possibilida de uso de “templates” na classe UriBuilder • método resolveTemplate() • Resultado: • http://www.thedevelopersconference.com.br/2013? trilha=JavaEE Wednesday, September 18, 13
  • 60.
    JAX-RS 2.0 • ClasseLink • Implementa RFC 5988 (Web Link) • Inserir metadados em mensagens HTTP • Link é serializado em um HTTP Response como um header HTTP • Representa um link hypermedia Wednesday, September 18, 13
  • 61.
    Richardson Maturity Model •Nível 0 • POX • URI única • Nível 1 • URIs, verbo único • Nível 2 • CRUD • URIs, verbos • Nível 3 • Hypermedia • RESTful Service POX Recursos Verbos HTTP Controles Hypermedia Wednesday, September 18, 13
  • 62.
    Hypermedia • Links paradeclarar próximos passos • Links para descrever transições de estado • Navegação altera estado do recurso • Máquina de estados e workflow • XHTML, ATOM , JSON Wednesday, September 18, 13
  • 63.
    JAX-RS 2.0 • Link •adicionando links a um objeto Response • Consumindo em um cliente Wednesday, September 18, 13
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.