The Guice servlet extension seems to be handling @RequestScoped instead of 
your custom scope.  You can create a different scope annotation and use 
bindScope() to have SimpleScope handle it.

On Wednesday, 12 February 2014 09:43:36 UTC-5, Ryan Asleson wrote:
>
> Hello,
>
> I'm using Guice 4.0 beta 2.  I have some experience with Guice 3.0 on a 
> previous project, but no experience with custom scopes.
>
> In my new application I have a Provider for an 
> ApplicationConfigurationobject.  The 
> Provider selects an ApplicationConfiguration object from the servlet 
> context, based on information in the HttpServletRequest which is injected 
> into the Provider.  
>
> The binding looks like this:
>
>
> bind(ApplicationConfiguration.class).toProvider(ApplicationConfigurationProvider.class).in(RequestScoped.class);
>
> So far so good.  The Provider correctly provides the 
> ApplicationConfiguration for each request.
>
> Note that the ApplicationConfiguration is injected into other Providerobjects.
>
> Now, I need to do some processing outside of a servlet request that still 
> depends on the ApplicationConfiguration object.  Specifically, I need to 
> do some processing that is started from a servlet context listener.  The 
> processing occurs after Guice has been initialized.  I have access to the 
> correct ApplicationConfiguration instance and don't need the Provider to 
> provide one.
>
> I created a custom scope following the instructions on the "Custom Scopes" 
> wiki page, and registered the scope and its annotation with Guice.  
>
> Since I already have the correct ApplicationConfiguration instance and 
> don't need a Provider to provide one, I seed the scope with the 
> ApplicationConfiguration instance.  I then try to do something with the 
> Injector:
>
> SimpleScope scope = ....;
>
>  scope.enter();
>  try
>  {
>    scope.seed(Key.get(ApplicationConfiguration.class), appConfig);
>
>    //ask the injector for an instance of something....
>  }
>  finally
>  {
>     scope.exit();
>  }
>  
> It's failing when I ask the injector for something that depends on an 
> ApplicationConfiguration.  Here's part of the error:
>
> 1) Error in custom provider, com.google.inject.OutOfScopeException: Cannot 
> access scoped object. Either we are not currently inside an HTTP Servlet 
> request, or you may have forgotten to apply 
> com.google.inject.servlet.GuiceFilter as a servlet filter for this request.
>
> Now, I think it might be failing on another Provider that is also request 
> scoped, and this Provider has an ApplicationConfiguration injected into 
> it, but I'm not sure:
>
>
> bind(EntityManager.class).toProvider(EntityManagerProvider.class).in(RequestScoped.class);
>
> (The EntityManager is picked based on the ApplicationConfiguration)
>
> So, I thought I could scope another Provider that is not in request 
> scope, but Guice wouldn't let me do that.
>
> Does anybody have any thoughts on what is going wrong?  Do I need more or 
> additional bindings?  Am I not seeding the custom scope correctly?
>
> Thank you!!!
>
> -Ryan
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to