VRAPTOR com cluster

Pessoal, estou me deparando um probleminha bem esquisito. Configurei um cluster de jboss 6.1.0, e minha aplicação está usando Vraptor 3.4.1. O que ocorre que não estava conseguindo replicar minha sessao para os nós do cluster de jeito nenhum, então criei uma classe bem besta só pra testar a aplicação:

public class TesteServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();

        System.out.println("ID:" + session.getId());

        String att = (String) session.getAttribute("TESTE");

        if (att != null) {
            System.out.println("Esta aqui: " + att);
        } else {
            System.out.println("Não está na sessão. ");
            session.setAttribute("TESTE", "ATT : " + new Date());
        }

    }
}

Bem, quando coloco ela em um projeto web que só contém essa classe e o web.xml, a replicação funciona perfeitamente:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="cluster-teste" version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name>cluster-teste</display-name>

    <distributable/>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <session-config>
        <session-timeout>60</session-timeout> <!-- 60 minutos -->
    </session-config>

    <servlet>
        <servlet-name>TesteServlet</servlet-name>
        <servlet-class>cluster.teste.TesteServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TesteServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

Quando coloco a mesma classe no meu projeto, nada feito. Não funcionada a replicação de sessão.
Bem, acontece que eu comecei a desconfiar de tudo e de todos, foi ai que pensei em retirar o Vraptor do class-path, e então a classe de teste passou a funcionar perfeitamente.

Alguém tem alguma ideia do motivo?

[]s

você está usando o VRaptor com o Spring, Guice ou Pico?

tente trocar pro Guice e veja se funciona.

Estu usando com pico.

tenta trocar pro guice… o pico coloca o container de session scope na sessão do usuário. E como o container não é serializable, ele deve dar pau na replicação…

o guice não faz isso, então só é suficiente vc pegar as suas classes session scoped e torná-las serializable

Obrigado pela dica Lucas, vou fazer os testes e posto aqui os resultados.

Pessoal, problema resolvido, como o Lucas havia falado o pico não funciona muito bem para o cluster. Com o guice funcionou perfeitamente.
Só tem uma bizarrice a mais que to achando que é com o jboss. Quando troquei para o guice container começou a dar um erro de parser no XML web-fragment.xml dentro do META-INF do jar do vraptor. Minha aplicação está usando web-app na versão 2.5 ainda, então ainda uso web.xml, old school, e o vraptor já usa versão 3.0. Não sei se o jboss se perdeu, mas retirei o web-fragment de dentro do jar e funcionou perfeito. Mas ainda não estou satisfeito com o resultado, não queria ter mechido no jar do vraptor, isso me parece POG demais. Estou desconfiando das minhas libs, pois uso hibernate e hibernate-search. Mais precisamente dessa aqui: xml-apis-1.0.b2.jar
Estou pensando que ela possa ter sobrescrito o comportamento padrão do parser que ja existia no jboss. Bem, continuo investigando de qualquer forma.

o vraptor tem a declaração do web-fragments pra vc não precisar declarar o filtro no web.xml, em ambientes servlet 3.0

se sua app tá deployada num server servlet 3.0, pode mudar o seu web.xml pra 3.0 sem problemas.

Sim, Lucas, eu vou fazer esses testes a seguir. Como disse, nao fiquei contente de ter mechido no jar do vraptor. Quero testar uma forma de fazer funcionar sem precisar dessa alteração. Mas como disse estou desconfiando de ter incluido um jar na aplicação que fez alterar o parser XML, e isso está gerando o problema. Quero fazer os testes certinho, e volto a dar um retorno aqui para tentar contar o final da história… :smiley:

Pessoal, consegui descobri a causa do problema.

Achei a discussão abaixo:
http://tomcat.10.n6.nabble.com/distributable-mode-does-not-work-with-Servlet-3-0-td4487088.html

Parece que o tomcat (o jboss usa o tomcat como container web) precisa que todos os web-fragments.xml sejam annotados com senão nada feito, ele não fará a replicação da sessão. Como o web-fragment do vraptor não tem o distributable setado ele interpreta que não pode “distribuir” a aplicação. De fato foi só anotar o web-fragment do vraptor como e tudo funcionou perfeitamente.

Obrigado Lucas pela ajuda!

Oi Andre, tudo bem?
To tentando chegar onde voce ja conseguiu chegar: usar vraptor 3.4.1 com jboss, porem na versao as7.
Voce ta deixando o controle de transações com o jboss? Funciona bem em cluster?
Confesso que estou levando uma surra pra conseguir configurar esse ambiente.

Obrigado.

[quote=f4314n0]Oi Andre, tudo bem?
To tentando chegar onde voce ja conseguiu chegar: usar vraptor 3.4.1 com jboss, porem na versao as7.
Voce ta deixando o controle de transações com o jboss? Funciona bem em cluster?
Confesso que estou levando uma surra pra conseguir configurar esse ambiente.

Obrigado. [/quote]

Estou deixando o controle de transação com o container sim. Na verdade nem me preocupo com isso, minha aplicação usa beans stateless e deixo tudo default, não alterei nada do comportamento padrão. Está funcionando como sempre. Em cluster ou não, funciona do mesmo jeito.
Sempre subo a aplicação web e o ear junto na mesma instancia do jboss então ele sempre pega os beans localmente.
Também não estou fazendo load balance de EJBs. Então sinceramente não sei se isso poderia afetar o comportamento, creio que não.
Com jboss 7 nunca testei, sei que mudou muita coisa em relação ao 6. Estou esperando ficar mais estável para poder começar uns ensaios com ele.

Legal Andre. Fico grato pelo retorno.
Acredito que deva ser pela versão do jboss que esteja dando tanto pano pra manga.
Vou continuar as tentativas.
Um abraço e sucesso.