我正在使用Jetty 9.0.6將Jersey Jersey Web應用程序從Jersey 1.17.1遷移到2.3.1。使用Jersey 1.17.1,資源將在啓動過程中加載。然而,幾乎相同的代碼(下面)僅在請求進入時纔開始。但是我想確保它在啓動過程中被加載(即調用帶註釋的資源類的構造函數)。任何想法有什麼不對?如何在啓動時使用帶有嵌入式Jetty的Jersey 2.3加載servlet
public static void startServer(){
org.eclipse.jetty.server.Server server = new Server();
org.eclipse.jetty.servlet.ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
org.glassfish.jersey.servlet.ServletContainer servletContainer = new ServletContainer();
org.eclipse.jetty.servlet.ServletHolder servletHolder = new ServletHolder(servletContainer);
servletHolder.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "mypackage");
servletHolder.setInitOrder(0); // this does not seem to work
context.addServlet(servletHolder, "/*");
server.start();
}
而且大致爲:
package mypackage;
@Singleton
@Path("/foo")
public class MyResource {
public MyResource(){
// I want this to be called when I start the server
}
@Path("bar")
public Response receivePayload(@Context HttpServletRequest request, String payloadString){
// do some stuff
return response;
}
}
謝謝,1月。這可能確實是1.17和2.3之間的行爲在這方面發生了變化。我最終做的是將代碼從構造函數移動到其他位置,這樣我就可以很好地進行延遲初始化。 – Uli