HK2 failure has been detected in a code that does not run in an active Jersey Error scope

23,104

I was able to solve this problem by using HK2's org.glassfish.hk2.api.PerLookup Annotation instead of Jerseys org.glassfish.jersey.process.internal.RequestScoped Annotation in my AbstractBinder class when I bind my factory to my interface.

import org.glassfish.hk2.api.PerLookup;

@Provider
public class ProjectFeature implements Feature {

  @Override
  public boolean configure(FeatureContext context) {

    context.register(new AbstractBinder() {
      @Override
      protected void configure() {
      bindFactory(ProjectFactory.class)
          .to(Project.class)
          .proxy(false)
          .proxyForSameScope(true)
          .in(PerLookup.class);
    });

    return true;
  }

}
Share:
23,104
Sebastian Frey
Author by

Sebastian Frey

Updated on July 09, 2022

Comments

  • Sebastian Frey
    Sebastian Frey almost 2 years

    Currently I am developing a jersey based RESTful application and would like to use DPI in my resources. (Note: Version of jersey is 2.23.1 and the servlet container is tomcat 8.5.3.)

    Therefore I followed the tutorial Chapter 23. Custom Injection and Lifecycle Management in the jersey docs and created a resource, a factory and bind the factory to a class like this:

    Resource:

    @Path("/{project}/catalogs")
    public class ProjectsResource {
    
       @Inject
       Project project;
    
       ...
    }
    

    Factory:

    public class ProjectFactory extends Factory<Project> {
    
      private final Cache cache = cache.getInstance();
    
      @PathParam("project")
      private String project;
    
      private HttpServletRequest request;
    
      @Inject
      public ProjectFactory(HttpServletRequest request) {
        this.request = request;
      }
    
      @Override
      public Project provide() {
        return cache.get(project, Project.class);
      }
    
      @Override
      public void dispose(Project instance) {}
    
    }
    

    Also I have a feature, which registers an AbstractBinder, which binds my ProjectFactory to my Project class.

    @Provider
    public class ProjectFeature implements Feature {
    
      @Override
      public boolean configure(FeatureContext context) {
    
        context.register(new AbstractBinder() {
          @Override
          protected void configure() {
          bindFactory(ProjectFactory.class)
              .to(Project.class)
              .proxy(false)
              .proxyForSameScope(true)
              .in(RequestScoped.class);
        });
    
        return true;
      }
    
    }
    

    The actually problem is, when I call my Resource everything is fine and i can access my project instance, but in my tomcat catalina logs i am getting the following stacke trace:

