Como recuperar listagens sob demanda no Java EE 7
Imagine que você precisa criar uma aplicação que recupera um grande volume de dados e o exibe no formato de listagens. Para implementar esse requisito, temos duas abordagens: a primeira, considerada por muitos uma má prática, consiste em carregar todos os registros cadastrados no SGBD ao mesmo tempo e colocá-los em memória; já a segunda, bastante recomendada para listagens extensas, é aquela na qual recuperamos do banco de dados apenas os registros que estão sendo visualizados pelo usuário, ou seja, trazemos as informações sob demanda.
De forma intuitiva, sabemos que a segunda solução traz alguns benefícios para qualquer aplicação. Para demonstrar isso, criaremos um pequeno sistema Java explorando inicialmente a listagem em memória de uma grande quantidade de clientes cadastrados no SGBD. Em seguida, mostraremos como implementar a mesma operação utilizando a recuperação por demanda, para podermos comprovar as vantagens da segunda opção através da análise de apontamentos de performance e consumo de recursos.
Autores: Pablo Bruno de Moura Nóbrega e Joel Xavier Rocha
Em geral, as aplicações que desenvolvemos — sejam elas web, desktop ou mobile — necessitam exibir listas de registros em tabelas. Essa é uma situação mais do que comum para a maioria dos programadores. O problema surge quando a quantidade de linhas a ser mostrada é muito grande. Nesses casos, colocar em memória todo o volume de dados retornado do banco pode ser extremamente perigoso, podendo inclusive derrubar a aplicação. Por esse motivo, precisamos tratar com bastante atenção como devemos recuperar o conteúdo a ser exibido para o usuário. Uma boa recomendação é dar uma lida em alguns artigos e discussões na web bem relevantes sobre o assunto. Entre essas postagens, podemos destacar “Avoid the Pains of Pagination” e “The Impact of Paging vs. Scrolling on Reading Online Text Passages” (consulte a seção Links para saber onde encontrá-las).
No que se refere à implementação da solução para o cenário descrito anteriormente, a estratégia comumente adotada para exibir dados em tabelas é a primeira que mencionamos: recuperar de uma única vez o conteúdo da base de dados, adicioná-lo em uma coleção e, a partir dessa coleção, permitir que o usuário possa visualizar os dados em uma tabela através de páginas, tendo cada uma delas uma quantidade predefinida de registros. Essa abordagem é chamada de paginação em memória porque os dados já estão todos disponíveis na RAM ou em disco (se a memória virtual estiver sendo usada), mesmo que só uma parte dos registros esteja sendo mostrada. Fica claro, no entanto, que esse cenário é considerado uma má prática, pois pode consumir amplamente os recursos disponíveis do servidor de aplicação.
Para resolver esse problema, utilizamos o que chamamos de paginação por demanda, que consiste em obter da base de dados apenas o conteúdo visível para o usuário, ou seja, os registros que estão sendo mostrados na página. Assim, reduzimos largamente a quantidade de memória consumida e o processamento envolvido na operação, pois estamos criando um número pequeno de objetos por vez.
Neste artigo, veremos as duas implementações de listagem de dados descritas em funcionamento através de um pequeno sistema que iremos criar envolvendo JSF 2.2, CDI 1.1 para injeção de dependências, EJB 3.2 na camada de negócio, PrimeFaces 5.3 como biblioteca de interface rica, Facelets para utilização de templates (evitando que dupliquemos código em nossas páginas) e Hibernate 5.0 acessando uma base de dados no PostgreSQL. Além disso, o Maven será configurado para gerenciamento das dependências, e nosso servidor de aplicação será o WildFly 10.0.0. Finalizando o conteúdo, analisaremos, através de gráficos e relatórios gerados pelo VisualVM e pelo pacote de ferrame ...
Desbloqueie toda a DevMedia
-
+2000 artigos e vídeos
-
+40 trilhas sobre Front-end, Back-end, IA e muito mais
-
+5000 exercícios práticos
-
Mentorias ao vivo individuais
Confira outros conteúdos:
Introdução ao JDBC
Novidades do Java
Teste unitário com JUnit
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.