GoConqr has a new look! Let us know what you think.

Notes

Aplicações Web Assíncronas

Luis Felipe Guariento Desenvolvimento de Software Concursos Públicos Portuguese 16 pages

Content of the notes (16)

Page 1

Agenda

Nessa apresentação iremos discutir:

AJAX

A API ServletRequest com respeito a processamento assíncrono (asynchronous processing)

A interface AsyncContext

Page 2

Um breve histórico

No protocolo HTTP 1.0, cada nova requisição era alocada a uma nova thread.

Isso criava uma sobrecarga significativa e era muito ineficiente.

HTTP 1.1 criou "conexões persistentes" e Java 1.4 introduziu non-blocking I/O.

Page 3

Synchronous processing

As operações de I/O são geralmente demoradas.

No processamento sincronizado ( Synchronous processing ), o processamento dos dados espera a finalização dessas operações de I/O.

Isso faz com que os recursos do sistema sejam desperdiçados até que se finalizem as operações de I/O, o que é muito ineficiente.

Page 4

Asynchronous processing

Portanto, precisávamos de uma abordagem diferente, que foi chamada processamento assíncrono ou Asynchronous processing.

No processamento assíncrono, processos que necessitam realizar operações de I/O devem esperar enquanto outros processos que não necessitam realizar operações de I/O, completem seus processamentos.

Isso produz uma melhoria de velocidade e eficiência.

Page 5

AJAX

AJAX é o acrônimo para "Asynchronous Javascript API for XML".

As páginas web atuais possuem mais conteúdo e características e, portanto, levam mais tempo para carregar.

AJAX é uma maneira de se fazer "requisições em background" para o servidor.

Page 6

AJAX

No AJAX, o usuário não tem que deixar a página web quando uma requisição em background for realizada.

Pelo AJAX, somente certos elementos de uma página web serão atualizados em tempo real.

As outras partes de uma página web não serão alteradas.

Page 7

AJAX

Alguns exemplos da utilização do AJAX podem ser checagem de emails, Twitters na timeline, etc.

O cliente realiza regularmente um "poll" no servidor para saber se existem atualizações.

Estas checagens constantes oneram o servidor e portanto fazemos uso de um processamento assíncrono para usar as threads de modo eficiente.

Outros métodos envolvem o servidor realizando "pushing" dos dados em direção ao cliente quando houverem novas atualizações no servidor.

Page 8

Asynchronous Request API

Para habilitarmos o processamento assíncrono, nós primeiro devemos declará-lo no descritor de implantação ou como uma annotation.

Isso será especificado no DD como segue:

Para habilitarmos o processamento assíncrono, nós primeiro devemos declará-lo no descritor de implantação ou como uma…

Page 9

Asynchronous Request API

Pode ser declarado como segue:

Pode ser declarado como segue:

O fato de habilitarmos a capacidade assíncrona não irá iniciar instantaneamente a comunicação assíncrona.

Como padrão, o ciclo síncrono de requisição / resposta estará habilitado se todos os recursos estiverem disponíveis e não houver tempo de espera para aquisição dos mesmos.

Page 10

Asynchronous Request / Response Cycle

O ciclo assíncrono de requisição / resposta pode ser descrito como segue:

Uma vez que o método service for chamado, o método service do servlet apropriado será chamado.

O método service poderá então chamar o método doGet ou outros métodos ou então dispachar a chamada.

No decorrer do processamento, o método startAsync() será chamado a partir do objeto ServletRequest de modo a iniciar o ciclo assíncrono.

O método startAsync() retorna um objeto AsyncContext.

O objeto AsyncContext é um ambiente no qual os objetos ServletRequest e ServletResponse podem ser recuperados.

Page 11

Asynchronous Request / Response Cycle

Em um ciclo assíncrono, uma vez que o método service() original finaliza, o container ainda NÃO irá comitar e encerrar a thread.

Agora, a thread que realiza processamento executa em paralelo, utilizando o 'AsyncContext' obtido anteriormente.

