在Jersey2中使用@Immediate注释

我有一个与此处提出的问题类似的问题: 如何让我的Jersey 2端点在启动时急切地初始化?

但稍微下线了。 我可以立即加载我的资源,但是当我尝试通过调用REST url来使用它时,我得到以下堆栈跟踪。

java.lang.IllegalStateException: Could not find an active context for org.glassfish.hk2.api.Immediate 2. java.lang.IllegalStateException: While attempting to create a service for SystemDescriptor( implementation=com.service.MyResource contracts={com.service.MyResource} scope=org.glassfish.hk2.api.Immediate qualifiers={} descriptorType=CLASS descriptorVisibility=NORMAL metadata= rank=0 loader=null proxiable=null proxyForSameScope=null analysisName=null id=150 locatorId=0 identityHashCode=1249600275 reified=true) in scope org.glassfish.hk2.api.Immediate an error occured while locating the context 

我的TResource类因此被注释:

 @Immediate @Path("/test/v1") public class TResource { 

我的基于Grizzly的服务器设置如下:

 ResourceConfig rc = new ResourceConfig() .packages(true, "com.mystuff" ) .property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, "true"); HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(URI.create(base_uri), rc); ApplicationHandler handler = new ApplicationHandler(rc); ServiceLocatorUtilities.enableImmediateScope(handler.getServiceLocator()); 

任何指导将非常感谢! 欢呼,菲尔

获取ServiceLocator句柄的一种方法是实现一个Feature

 import javax.inject.Inject; import javax.ws.rs.core.Feature; import javax.ws.rs.core.FeatureContext; import org.glassfish.hk2.api.ServiceLocator; import org.glassfish.hk2.utilities.ServiceLocatorUtilities; public class ImmediateFeature implements Feature { @Inject public ImmediateFeature(ServiceLocator locator) { ServiceLocatorUtilities.enableImmediateScope(locator); } @Override public boolean configure(FeatureContext context) { return true; } } 

然后只需注册Feature

 ResourceConfig rc = new ResourceConfig().packages("jersey.hk2.test"); rc.register(ImmediateFeature.class); 

我测试了这个,它运行正常