Vraptor3: replicação de session

Tenho uma aplicação que usa vraptor3 com acesso a um módulo EJB remoto. Esse módulo remoto está hospedado em glassfish rodando em modo cluster com várias instâncias. Todo o processamento grande está nesse modulo EJB, sendo que o vraptor está na camada web apenas como controller, ou seja, pouco processamento e em ambiente não distribuído.

Porém de uns dias para cá a aplicação web está um pouco lenta, e fazendo uns testes notei que realmente estou com falta de recursos. Estou pensando em distribuir também a aplicação web, rodando inicialmente em três clusters e ir aumentado conforme houver necessidade.

Fiz uns testes bem básicos e os objetos de sessão me parecem não estar disponível em todos os clusters. Meus beans de sessão estão todos anotados com @SessionScoped. Procurei então o componente do vraptor que faz o ouject desse atributo na session mas não encontrei. Onde ele está? Como que o vraptor trabalha com a session? É feito um setAttribute manualmente ou a tarefa é delegada ao Spring/Pico?

Além disso alguém já trabalhou com o vraptor em cluster?

Já aproveitando o tópico… como eu faço para remover um atributo da session sem invalidar a session e sem fazer um removeAttribute manualmente, sendo que meu bean é um session-scoped?

Cara, eu nunca usei VRaptor, mas que eu saiba a sessão do usuário fica apenas em um servidor web do cluster (o servidor que o balanceador de carga decidiu). Ele só passa para outro servidor quando este cai, isso é chamado fail-over. Mas para isso o servidor deve estar configurado para fazer fail-over, caso contrário, vai trabalhar como sticky session.

pozzo, depende da configuração que você faz. No caso da sticky-session você cai sempre em um mesmo servidor. No caso com replicação você pode configurar o cluster e load-balance para que a próxima requisição caia sempre em um servidor qualquer, não necessariamente o mesmo da anterior.

https://glassfish.dev.java.net/javaee5/build/GlassFish_LB_Cluster.html

De qualquer forma muito obrigado pela resposta. Vou dar uma analisada na configuração do cluster para verificar se é algo de infra.

Abraços

Bom, encontrei em alguns foruns dizendo que a replicação da sessão é feita no final de cada requisição. Alguns apontam algumas configurações, e pelo jeito tem a ver com o container e não com o VRaptor. De qualquer forma, achei o seguinte trecho no sun-web.xml, talvez lhe ajude:

<sun-web-app>
<session-config>
<session-manager persistence-type="replicated">
<manager-properties>
<property name="relaxCacheVersionSemantics" value="true"/>
</manager-properties>
</session-manager>
</session-config>

Bom, eu também verificaria a viabilidade de usar sticky session. Acredito ser melhor na maioria dos casos.

o VRaptor delega o tratamento de sessão para o container… no caso do Spring todo componente/bean é um atributo na sessão…

não vejo muito como remover algum bean da sessão sem usar um removeAttribute, ou alguma coisa específica do Spring… o que vc pode fazer é ter um método reset no bean de sessão, ou algo do tipo…

pozzo, muito obrigado. Vou efetuar uns testes aqui na aplicação e logo passo um feedback.

Abraços