2015-03-26 13 views
5

mam podobny problem do jednej podniesione tutaj: How do I get my Jersey 2 Endpoints to eagerly initialize on startup?@Immediate użycie adnotacji w Jersey2

Ale nieco dalej w dół. Mogę załadować mój zasób natychmiast załadowany, ale kiedy próbuję go użyć, wywołując URL REST, otrzymuję następujący ślad stosu.

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 

Moja klasa TResource oznakowana jest tak:

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

Moja Grizzly serwer oparty jest ustawiony tak:

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

Wszelkie wskazówki byłyby najbardziej mile widziane! okrzyki, Phil

Odpowiedz

7

jedną stronę, aby uzyskać uchwyt na ServiceLocator jest wdrożenie 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; 
    } 
} 

Wtedy właśnie zarejestrowania Feature

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

Przetestowałem to i to działa dobrze

+0

Dzięki! To rzeczywiście rozwiązuje problem. Bardzo doceniane !. Phil – Phil

Powiązane problemy