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.
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:
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…