68
JAX-RS 2.0 As novidades do padrão para desenvolvimento REST Fabio Velloso Wednesday, September 18, 13

JAX-RS 2.0

Embed Size (px)

Citation preview

Page 1: JAX-RS 2.0

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

Page 2: JAX-RS 2.0

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

Page 3: JAX-RS 2.0

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

Page 4: JAX-RS 2.0

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

Page 5: JAX-RS 2.0

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

Page 6: JAX-RS 2.0

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

Page 7: JAX-RS 2.0

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

Page 8: JAX-RS 2.0

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

Page 9: JAX-RS 2.0

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

Page 10: JAX-RS 2.0

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

Page 11: JAX-RS 2.0

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

Page 12: JAX-RS 2.0

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

Page 13: JAX-RS 2.0

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

Page 14: JAX-RS 2.0

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

Page 15: JAX-RS 2.0

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

Page 16: JAX-RS 2.0

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

Page 17: JAX-RS 2.0

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

Page 18: JAX-RS 2.0

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

Page 19: JAX-RS 2.0

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

Page 20: JAX-RS 2.0

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

Page 21: JAX-RS 2.0

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

Page 22: JAX-RS 2.0

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

Page 23: JAX-RS 2.0

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

Page 24: JAX-RS 2.0

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

Page 25: JAX-RS 2.0

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

Page 26: JAX-RS 2.0

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

Page 27: JAX-RS 2.0

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

Page 28: JAX-RS 2.0

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

Page 29: JAX-RS 2.0

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

Page 30: JAX-RS 2.0

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

Page 31: JAX-RS 2.0

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

Page 32: JAX-RS 2.0

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

Page 33: JAX-RS 2.0

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

Page 34: JAX-RS 2.0

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

Page 35: JAX-RS 2.0

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

Page 36: JAX-RS 2.0

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

Page 37: JAX-RS 2.0

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

Page 38: JAX-RS 2.0

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

Page 39: JAX-RS 2.0

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

Page 40: JAX-RS 2.0

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

Page 41: JAX-RS 2.0

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

Page 42: JAX-RS 2.0

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

Page 43: JAX-RS 2.0

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

Page 44: JAX-RS 2.0

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

Page 45: JAX-RS 2.0

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

Page 46: JAX-RS 2.0

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

Page 47: JAX-RS 2.0

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

Page 48: JAX-RS 2.0

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

Page 49: JAX-RS 2.0

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

Page 50: JAX-RS 2.0

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

Page 51: JAX-RS 2.0

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

Page 52: JAX-RS 2.0

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

Page 53: JAX-RS 2.0

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

Page 54: JAX-RS 2.0

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

Page 55: JAX-RS 2.0

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

Page 56: JAX-RS 2.0

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

Page 57: JAX-RS 2.0

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

Page 58: JAX-RS 2.0

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

Page 59: JAX-RS 2.0

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

Page 60: JAX-RS 2.0

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

Page 61: JAX-RS 2.0

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

Page 62: JAX-RS 2.0

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

Page 63: JAX-RS 2.0

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

Page 64: JAX-RS 2.0

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

Page 65: JAX-RS 2.0

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

Page 66: JAX-RS 2.0

OBRIGADO

Wednesday September 18 13

OBRIGADO

fabiosoujavaorgbr

fabiovelloso

Wednesday September 18 13

OBRIGADO

fabiosoujavaorgbr

fabiovelloso

facebookcomsoujava

soujava

soujavaorgbr

Wednesday September 18 13

Page 67: JAX-RS 2.0

OBRIGADO

fabiosoujavaorgbr

fabiovelloso

Wednesday September 18 13

OBRIGADO

fabiosoujavaorgbr

fabiovelloso

facebookcomsoujava

soujava

soujavaorgbr

Wednesday September 18 13

Page 68: JAX-RS 2.0

OBRIGADO

fabiosoujavaorgbr

fabiovelloso

facebookcomsoujava

soujava

soujavaorgbr

Wednesday September 18 13