2013-08-06 16 views
6

Chcę użyć Guice + Jersey 2.0 na Grizzly. Zgodnie z tą dyskusją How to use guice-servlet with Jersey 2.0? nie ma obecnie bezpośredniej integracji Guice dla Jersey2, ale można to osiągnąć za pomocą HK2 jako mostu. Sprawdziłem również przykładowy projekt w Github https://github.com/piersy/jersey2-guice-example-with-test. Ten projekt jest realizowany za pomocą Jetty.Jak używać jerseyu 2.0 guice na grizzly

Ale moim problemem jest wdrożenie go w Grizzly. Na Jetty jest używany tak jak ten

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

} 

Mój problem z grizzly polega na tym, jak uzyskać ten obiekt serviceLocator?

Dziękuję.

Odpowiedz

5

Stworzyłem próbkę tutaj https://github.com/oleksiys/samples/tree/master/jersey2-guice-example-with-test

Grizzly kod inicjujący wygląda następująco:

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

musiałem dodać 'System.in.read()'. Dziękuję –

+0

Ta próbka działa idealnie, ale jak zarejestrować ContainerResponseFilter? – javapenguin

1

dodać dependecy

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

tworzyć cecha

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; 
    } 
} 

cecha rejestr

ResourceConfig resourceConfig = new ResourceConfig(); 
resourceConfig.register(GuiceFeature.class); 
Powiązane problemy