[JSF 1.2] Diferença entre ManageBeans na Session e a4j:keepAlive?

Prezados,
Gostaria de retirar algumas dúvidas:

  1. Alguém poderia me dizer quais são todos os problemas fora consumo de memória deixar os Beans na Session?
    Eu li na internet que não era bom…não era recomendado…que não se devia ter session beans com mais de 2kb…só que nada objetivo com os pontos fracos disso =/

  2. Alguem poderia me dizer se o que eu acabei de ler sobre como utilizar o a4j:keepAlive abaixo está correto?
    Segue:
    2.1. Alguém faz uma requisição a minha página que possue o <a4j:keepAlive beanName = “MeuBean” />
    2.2. Minha página pega o Request Bean “Meu Bean” e sabe que precisa salvar o estado dele por causa da tag keepAlive.
    2.3. A pagina que possue o KeepAlive, irá reenviar o mesmo “MeuBean” populado que recebeu, ao invés de um novo como request normal.

  3. Caso meu entendimento do keep alive esteja correto, o KeepAlive realmente se torna mais eficiênte que SessionBeans já que ele simula colocar o Bean na sessão?

Obrigado e desculpe tantas dúvidas^^

Att,
Diogo Barbosa.

Ops, fui editar e clickei em citar sem querer ¬¬

bom, até onde eu sei a tag keepAlive serve sim para que o bean salve o estado dele, mas ele tem algumas diferenças.

O estado do bean só é mantido até você navegar para outra página, que não possua uma tag keepAlive que o referencie.
Exemplo: você está na tela cadastro.xhtml e tem seu CadastroBean, e na própria cadastro.xhtml possui a tag <a4j:keepAlive beanName="cadastroBean"/> Portanto nessa página o estado do seu CadastroBean será mantido.

Porém se navegar para a página resultado.xhtml e a mesma não tiver uma tag keepAlive referenciando CadastroBean, ele perde o seu estado.

É um escopo maior que Request e teoricamente menor do que Session (porque você pode ter o keepAlive em todas as telas).

No JSF 2.0 não existe mais isso por causa da criação do @ViewScoped do próprio JSF, que dizem que substitui o keepAlive, o que não é verdade. Existem relatos de pessoas dizendo que se abre um modal na página, o bean pode perder o estado. São casos bem específicos.

Agora quanto a melhora de eficiência, não sei dizer.

Uma pequena dúvida.
Falando de requisições…

A página que possue a Tag irá manter o status atual do bean para a próxima página após enviar a requisição dela ou ela mantem o status do Bean da requisição anterior a ela que possue a Tag?

Resumindo: A dúvida é se a página que possue o keep alive manter o estado da requisição que deu origem a ela ou se ela vai mantar na requisição que ela enviar.

<a4j:keepAlive beanName="cadastroBean"/>  

Bom dia Senhores,


tenho uma dúvida relacionado a este assunto…em JSF 2

Estou utilizando JSF 2 com PrimeFaces, possuo um único bean para páginas de relatório, sendo que cada página utiliza um metodo especifico deste meu bean. O Meu bean está com escopo de REQUEST.
Em todas as telas possuo 2 forms, um form1 com campos e um botão para carregar o form2, que tem uma ou mais dataTable, que com o escopo de request é carregada após o processamento de um metodo do bean chamado pelo p:button do form1. Porém tenho uma dataTable com detalhe( o detalhe do Objeto é um de seus atributos, que no caso é do tipo List), onde faço uso da tag [code]

<p:dataTable id=“dataTableIncidentePeriodo” …>
<p:column style=“width:25px;” exportable=“false”>
<p:rowToggler />
</p:column>


[/code]

e os detalhes de cada linha do DataTable são exibidos na tag

<p:rowExpansion> <p:dataTable id="display"....> ....... ....... /* dentro da dataTable faço a exibição dos dados da List, do atributo. Exibindo os detalhes (dataTableIncidentePeriodo) de cada linha da na dataTable display*/ ....... </p:dataTable> </p:rowExpansion> </p:dataTable>

Porém o funcionamento correto, vide http://www.primefaces.org/showcase/ui/data/datatable/expansion.xhtml
só ocorre se o meu Bean estiver com escopo de SESSÃO, o que pra mim é inviável pois o utilizo para mais de uma página(mesmo bean). Desta forma uso o REQUEST e a(s) dataTable(s) é(são) carregada(s) normalmente, após o retorno do metodo do bean retornando para a própria página após ser executado, e quando mudo a página do relatório as variáveis zeram(conforme o esperado).

Meu problema está no acionamento do <p:rowToggler />, pois com o escopo de REQUEST ele não funciona corretamente, não exibe os detalhes de cada linha. Somente em escopo de SESSÃO funciona corretamente, porém quando acessou outra página de relatório, que usa o mesmo bean, as variáveis já vem com valor, devido a sessão…

Alguém teria alguma ideia para resolver este problema? se necessário posso postar mais códigos para exemplificar.