2013-08-06 9 views
6

Ich möchte Guice + Jersey 2.0 auf Grizzly verwenden. Gemäß dieser How to use guice-servlet with Jersey 2.0? Diskussion gibt es derzeit keine direkte Guice-Integration für Jersey2, aber es kann unter Verwendung von HK2 als Brücke erreicht werden. Ich habe auch das Beispielprojekt in Github https://github.com/piersy/jersey2-guice-example-with-test überprüft. Dieses Projekt wird mit Jetty implementiert.Wie Trikot 2.0 Guice auf Grizzly verwenden

Aber mein Problem ist, es in Grizzly zu implementieren. Auf Anlegestelle ist es wie dieses

@Inject 
public MyApplication(ServiceLocator serviceLocator) { 
    // Set package to look for resources in 
    packages("example.jersey"); 

    System.out.println("Registering injectables..."); 

    GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator); 

    GuiceIntoHK2Bridge guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class); 
    guiceBridge.bridgeGuiceInjector(Main.injector); 

} 

Mein Problem auf Grizzly verwendet wird, wie dieses Objekt Servicelocator zu bekommen?

Vielen Dank.

Antwort

5

ich die Probe hier https://github.com/oleksiys/samples/tree/master/jersey2-guice-example-with-test

Der Grizzly Initialisierungscode sieht wie folgt erstellt haben:

final URI uri = UriBuilder.fromUri("http://127.0.0.1/") 
     .port(8080).build(); 

// Create HttpServer 
final HttpServer serverLocal = GrizzlyHttpServerFactory.createHttpServer(uri, false); 

// Create Web application context 
final WebappContext context = new WebappContext("Guice Webapp sample", ""); 

context.addListener(example.jersey.Main.class); 

// Initialize and register Jersey ServletContainer 
final ServletRegistration servletRegistration = 
     context.addServlet("ServletContainer", ServletContainer.class); 
servletRegistration.addMapping("/*"); 
servletRegistration.setInitParameter("javax.ws.rs.Application", 
     "example.jersey.MyApplication"); 

// Initialize and register GuiceFilter 
final FilterRegistration registration = 
     context.addFilter("GuiceFilter", GuiceFilter.class); 
registration.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), "/*"); 

context.deploy(serverLocal); 

serverLocal.start(); 
+0

Had 'System.in.read()' hinzuzufügen. Danke –

+0

Dieses Beispiel funktioniert perfekt, aber wie registrieren Sie einen ContainerResponseFilter? – javapenguin

1

hinzufügen dependecy

compile group: "org.glassfish.hk2", name: "guice-bridge", version: "2.4.0" 

erstellen Feature

public class GuiceFeature implements Feature { 

    @Override 
    public boolean configure(FeatureContext context) { 
     ServiceLocator serviceLocator = ServiceLocatorProvider.getServiceLocator(context); 

     GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator); 
     GuiceIntoHK2Bridge guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class); 

     Injector injector = Guice.createInjector(new AbstractModule() { 
      @Override 
      protected void configure() { 
       bind(YYY.class).to(ZZZ.class); 
      } 
     }); 
     guiceBridge.bridgeGuiceInjector(injector); 

     return true; 
    } 
} 

Register Funktion

ResourceConfig resourceConfig = new ResourceConfig(); 
resourceConfig.register(GuiceFeature.class);