2015-01-09 8 views
1

Tomcat 8에서 Undertow로 Spring 기반 웹 응용 프로그램을 마이그레이션하려고합니다.Undertow에서 Spring 기반 웹 응용 프로그램 배포

Spring의 WebApplicationInitializer를 사용하여 Spring-MVC 및 HibernateTransactionManager의 프로그래밍 방식 구성을 사용한다.

예를 들어, 내가 서버 시작 물러 문서 (link)에 주어진 단계를 수행 한 후 인스턴스화 할 수 있습니다, 내 목적을 제공하는 것처럼 보이는 ServletContainerInitializerInfo 클래스 (Javadoc) 있습니다 :

ServletContainerInitializerInfo sciInfo = 
    new ServletContainerInitializerInfo(containerInitializerClass, 
     instanceFactory, handlesTypes); 

DeploymentInfo servletBuilder = Servlets.deployment() 
    .addServletContainerInitalizer(sciInfo); 

DeploymentManager manager = Servlets.defaultContainer() 
    .addDeployment(servletBuilder); 
manager.deploy(); 

PathHandler path = Handlers.path(Handlers.redirect("/myapp")) 
    .addPrefixPath("/myapp", manager.start()); 

Undertow server = Undertow.builder() 
     .addHttpListener(8080, "localhost") 
     .setHandler(path) 
     .build(); 
server.start(); 

문제가 있다는 것입니다을 나는 돈 instanceFactoryhandlesTypes 인수를 ServletcontainerInitializerInfo 생성자를 호출하여 대체 할 대상을 알 수 없습니다. 또한 addServletContainerInitalizer 메서드의 이름의 철자가 잘못되었습니다 (초기화 도구 대신 초기화 도구 여야 함).

누군가 도와 드릴 수 있습니까?

감사합니다.

답변

3

언더 토우는 종속성 삽입 또는 인스턴스화 후 주어진 클래스의 인스턴스의 다른 사용자 정의를위한 확장 점으로 InstanceFactory<T>을 사용합니다.

인수는 서블릿 컨테이너 이니셜 라이저의 @HandlesTypes 주석에 해당하는 모든 클래스 집합입니다. 당신의 초기화가 더 @HandlesTypes이없고 의존성 주입을 필요로하지 않는 경우

, 당신은 단순히이 시도 할 수 있습니다 :

MyInitializer initializer = new MyInitializer(); 

InstanceFactory<MyInitializer> instanceFactory 
    = new ImmediateInstanceFactory<>(initializer); 

ServletContainerInitializerInfo sciInfo = 
    new ServletContainerInitializerInfo(MyInitializer.class, 
     instanceFactory, new HashSet<Class<?>>()); 
+0

감사합니다! 응용 프로그램을 컴파일하고 시작할 수있었습니다. 그래도 다른 문제가 있습니다 : Undertow가 Spring의 WebApplicationInitializer 인스턴스를 찾을 수 없습니다. 나는 아마 그것에 대한 별도의 질문을 게시 할 것입니다. – siphiuel

+0

제대로 작동합니다. HandlesTypes 목록에 WebApplicationInitializer의 구체적인 구현을 지정해야했습니다. 다시 한 번 감사드립니다! – siphiuel