Essa tarefa paralela poderá fechar os objetos request e response originais pela chamada ao método complete() do objeto AsyncContext uma vez que seja finalizado o processamento.

Poderá também chamar o método dispatch() a partir do objeto AsyncContext de modo a delegar processamento.

É importante lembrar que podemos utilizar dispatch() em requisições para componentes que não suportam o processamento assíncrono.

Page 12

ServletRequest API

A seguir veremos alguns métodos que foram adicionados à API ServletRequest de modo a suportar o processamento assíncrono:

boolean isAsyncSupported() - Verifica se a requisição suporta operações assíncronas.

boolean isAsyncStarted() - Verifica se essa requisição foi posta em modo assíncrono.

AsyncContext startAsync(ServletRequest, ServletResponse) - Coloca a requisição em modo assíncrono, inicializando o objeto AsyncContext com os objetos ServletRequest e ServletResponse passados ao método.

Page 13

ServletRequest API / AsyncContext

AsyncContext startAsync() - coloca essa requisição em modo assíncrono, inicializando seu objeto AsyncContext com os objetos ServletRequest e ServletResponse originais não empacotados.

AsyncContext getAsyncContext() - obtém o objeto AsyncContext que foi criado ou reinicializado pela mais recente chamada a startAsync() ou a startAsync(ServletRequest,ServletResponse) nessa requisição.

Agora veremos a interface AsyncContext

Como pudemos ver, a interface AsyncContext será utilizada para realização de processamento assíncrono.

Page 14

Interface AsyncContext

Será utilizada para se obter dados de requisição ( request data ) e enviar a resposta, chamando o método complete() para comitar a resposta.

Os métodos da interface AsyncContext são:

ServletRequest getRequest() - obtém o request que foi utilizado para inicializar esse objeto AsyncContext pela chamada ao método ServletRequest#startAsync() ou então ServletRequest#startAsync(ServletRequest, ServletResponse).

ServletResponse getResponse() - obtém o objeto response que foi utilizado para inicializar esse objeto AsyncContext pela chamada ao método ServletRequest#startAsync() ou então ServletRequest#startAsync(ServletRequest, ServletResponse).

boolean hasOriginalRequestAndResponse() - retornará true caso o objeto AsyncContext tenha sido criado com os objetos request e response originais da requisição ( através da chamada ao método startAsync() ) ou false caso contrário.

void setTimeout(long miliseconds) - Configura o valor de timeout ( em milissegundos ) para esse objeto AsyncContext.

long getTimeout() - Obtém o timeout ( em milissegundos ) desse objeto AsyncContext.

void start(Runnable task) - faz com que o container dispare uma thread, possivelmente para uma fila de gerenciamento de threads, de modo a rodar task especificada.

void dispatch(String path) - Despacha os objetos request e response desse AsyncContext para o recurso mapeado pelo caminho path.

void complete() - Completa a operação assíncrona iniciada na requisição (objeto ServletRequest) utilizada para inicializar esse objeto AsyncContext, fechando o objeto ServletResponse que foi utilizado para inicializar esse objeto AsyncContext.

É importante se lembrar das assinaturas desses métodos assim como das suas funções.

Page 15

AsyncListener

O objeto AsyncListener é registrado no objeto AsyncContext, utilizando-se o método addListener()

O objeto AsyncListener é registrado no objeto AsyncContext, utilizando-se o método addListener()

O objeto AsyncListener possui quatro métodos:

O objeto AsyncListener possui quatro métodos:

Esses métodos seguem o ciclo de vida de uma requisição assíncrona.

Page 16

Concluindo

Discutimos sobre:

Processamento síncrono e assíncrono

AJAX

ServletRequest API para processamento assíncrono.

Information

Description
Concursos Públicos Desenvolvimento de Software (OCEJWCD 6 ONLINE COURSE) Note on Aplicações Web Assíncronas, created by Luis Felipe Guariento on 26/03/2018.
Created by
Luis Felipe Guariento · Mar 2018
Updated
Mar 27, 2018
Views
1
Rating

Feedback

What is it about?

What do you think of the new look?

How do you like it?