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.