JSF - SelectItens qual escopo? Request? Session? ou Application?

Olá,

Estou com uma dúvida sobre qual escopo devo declarar meu managed bean.

No meu sistema existe um monte de comboBox, e esses combobox se repetem em várias páginas, Por essa razão criei um managed bean só para me retornar as lista de SelectItem de cada combo, como mostra o código abaixo:

Ex.:

[code]
@Controller(“itensBean”)
@Scope(“application||session||request”)
public class ItemCombosBean {

private List<SelectItem> itensGestora;
private List<SelectItem> itensOrcamentaria;
private List<SelectItem> itensPrograma;
private List<SelectItem> itensPrograma2;
private List<SelectItem> itensPlano;
private List<SelectItem> itensCategoria;
private List<SelectItem> itensGrupo;
private List<SelectItem> itensModalidade;
private List<SelectItem> itensDespesa;
private List<SelectItem> itensFonte;

public List<SelectItem> getUnidadesGestora(){
	if(itensGestora == null){
		List<UnidadeGestora> unidades = CarregueDoBDTodasAsUnidadesGestoras();
		for(UnidadeGestora opc : unidades){
			itensGestora.add(new SelectItem(opc.getId(),opc.getLabel()));
		}
	}
	return itensGestora;
}

…[/code]

Meus receios pra cada escopo são:

  • Application -> As listas possuem muito itens, e eu terei que manter muitos objetos na mémoria;
  • Session -> Multiplicar objetos que estariam na memoria no escopo de aplicação com o numero de usuários logado => DETONANDO A ESCALABILIDADE DO SISTEMA.
  • Request -> fazer várias consultas no banco para carregar os itens do combobox, a cada vez que um combobox for exibido na tela.

Atualmente estou usando o escopo de aplicacao, no entanto não se seria melhor usar o escopo de request, mesmo efetuando várias consultas não valeria mais a pena do que manter tantos objetos na memoria do servidor.

E ae? Qual escopo devo utilizar?

Acho meio tranquilo pra vc entender quando usar cada um… A pergunta q vc tem q fazer é a seguinte: Vc tem q manter o estado do seu managedBean durante as requisições? No seu caso eu usaria Request…