    22-Jul-2016 16:29:46.510 WARNING [pool-24-thread-1] org.glassfish.jersey.internal.Errors.logErrors The following warnings have been detected: WARNING: HK2 failure has been detected in a code that does not run in an active Jersey Error scope.
    WARNING: Unknown HK2 failure detected:
    MultiException stack 1 of 3
    java.lang.IllegalStateException: Not inside a request scope.
        at jersey.repackaged.com.google.common.base.Preconditions.checkState(Preconditions.java:173)
        at org.glassfish.jersey.process.internal.RequestScope.current(RequestScope.java:233)
        at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:158)
        at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022)
        at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:765)
        at org.jvnet.hk2.internal.ServiceLocatorImpl.getUnqualifiedService(ServiceLocatorImpl.java:772)
        at org.jvnet.hk2.internal.IterableProviderImpl.get(IterableProviderImpl.java:111)
        at org.glassfish.jersey.server.internal.inject.AbstractContainerRequestValueFactory.getContainerRequest(AbstractContainerRequestValueFactory.java:71)
        at org.glassfish.jersey.server.internal.inject.PathParamValueFactoryProvider$PathParamValueFactory.provide(PathParamValueFactoryProvider.java:93)
        at org.glassfish.jersey.server.internal.inject.ParamInjectionResolver.resolve(ParamInjectionResolver.java:134)
        at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:211)
        at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:234)
        at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:357)
        at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)
        at org.jvnet.hk2.internal.PerLookupContext.findOrCreate(PerLookupContext.java:70)
        at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022)
        at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:114)
        at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:88)
        at org.jvnet.hk2.internal.FactoryCreator.dispose(FactoryCreator.java:175)
        at org.jvnet.hk2.internal.SystemDescriptor.dispose(SystemDescriptor.java:526)
        at org.glassfish.jersey.process.internal.RequestScope$Instance.remove(RequestScope.java:532)
        at org.glassfish.jersey.process.internal.RequestScope$Instance.release(RequestScope.java:549)
        at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:968)
        at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:922)
        at de.moss.ems.rest.resource.AbstractBaseResource.send(AbstractBaseResource.java:118)
        at de.moss.ems.rest.resource.AbstractBaseResource.resume(AbstractBaseResource.java:165)
        at de.moss.ems.rest.resource.catalog.CatalogsResource.handleGet(CatalogsResource.java:49)
        at de.moss.ems.rest.resource.catalog.AbstractCatalogResource.lambda$asyncGetRequest$0(AbstractCatalogResource.java:44)
        at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    MultiException stack 2 of 3
    java.lang.IllegalArgumentException: While attempting to resolve the dependencies of de.moss.ems.rest.factory.ProjectFactory errors were found
        at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:246)
        at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:357)
        at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)
        at org.jvnet.hk2.internal.PerLookupContext.findOrCreate(PerLookupContext.java:70)
        at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022)
        at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:114)
        at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:88)
        at org.jvnet.hk2.internal.FactoryCreator.dispose(FactoryCreator.java:175)
        at org.jvnet.hk2.internal.SystemDescriptor.dispose(SystemDescriptor.java:526)
        at org.glassfish.jersey.process.internal.RequestScope$Instance.remove(RequestScope.java:532)
        at org.glassfish.jersey.process.internal.RequestScope$Instance.release(RequestScope.java:549)
        at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:968)
        at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:922)
        at de.moss.ems.rest.resource.AbstractBaseResource.send(AbstractBaseResource.java:118)
        at de.moss.ems.rest.resource.AbstractBaseResource.resume(AbstractBaseResource.java:165)
        at de.moss.ems.rest.resource.catalog.CatalogsResource.handleGet(CatalogsResource.java:49)
        at de.moss.ems.rest.resource.catalog.AbstractCatalogResource.lambda$asyncGetRequest$0(AbstractCatalogResource.java:44)
        at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    MultiException stack 3 of 3
    java.lang.IllegalStateException: Unable to perform operation: resolve on de.moss.ems.rest.factory.ProjectFactory
        at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:386)
        at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)
        at org.jvnet.hk2.internal.PerLookupContext.findOrCreate(PerLookupContext.java:70)
        at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022)
        at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:114)
        at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:88)
        at org.jvnet.hk2.internal.FactoryCreator.dispose(FactoryCreator.java:175)
        at org.jvnet.hk2.internal.SystemDescriptor.dispose(SystemDescriptor.java:526)
        at org.glassfish.jersey.process.internal.RequestScope$Instance.remove(RequestScope.java:532)
        at org.glassfish.jersey.process.internal.RequestScope$Instance.release(RequestScope.java:549)
        at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:968)
        at org.glassfish.jersey.server.ServerRuntime$AsyncResponder.resume(ServerRuntime.java:922)
        at de.moss.ems.rest.resource.AbstractBaseResource.send(AbstractBaseResource.java:118)
        at de.moss.ems.rest.resource.AbstractBaseResource.resume(AbstractBaseResource.java:165)
        at de.moss.ems.rest.resource.catalog.CatalogsResource.handleGet(CatalogsResource.java:49)
        at de.moss.ems.rest.resource.catalog.AbstractCatalogResource.lambda$asyncGetRequest$0(AbstractCatalogResource.java:44)
        at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1626)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
    

    Any ideas how I can solve this warnings?

  • Sebastian Frey
    Sebastian Frey over 7 years
    Unfortunately this did not solve my problem. Thanks anyway!