[Resolvido] Problemas com o @SessionScope vRaptor3

Alguém pode me explicar por que esse erro ocorreu:
[Stack]

org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependenciesException: br.inf.view.UsuarioController has unsatisfied dependency: interface br.com.caelum.vraptor.Result among unsatisfiable dependencies: [[interface br.com.caelum.vraptor.Result]] where org.picocontainer.DefaultPicoContainer@2608fb65:2<I>&lt;org.picocontainer.DefaultPicoContainer@5ff75ab1:0&gt;<I>&lt;org.picocontainer.DefaultPicoContainer@17b0b765:73&gt;&lt;| was the leaf container being asked for dependencies.
	at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:156)
	at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:184)
	at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:289)
	at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:229)
	at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:66)
	at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:92)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:607)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:572)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:552)
	at org.picocontainer.containers.ImmutablePicoContainer.getComponent(ImmutablePicoContainer.java:42)
	at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:622)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:572)
	at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:580)
	at br.com.caelum.vraptor.ioc.pico.PicoBasedContainer.instanceFor(PicoBasedContainer.java:39)
	at br.com.caelum.vraptor.ioc.pico.PicoProvider$1.instanceFor(PicoProvider.java:78)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:46)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.inf.gentec.relatorios.filter.InterceptorSeguranca.intercept(InterceptorSeguranca.java:33)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	at br.com.caelum.vraptor.ioc.pico.PicoProvider.provideForRequest(PicoProvider.java:179)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:662)

Isso acontece quando eu anoto o meu @Resource com @SessionScope. Como pode ser observado na stack eu estou usando Pico Container.
Alguém ai ja passou por esse problema?

jweibe,

Bom primeiro você pode certificar que todas as dependências estão nos classpath do projeto.
Caso estejam, posta o codigo da sua classe UsuarioController.

Abraçooo !

As classes estão todas corretas o fato e que se eu deixo como padrão @RequestScope tudo funciona normal…
Mais o problema e que ele não injeta a interface Result.

has unsatisfied dependency: interface br.com.caelum.vraptor.Result among unsatisfiable dependencies

vc tá injetando o Result @RequestScoped em um component @SessionScoped… ou seja, o escopo dele é menor.

se eu injeto o result, é o result de qual das requisições?

porque vc precisa disso?

Bom Lucas Cavalcanti o que ocorreu foi o seguinte eu pretendia adicionar um @Resource na @SessionScope e foi me dado
esse erro… a principio eu nem me atentei que esse problema poderia ocorrer devido ao meu Resource receber um Result que por
sua vez esta no contexto de Request.
No meu caso eu queria guardar algumas informações na Session e não queria pegar um objeto de HttpSession e setar um atributo,
mais sim anotar um componente como @SessionScope. A solução foi criar um componente sem dependências e anota-lo como a
a anotação @SessionScope e tudo se resolveu.
Bom mais uma pergunta todos os meus @Resource por padrão são do escopo de Request?
É possivel alterar esse comportamento?

Todos os componentes do VRaptor são Request por padrão.

Num @Resource não é uma boa idéia ser de escopo diferente de request pq ele geralmente depende do Result e/ou do Validator, que são
request scoped.

Tudo que vc colocaria num @Resource @SessionScoped, vc pode extrair pra alguma outra classe @SessionScoped que guarda os dados.

[quote=Lucas Cavalcanti]
Tudo que vc colocaria num @Resource @SessionScoped, vc pode extrair pra alguma outra classe @SessionScoped que guarda os dados.[/quote]

Foi exatamente o que eu fiz. Obrigado pelo esclarecimento. xD

[code]@Resource
public class IndexController {
private HttpServletRequest request;
private Result result;
private Usuario usuario;

public IndexController(Result result, Usuario usuario,HttpServletRequest request) {
	this.result = result;
	this.usuario = usuario;
	this.request = request;
}[/code]

AUTENTICAR … E MONTAR A SESSÃO

@Path("/autenticar") public void autenticar(Usuario usuario) { usuario = new UsuarioDao().validar(usuario); this.usuario = usuario; if (usuario.getId()!=null) { usuario.setLogado(true); this.result.redirectTo(this).raiz(); // REDIRECIONA PARA A PÁGINA PRINCIPAL DO SISTEMA }else{ this.usuario.setMsg(new Msg("Login não autorizado!")); this.result.redirectTo(this).login(usuario); // VOLTA PARA A PÁGINA DE LOGIN } }

Aqui, os valores setados na sessão, no método autenticar … somem.

[code]@Restrito
@Path("/raiz")
public void raiz() {
// montar menus e exibir a tela
}

}
[/code]

o seu controller é de escopo de request… (o escopo padrão)… não adianta setar o this.usuario numa requisição, na outra vai ser outro objeto.

crie um componente @SessionScope pra controlar isso.