Upload
fabiovelloso
View
443
Download
0
Embed Size (px)
Citation preview
JAX-RS 20As novidades do padratildeo para desenvolvimento REST
Fabio Velloso
Wednesday September 18 13
Fabio Vellosobull Bacharel em Ciecircncia da Computaccedilatildeo pela Universidade Federal
de Satildeo Carlos - UFSCar
bull Fundador do SouJava
bull Desenvolvendo projetos com tecnologia Java desde 96
bull Professor de SOA e Web Services do curso de Poacutes-Graduaccedilatildeo Lato-Sensu em Desenvolvimento de Software para Web da UFSCar
bull Gerente de Arquitetura da Telefonica | VIVO
bull Atualmente desenvolve projetos pessoais com Big Data Cloud Design Thinking Service Design e Economia Criativa
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
REST
bull Estilo de arquitetura e suas restriccedilotildees
bull Recursos identificados unicamente por uma URI
bull Interface uniforme (GET POST PUT DELETE)
bull Componentes REST manipulam recursos alterando sua representaccedilatildeo
bull Mensagens auto-descritivas e sem estado ou ldquostatelessrdquo
bull Informaccedilotildees podem estar em cache
bull Multiplas representaccedilotildees
bull Hypermedia
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
bull Consultar o livro por seu ID
GET httpwwwsoujavaorgbrbooks123
bull Adicionar um livro
POST httpwwwsoujavaorgbrbooks
bull Alterar um livro
PUT httpwwwsoujavaorgbrbooks
bull Remover o livro pelo ID
DELETE httpwwwsoujavaorgbrbooks123
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
ltbookgt ltidgt123ltidgt ltnamegtJava The Good Parts ltnamegt ltauthorgtJim Waldoltauthorgt
ltisbngt0596803737ltisbngt ltisbn13gt978-0596803735ltisbn13gt ltbookgt
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Suporte a RESTful em Java
bull API padronizada
bull Programaccedilatildeo declarativa
bull Anotaccedilotildees
bull POJO
bull 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
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Fabio Vellosobull Bacharel em Ciecircncia da Computaccedilatildeo pela Universidade Federal
de Satildeo Carlos - UFSCar
bull Fundador do SouJava
bull Desenvolvendo projetos com tecnologia Java desde 96
bull Professor de SOA e Web Services do curso de Poacutes-Graduaccedilatildeo Lato-Sensu em Desenvolvimento de Software para Web da UFSCar
bull Gerente de Arquitetura da Telefonica | VIVO
bull Atualmente desenvolve projetos pessoais com Big Data Cloud Design Thinking Service Design e Economia Criativa
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
REST
bull Estilo de arquitetura e suas restriccedilotildees
bull Recursos identificados unicamente por uma URI
bull Interface uniforme (GET POST PUT DELETE)
bull Componentes REST manipulam recursos alterando sua representaccedilatildeo
bull Mensagens auto-descritivas e sem estado ou ldquostatelessrdquo
bull Informaccedilotildees podem estar em cache
bull Multiplas representaccedilotildees
bull Hypermedia
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
bull Consultar o livro por seu ID
GET httpwwwsoujavaorgbrbooks123
bull Adicionar um livro
POST httpwwwsoujavaorgbrbooks
bull Alterar um livro
PUT httpwwwsoujavaorgbrbooks
bull Remover o livro pelo ID
DELETE httpwwwsoujavaorgbrbooks123
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
ltbookgt ltidgt123ltidgt ltnamegtJava The Good Parts ltnamegt ltauthorgtJim Waldoltauthorgt
ltisbngt0596803737ltisbngt ltisbn13gt978-0596803735ltisbn13gt ltbookgt
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Suporte a RESTful em Java
bull API padronizada
bull Programaccedilatildeo declarativa
bull Anotaccedilotildees
bull POJO
bull 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
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
REST
bull Estilo de arquitetura e suas restriccedilotildees
bull Recursos identificados unicamente por uma URI
bull Interface uniforme (GET POST PUT DELETE)
bull Componentes REST manipulam recursos alterando sua representaccedilatildeo
bull Mensagens auto-descritivas e sem estado ou ldquostatelessrdquo
bull Informaccedilotildees podem estar em cache
bull Multiplas representaccedilotildees
bull Hypermedia
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
bull Consultar o livro por seu ID
GET httpwwwsoujavaorgbrbooks123
bull Adicionar um livro
POST httpwwwsoujavaorgbrbooks
bull Alterar um livro
PUT httpwwwsoujavaorgbrbooks
bull Remover o livro pelo ID
DELETE httpwwwsoujavaorgbrbooks123
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
ltbookgt ltidgt123ltidgt ltnamegtJava The Good Parts ltnamegt ltauthorgtJim Waldoltauthorgt
ltisbngt0596803737ltisbngt ltisbn13gt978-0596803735ltisbn13gt ltbookgt
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Suporte a RESTful em Java
bull API padronizada
bull Programaccedilatildeo declarativa
bull Anotaccedilotildees
bull POJO
bull 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
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
REST
bull Estilo de arquitetura e suas restriccedilotildees
bull Recursos identificados unicamente por uma URI
bull Interface uniforme (GET POST PUT DELETE)
bull Componentes REST manipulam recursos alterando sua representaccedilatildeo
bull Mensagens auto-descritivas e sem estado ou ldquostatelessrdquo
bull Informaccedilotildees podem estar em cache
bull Multiplas representaccedilotildees
bull Hypermedia
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
bull Consultar o livro por seu ID
GET httpwwwsoujavaorgbrbooks123
bull Adicionar um livro
POST httpwwwsoujavaorgbrbooks
bull Alterar um livro
PUT httpwwwsoujavaorgbrbooks
bull Remover o livro pelo ID
DELETE httpwwwsoujavaorgbrbooks123
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
ltbookgt ltidgt123ltidgt ltnamegtJava The Good Parts ltnamegt ltauthorgtJim Waldoltauthorgt
ltisbngt0596803737ltisbngt ltisbn13gt978-0596803735ltisbn13gt ltbookgt
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Suporte a RESTful em Java
bull API padronizada
bull Programaccedilatildeo declarativa
bull Anotaccedilotildees
bull POJO
bull 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
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
REST
bull Estilo de arquitetura e suas restriccedilotildees
bull Recursos identificados unicamente por uma URI
bull Interface uniforme (GET POST PUT DELETE)
bull Componentes REST manipulam recursos alterando sua representaccedilatildeo
bull Mensagens auto-descritivas e sem estado ou ldquostatelessrdquo
bull Informaccedilotildees podem estar em cache
bull Multiplas representaccedilotildees
bull Hypermedia
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
bull Consultar o livro por seu ID
GET httpwwwsoujavaorgbrbooks123
bull Adicionar um livro
POST httpwwwsoujavaorgbrbooks
bull Alterar um livro
PUT httpwwwsoujavaorgbrbooks
bull Remover o livro pelo ID
DELETE httpwwwsoujavaorgbrbooks123
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
ltbookgt ltidgt123ltidgt ltnamegtJava The Good Parts ltnamegt ltauthorgtJim Waldoltauthorgt
ltisbngt0596803737ltisbngt ltisbn13gt978-0596803735ltisbn13gt ltbookgt
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Suporte a RESTful em Java
bull API padronizada
bull Programaccedilatildeo declarativa
bull Anotaccedilotildees
bull POJO
bull 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
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
bull Consultar o livro por seu ID
GET httpwwwsoujavaorgbrbooks123
bull Adicionar um livro
POST httpwwwsoujavaorgbrbooks
bull Alterar um livro
PUT httpwwwsoujavaorgbrbooks
bull Remover o livro pelo ID
DELETE httpwwwsoujavaorgbrbooks123
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
ltbookgt ltidgt123ltidgt ltnamegtJava The Good Parts ltnamegt ltauthorgtJim Waldoltauthorgt
ltisbngt0596803737ltisbngt ltisbn13gt978-0596803735ltisbn13gt ltbookgt
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Suporte a RESTful em Java
bull API padronizada
bull Programaccedilatildeo declarativa
bull Anotaccedilotildees
bull POJO
bull 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
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
ltbookgt ltidgt123ltidgt ltnamegtJava The Good Parts ltnamegt ltauthorgtJim Waldoltauthorgt
ltisbngt0596803737ltisbngt ltisbn13gt978-0596803735ltisbn13gt ltbookgt
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Suporte a RESTful em Java
bull API padronizada
bull Programaccedilatildeo declarativa
bull Anotaccedilotildees
bull POJO
bull 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
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Aplicaccedilatildeo CRUD com REST
ltbookgt ltidgt123ltidgt ltnamegtJava The Good Parts ltnamegt ltauthorgtJim Waldoltauthorgt
ltisbngt0596803737ltisbngt ltisbn13gt978-0596803735ltisbn13gt ltbookgt
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Suporte a RESTful em Java
bull API padronizada
bull Programaccedilatildeo declarativa
bull Anotaccedilotildees
bull POJO
bull 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
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Suporte a RESTful em Java
bull API padronizada
bull Programaccedilatildeo declarativa
bull Anotaccedilotildees
bull POJO
bull 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
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Suporte a RESTful em Java
bull API padronizada
bull Programaccedilatildeo declarativa
bull Anotaccedilotildees
bull POJO
bull 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
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
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
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
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
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Java API for RESTful Web Services - JSR 331
bull Path PathParam Produces Consumes HeaderParam QueryParam MatrixParam NewCookie
Recurso
RecursoMeacutetodo HTTP
Serializaccedilatildeo
Serializaccedilatildeo
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Agenda
bull REST
bull Conceitos
bull JAX-RS
bull Conceitos e principais anotaccedilotildees
bull JAX-RS 20
bull Novidades
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
JAX-RS 20 Java API for RESTful Web Services
bull JSR 339
bull Client API
bull Validaccedilatildeo
bull Filters e Interceptors
bull Processamento assiacutencrono
bull Melhorias
bull ResourceTemplate
bull Link
JAX-RS 20JCP JAVA
EXTRA
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Client API
bull Objetivos
bull Encapsular os conceitos e principais restriccedilotildees da arquitetura REST como artefatos Java em clientes
bull Facilitar o consumo de RESTfull Web Services
bull como JAX-RS facilitou desenvolvimento no servidor
bull Compartilhar conceitos comuns entre client e server JAX-RS
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Client API
bull Padronizaccedilatildeo da API client
bull Portaacutevel entre implementaccedilotildees
bull Consumo de Web Services expostos sobre HTTP
bull Pode acessar serviccedilos REST construiacutedos em outras linguagens e frameworks
bull ou acessar extensotildees como Web Dav
bull Setar paracircmetros e configuraccedilotildees
bull Form headers SSL
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Client API
bull Classes e interfaces mais importantes
bull Client
bull Usada para criar e acessar ldquoweb resourcesrdquo e configurar propriedades de conexotildees e requisiccedilotildees
bull ClientBuildernewClient()
bull WebTarget
bull encapsula um Web resource
bull podendo criar e envia-lo requests e processar seus responses
bull get() post() put() delete()
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Client API
bull Client API com todos objetos
bull Fluent API
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Client API
bull Invocation
bull Requisiccedilatildeo preparada e pronta a ser executada
bull Interface geneacuterica (command) com clara separaccedilatildeo de conceitos
bull Creator - cria a requisiccedilatildeo
bull Submitter - envia a requisiccedilatildeo
bull Natildeo precisa conhecer como o ldquoInvocationrdquo eacute preparado e sim quando e como ele eacute executado
bull Forma siacutencrona
bull Forma assiacutencrona
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Client API
bull Invocation
Invocation inv1 = clienttarget(httpexamplesorgatmbalance) queryParam(card 111122223333) queryParam(pin 9876)request(textplain)buildGet()
Invocation inv2 = clienttarget(httpexamplesorgatmwithdrawal) queryParam(card 111122223333)queryParam(pin 9876) request()buildPost(text(500)))
CollectionltInvocationgt invs = ArraysasList(inv1 inv2)
CollectionltResponsegt ress = Collectionstransform(invs new FltInvocation Responsegt() Override public Response apply(Invocation inv) return invinvoke() )
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Client API
bull Setar paracircmetros do request
bull ldquofluentrdquo api
bull Form
Objeto JAXB
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Validation
bull Verifica o conteuacutedo e formaccedilatildeo de um ou mais campos
bull Utiliza Beans Validation
bull Suporte por anotaccedilotildees de validaccedilatildeo em
bull Campos e propriedades
bull Meacutetodos (response entities)
bull Resource classes
bull Paracircmetros (inclusive request entity)
bull lanccedila javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Validation
bull NotNull
bull Varifica se o campo eacute nulo
bull se nulo javaxvalidationValidationException
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Validation
bull Aplicaacutevel a campos
Path()public class UserResource NotNull
FormParam(userName) private String userName
bull Aplicaacutevel a meacutetodos
NotNullFormParam(userName)public void setUserName(String userName)
thisusername = userName
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Validation
bull Aplicaacutevel a recursos
Path(createUser) PhoneRequired public class CreateUserResource
FormParam(homePhone) private Phone homePhone
FormParam(mobilePhone) private Phone mobilePhone
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Validation
bull Pattern com expressotildees regulares
bull javaxvalidationconstraintsPattern
bull Erro - HTTP Status 400 - Bad Request
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Validation
bull Valid
bull valida no meacutetodo classes que tem ldquoconstraintsrdquo
public class Book private int id NotNull private String name POSTConsumes(MediaTypeAPPLICATION_XML) public void createBook(Valid BookConstraints book) Executa criacatildeo
bull Erro na validaccedilatildeo (ValidationException) retorna
bull HTTP 400 ou HTTP 500
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Validation
bull Custom Validation
bull Validaccedilatildeo definida pelo desenvolvedor
bull Implementar a interface ConstraintValidator
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Filters
bull Utilizados para modificar requests e responses
bull Adicionar eou alterar headers
bull Filtros podem ser server side eou client side
bull ContainerRequestFilter
bull ContainerResponseFilter
bull ClientResponseFilter
bull ClientRequestFilter
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
ContainerResponseFilters
bull Utilizado para modificar response
bull alterando Headers
bull Classe tem de implementar ContainerResponseFilter
bull Filtros satildeo aplicados globalmente em todos recursos da aplicaccedilatildeo por padratildeo
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
ContainerResponseFilters
bull Filtros por padratildeo satildeo chamados de globais
bull e aplicados a todos os recursos da aplicaccedilatildeo
bull Anotaccedilatildeo NameBinding
bull Altera o comportamento padratildeo
bull Especifica a quais recursos o filtro eacute aplicado
bull Filtros com essa caracteriacutestica satildeo chamados name-bound
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
NameBinding - passos
bull Definir a Interface e anotaccedilatildeo
bull Definir e anotar a classe com Provider e ltnomegt
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
NameBinding - passos
bull Anotar os recursos para o filtro
bull Todos os flitros satildeo executados como pos matching
bull Executados apoacutes selecionar qual meacutetodo deve ser acessado para cada request
bull Pode ser alterado usando a anotaccedilatildeo PreMatching
bull satildeo executados antes do iniciar o ldquomatchingrdquo
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
ContainerRequestFilters
bull Similares aos ResponseFilters
bull Possibilitam alteram os paracircmetros do request
bull Natildeo possuem paracircmetro ContainerResponseContext
bull RequestFilters satildeo executados como post-matching
bull executados apoacutes o recurso a ser executado ser ldquoencontradordquo
bull GET POST PUT ou DELETE
bull Pode-se alterar utilizando a anotaccedilatildeo PreMatching
bull executa o filtro antes do ldquomatchingrdquo do meacutetodo
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
ContainerRequestFilters
bull PreMatching
bull Altera todos os meacutetodos PUT para POST
bull Assume que o coacutedigo a ser executado eacute o mesmo
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Interceptors
bull Manipular inputoutput streams
bull Podem ser utilizados no cliente ou server
bull Dois tipos de Interceptors
bull ReaderInterceptors (manipulam stream de entrada)
bull WriterInterceptors (manipulam streams de saiacuteda)
bull Interceptors satildeo globais (aplicados a todos os recursos)
bull Anotaccedilatildeo NameBinding (name-bound)
bull Especifica a quais recursos o filtro eacute aplicado
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Interceptors
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing
bull Possibilita o processamento multithread no servidor aumentando o seu throughput
bull Libera a thread do servidor para executar outras tarefas
bull Processamento executa em outra thread ou espera em uma fila ateacute execuccedilatildeo
bull Quando recebe a resposta envia para o client
bull Suspended indica que o meacutetodo seraacute executado de maneira assiacutencrona
bull Possiacutevel setar timeout portanto faccedila
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
Nova thread
Executa na nova thread
retorna void
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing
Suspendedmeacutetodo assiacutencrono
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
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
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing - timeout
Define mensagem de
erro
Cria TimeoutHandler
Lanccedila uma ServiceUnavailableException
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
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing - timeout
Define timeout e unidade
Define mensagem de
erro
Cria TimeoutHandler
Lanccedila uma ServiceUnavailableException
Mapeada em 503 Service Unavailable HTTP error response
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Asynchronous Processing
bull Cliente assiacutencrono
bull Arquiteturas fracamente acopladas
Define a execuccedilatildeo
assiacutencrona
Representa o resultado de
processamento assiacutencrono
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
JAX-RS 20
bull Novas funcionalidades para ldquobuildrdquo de URIs
bull Possibilida de uso de ldquotemplatesrdquo na classe UriBuilder
bull meacutetodo resolveTemplate()
bull Resultado
bull httpwwwthedevelopersconferencecombr2013trilha=JavaEE
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
JAX-RS 20
bull Classe Link
bull Implementa RFC 5988 (Web Link)
bull Inserir metadados em mensagens HTTP
bull Link eacute serializado em um HTTP Response como um header HTTP
bull Representa um link hypermedia
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Richardson Maturity Model
bull Niacutevel 0bull POX bull URI uacutenica
bull Niacutevel 1bull URIs verbo uacutenico
bull Niacutevel 2bull CRUDbull URIs verbos
bull Niacutevel 3bull Hypermediabull RESTful Service POX
Recursos
Verbos HTTP
Controles Hypermedia
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Hypermedia
bull Links para declarar proacuteximos passos
bull Links para descrever transiccedilotildees de estado
bull Navegaccedilatildeo altera estado do recurso
bull Maacutequina de estados e workflow
bull XHTML ATOM JSON
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
JAX-RS 20
bull Link
bull adicionando links a um objeto Response
bull Consumindo em um cliente
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Link lthttporders1reviewgtrel=reviewop=POSTLink lthttporders1cancelgtrel=cancelop=POSTltordergt ltidgt1ltidgt ltcustomergthttpcustomers21ltcustomergt ltshippingAddressgthttpcustomers21address1ltshippingAddressgt ltorderItemsgt ltproductgthttpproducts3345ltproductgt ltquantitygt1ltquantitygt ltorderItemsgt ltstatusgtRECEIVEDltstatusgtltordergt
Hypermerdia
Reviewed
Canceled
Payed
Refunded
Received Shipped
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
OBRIGADO
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13
OBRIGADO
fabiosoujavaorgbr
fabiovelloso
facebookcomsoujava
soujava
soujavaorgbr
Wednesday September 18 13