簡體   English   中英

在資源中嵌入式Jetty解決依賴項注入的Jersey

[英]Jersey with embedded Jetty resolving dependency injection in Resource

在嘗試注入我的資源的依賴項時,我很難將Jetty與Jersey聯系起來。 我正在做的是:

public class MyApplication extends ResourceConfig {
    public MyApplication() {
        register(new MyBinder());
    }
}

我的資料夾簡化了:

public class MyBinder extends AbstractBinder {
        @Override
        protected void configure() {
            bind(ManagerImpl.class).to(Manager.class);
        }
   }

我的資源得到簡化:

@Path("test")
public class MyResource {

    @Inject
    Manager manager;
...
}

我嘗試將所有這些聯系在一起:

ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
ServletContainer jerseyServletContainer = new ServletContainer(new MyApplication());
ServletHolder jerseyServletHolder = new ServletHolder(jerseyServletContainer);
jerseyServletHolder.setInitParameter("jersey.config.server.provider.classnames", MyResource.class.getCanonicalName());
servletContextHandler.setContextPath("/");
servletContextHandler.addServlet(jerseyServletHolder, "/*");

Server server = new Server(threadPool);
ServerConnector connector = new ServerConnector(server);
connector.setPort(httpPort);
server.setConnectors(new Connector[]{connector});
server.setHandler(servletContextHandler);
server.start();

但是我一直收到HTTP錯誤:404

有什么想法可以對它進行排序嗎?

謝謝

好的,我也可以在沒有dropwizard和guice的情況下使它工作。 由於某些原因,Jersey實現自版本2.XX起不包含GuiceComponentProviderFactory。 否則,可以執行以下操作:

Injector injector =  Guice.createInjector( new ServletModule() { ...} );
IoCComponentProviderFactory ioc = new GuiceComponentProviderFactory( resourceConfig, injector );
Server server = JettyHttpContainerFactory.createHttpServer( BASE_URI + "services/", resourceConfig, ioc );

從版本2.X開始,他們已經將HK2 IoC框架與GuiceBirdge集成在一起,因此您需要弄混HK2和Guice:

GuiceBridge.getGuiceBridge().initializeGuiceBridge(aServiceLocator);

因此,我暫時堅持以這種方式將HK2連接在一起:

URI baseUri = UriBuilder.fromUri("http://localhost/").port(8800).build();
Server server = JettyHttpContainerFactory.createServer( baseUri, new MyApplication() );
server.start();

我的ResourceConfig:

public class MyApplication extends ResourceConfig {
    public MyApplication() {
        register(new MyBinder());
        register(MyResource.class);
    }
}

因此,我只是錯過了在注冊我的資料夾之外注冊我的資源的機會。 因此,以這種方式,我完全沒有使用web.xml並擁有很好的嵌入式碼頭服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM