JSF 2 + Glassfish 3.1 + Richfaces 3.3.3 e o tormento do @KeepAlive

Olá, estou com o seguinte problema, o pessoal da Infraestrutura está querendo fazer uma migração do glasfish 3.0, que é o que roda atualmente a aplicação para o glasfish 3.1 (justificam que da pra clusterizar e fazer algumas outras coisas que a 3.0 não permite). O problema é, essa nova versão não suporta a anotação @KeepAlive, e praticamente todas as telas desse sistema rodam sobre um bean keepalive.

Tentei fazer a migração do bean de @RequestScopes para @ViewScoped (e tirar a anotação @KeepAlive) porém não obtive muito sucesso.
O drama é, por exemplo, tenho uma tabela e quero editar um dos elementos dessa tabela, faço o seguinte:

<a4j:commandButton image="../resources/img/edit.png" title="Editar Registro" limitToList="true" reRender="edit-dados" action="#{assistenteSocialBean.pegaAssistente(assistente)}" oncomplete="javascript:Richfaces.showModalPanel('modal-edit')"/>

o a4j:commandButton assina em meu Bean um objeto (assistenteSocial) que mantenho na tela para a edição, no oncomplete da ação mando renderizar um pop-up que conterá esse objeto para a edição:

[code]
<rich:modalPanel id=“modal-edit” autosized=“true”>
<f:facet name=“header”>
<h:panelGroup>
<h:outputText value=“Editar Assistente Social” />
</h:panelGroup>
</f:facet>
<f:facet name=“controls”>
<h:panelGroup>
<h:graphicImage value="…/resources/img/close.png" id=“hidelink2” style=“margin: 1px;”/>
<rich:componentControl for=“modal-edit” attachTo=“hidelink2” operation=“hide” event=“onclick”/>
</h:panelGroup>
</f:facet>
<a4j:form id=“edit-dados”>
<h:panelGrid columns=“2” styleClass=“grid-cadastro”>
<h:outputLabel value=“Nome: " for=“nome2” styleClass=“label”/>
<h:inputText id=“nome2” value=”#{assistenteSocialBean.assistenteSocial.nome}" styleClass=“campo-texto”
disabled=“true”/>

        <h:outputLabel value="Tel. Contato: " for="tel-cont2" styleClass="label"/>
        <h:inputText id="tel-cont2" value="#{assistenteSocialBean.assistenteSocial.foneContato}" styleClass="campo-texto telMask" onfocus="telMask()" />

        <h:outputLabel value="E-mail: " for="e-mail2" styleClass="label"/>
        <h:inputText id="e-mail2" value="#{assistenteSocialBean.assistenteSocial.eMail}" styleClass="campo-texto"/>
    </h:panelGrid>
    <a4j:commandButton value="Editar Dados" oncomplete="javascript:Richfaces.hideModalPanel('modal-edit'); #{assistenteSocialBean.funcao}"
                       action="#{assistenteSocialBean.editarAssistente}"
                       limitToList="true" reRender="tabela"/>
</a4j:form>

</rich:modalPanel>[/code]

Até ai tudo bem, tudo funcionou perfeitamente como se estivesse com o @KeepAlive (inclusive os dados são mostrados corretamente no pop-up), porém, quando dou o comando da ação de edição, esse objeto “assistenteSocial” já não existe mais, seu valor se encontra null.

Alguém já passou por problema semelhante? ou está tendo que migrar alguma aplicação em richfaces 3.3 para a nova versão do glassfish e está tendo dificuldade?
Alguma idéia do que fazer para funcionar sem @KeepAlive?

Essa annotation é do richfaces, e não do Glassfish. Deveria funcionar mesmo com a migração para o GF3.1.

Então, por isso também achei bem cabuloso o fato de não funcionar.

Mas não funga… o @KeepAlive é simplesmente ignorado.

vou dar um up aqui para o mesmo problema!

Cara, sei que o topico é antigo mas como ninguem esclareceu o problema e caso alguem se depare com essa duvida aqui la vai.

O richfaces 3 que vc ta usando ai não tem total compatibilidade com JSF 2 e uma das coisas que param de funcionar é o keepalive. Para uma total compatibilidade com JSF 2 deve ser usado o richfaces 4 que foi lançado provendo suporte ao JSF 2. Só que nesta versão eles tiraram o keepalive alegando que no JSF 2 já tinha o escopo viewscope. Mas isso não é suficiente quando se quer manter o estado do managedbean entre mais de uma pagina (view) pois o viewscope só mantem o estado dentro da mesma página.

Para sanar isto quando se usa um container de inversão de controle para aplicar injeção de dependencias tipo spring ou CDI veja este post http://www.guj.com.br/java/257228-como-manter-o-estado-de-um-managedbean-entre-duas-paginas-com-jsf-2

Abraço.

Independente de se usar CDI ou spring, o post abaixo resolve esse problema.

LINK: http://lindbergframework.blogspot.com/2012/02/como-manter-o-estado-de-um-managedbean.html