2015-03-26 2 views
5

У меня аналогичная проблема с одним поднятыми здесь: How do I get my Jersey 2 Endpoints to eagerly initialize on startup?@Immediate использования аннотаций в Jersey2

Но чуть дальше вниз по линии. Я могу сразу загрузить свой ресурс, но когда я пытаюсь использовать его, вызывая URL REST, я получаю следующую трассировку стека.

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()); 

Любое руководство будет наиболее ценится! веселит, Фил

ответ

7

Один из способов получить ручку на 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); 

Я проверил это, и это работает отлично

+0

Спасибо! Это действительно решает проблему. Очень признателен!. Фил – Phil

Смежные вопросы