[Resolvido] Mesma sessão para usuários diferentes usando @SessionScoped do VRaptor
8 respostas
M
maxalves77
[b]Bom dia,
Estou com um problema em que usuários diferentes da minha aplicação possuem a mesma sessão fazendo com que ocorram problemas de navegação na aplicação quando usuários diferentes estão usando o sistema. Estou usando o framework Vraptor e suas anotações.
Na minha aplicação existe a classe Usuario anotada como @Service e @SessionScoped.
Essa classe Usuario é instanciada automaticamente em outro construtor que está anotado com @Autowired.
Alguém teria alguma ideia do porquê esses usuários diferentes estarem acessando a mesma sessão?
As sessoes agora são diferentes para cada usuario, mas nas minhas classes de implementação, como SubCategoryRepositoryImpl, não é possivel anotar como @Autowired o UserSession, e se deixo sem anotar não consigo instancia-lo, vem como nulo.
L
Lucas_Cavalcanti
pq não? o que acontece?
pq vc não recebe as dependências pelo construtor?
M
maxalves77
Já tentei pelo construtor também, dá o mesmo erro.
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘subCategoryRepositoryImpl’ defined in URL [jar:file:/opt/apache/tomcat/6.0.14/webapps/menuIpad-web/WEB-INF/lib/menuIpad-core-0.0.1-SNAPSHOT.jar!/br/com/mbs/mobile/core/sub/category/SubCategoryRepositoryImpl.class]: Unsatisfied dependency expressed through constructor argument with index 1 of type [br.com.mbs.mobile.core.session.UserSession]: : Error creating bean with name ‘userSession’: Scope ‘session’ is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘userSession’: Scope ‘session’ is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
Antes quando era anotado como @SessionScoped e @Service isto não ocorria, não estou entendendo oque pode ser.
L
Lucas_Cavalcanti
o que acontece é que esse SubCategoriaRepositoryImpl é de um escopo maior que sessão… se vc usou alguma anotação do spring ele é singleton. Se vc quer que o Spring crie toda requisição, use o @Component do VRaptor, ou use @Scope(“request”) em cima da classe.
se ela precisar ser singleton, vc precisa brincar com scoped proxies, que é mais chato de configurar.
Só uma curiosidade se poder me responder, porque que o bean fica singleton quando uso o @Service do spring e o @SessionScoped do VRaptor.
Obrigado.
L
Lucas_Cavalcanti
pq o @Service é uma anotação do Spring, e o @SessionScoped é do VRaptor. Se é o spring que está registrando as classes, vc tem que usar as regras do Spring (escopo padrão é singleton, e forma de mudar o escopo é com o @Scope)
pra usar o @SessionScoped do VRaptor, o bean tem que estar anotado com o @Component do VRaptor