1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

JSF 2.0 - O que é mais otimizado? Manter a lista em memória ou buscar toda vez no banco?

Fala gurizada!

Estou em dúvida em relação a otimização da minha aplicação.

Digamos que eu tenho uma página que usa um @ManagedBean com o escopo @ViewScoped.

Nesta página eu terei um h:selectOneMenu e dentro dele uma lista de s:selectItems.

A minha dúvida é a seguinte:

O que é mais otimizado para uma aplicação de larga escala?


  1. Ao criar o ManagedBean (usando o @PostConstruct), preencher uma List na memória contendo as minhas opções para o combo.
private List<E> listaSelectItems;

@PostConstruct
public void init(){
   listaSelectItems = repositorioEntidade.listaTodos(); //BUSCANDO DO BANCO
}

<h:selectOneMenu>
   <s:selectItems var="i" value="#{beanTeste.listaSelectItems}" label="#{i.nome}"/>
</h:selectOneMenu>

  1. Ter um método que busca diretamente do banco a lista e apenas referenciá-lo na página?
public List<E> listaItens(){
   return repositorioEntidade.listaTodos(); //BUSCANDO DO BANCO
}

<h:selectOneMenu>
   <s:selectItems var="i" value="#{beanTeste.listaItens()}" label="#{i.nome}"/>
</h:selectOneMenu>

Tentando simplificar: devo preencher a lista apenas uma vez quando abro a página, mantendo estes dados na memória ou buscá-los toda vez usando meu método que busca direto do banco?

Acredito que da primeira maneira vou consumir mais memória e da segunda vou consumir mais processamento. Mas qual das duas é a mais otimizada para uma aplicação de larga escala?


UPDATE:

A idéia da aplicação é algo como um e-commerce, podendo ter milhares de acessos simultâneos.

O servidor será um JBoss 6.1 rodando JSF 2.0 + Hibernate com PostgreSQL + Primefaces 4.0.

A máquina no qual ele estará será um tipo de plano cloud que temos aos montes por aí. Quanto menos recurso consumir, mais barato vai ser para manter.

  • E-commerce com milhares de acessos simultânetos? Essqueça JSF, por favor. JPA até vai usando um Cache adequado.

    utluiz   03 de jan de 2014
  • Esquecer JSF? O que você sugere então?

    Leonardo Maciel Veríssimo da Silveira   03 de jan de 2014
  • JSF é ótimo se vc quiser produtividade. Mas se vc tem alguma experiência com essa tecnologia, já deve ter percebido que beans de View e Session impedem que o usuário pode acessar seu sistema em duas ou mais abas ou janelas diferentes, oque inviabiliza um e-commerce. Uma alternativa seria usar apenas beans de Request. Eu já tente fazer isso com o primefaces. Sem chance, componentes como datatable simplesmente não funcionam bem, além do que você perderia a maioria dos benefícios da tecnologia que é justamente salvar o estado.

    utluiz   04 de jan de 2014
  • Sinceramente nunca vi uma aplicação JSF para "milhares de usuários". Talvez dezenas. Seria muito melhor usar um action based web framework como Spring MVC, Jax-RS, vRaptor, Struts, Play! e assim por diante. Não que aplicações escaláveis sejam fáceis de desenvolver em qualquer plataforma ou framework, mas.... vc já olhou o código fonte que o JSF gera no navegador?

    utluiz   04 de jan de 2014
  • Sim, já vi o código que o jsf gera no navegador. A aplicação que eu trabalho é totalmente AJAX (o que foi um grave erro de quem a estruturou no passado) e só trabalhamos com uma instância aberta no navegador por vez. Não há troca de página nunca, apenas no login (o desempenho ficou horrivel depois de um tempo).

    Não tinha conhecimento deste problema de não poder abrir duas abas no navegador ao mesmo tempo mesmo sendo @ViewScoped. Achei que não haveria problema já que o STATE_SAVING_METHOD está definido como CLIENT. Vou fazer alguns testes em relação a isso.

    Leonardo Maciel Veríssimo da Silveira   06 de jan de 2014
Mostrar todos os 6 comentários>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

5 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags jsf java-ee otimização java banco-de-dados ou faça a sua própria pergunta.