2013-10-23 2 views
1

Jetty 9.0.6을 사용하여 Jersey 1.17.1에서 2.3.1로 내 Jersey 웹 응용 프로그램을 마이그레이션하려고합니다. Jersey 1.17.1에서는 시작 중에 자원이로드됩니다. 그러나 거의 동일한 코드 (아래)는 요청이 들어올 때만 시작됩니다.하지만 시작시로드되었는지 확인하고 싶습니다. 즉 주석이 달린 리소스 클래스의 생성자가 호출됩니다. 어떤 생각이 잘못된거야?Jetty가 내장 된 Jersey 2.3을 사용하여 시작시 서블릿을로드하는 방법

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

답변

0

울리,

servletHolder.setInitOrder (0)이 org.glassfish.jersey.servlet.ServletContainer 클래스와 관련이 참조하는. jetty-9.0.6에서 servlet init ordering에 대한 단위 테스트가 끝나고 있으므로 저지 ServletContainer 클래스가 실제로 예상대로 시작시로드되는 것으로 가정합니다.

아마도 저지가 버전 1.17과 2.3 사이에서 동작을 변경했으며 @Path 주석을 사용하여 매핑 된 리소스 만 지연 초기화합니다.

저지가 ServletContainerInitializers와 같이 초기화를 위해 일부 서블릿 3.0 기능을 사용하도록 변경 되었습니까? 그렇다면 ServletContextHandler에서 WebAppContext로 업그레이드하고 이러한 서블릿 3.0 기능에 대한 지원이 활성화되어 있는지 확인해야합니다 (부두가 포함 된 주석 사용에 대한 부두 문서 참조 : http://www.eclipse.org/jetty/documentation/current/using-annotations-embedded.html)

건배 Jan

+0

고마워요, 1 월. 1.17과 2.3 사이의 행동이 변경되었을 가능성이 있습니다. 내가 한 일은 생성자에서 다른 곳으로 코드를 옮기는 것이므로 게으른 초기화로 문제가되지 않습니다. – Uli

관련 문제