2014-11-04 2 views
1

다음 시나리오에 대한 프레임 워크 나 솔루션이 있습니까?원격 위치에서 병을 동적으로로드

Tomcat 서버에서 실행되는 webapp가 있습니다. 내 응용 프로그램을 시작할 때 완전히 다른 위치에있는 항아리를 다운로드하고 싶습니다. 외부 넥서스 서버 또는 그와 비슷한 것. 그 항아리에는 스프링으로 주입해야하는 모든 비즈니스 로직이 있습니다.

왜 이런 식으로해야합니까? 내 응용 프로그램은 많은 다른 위치에 설치됩니다. 쉽게 모든 설치에 최신 버전의 코드를 갖기 위해서는 1 위치 만 업데이트하면되고 모든 응용 프로그램은 다시 시작되면 업데이트됩니다.

+1

가능한 dup? http://stackoverflow.com/questions/22569710/how-can-i-automatically-deploy-a-war-from-nexus-to-tomcat – PaulProgrammer

답변

1

응용 프로그램에서 사용자 정의 ClassLoader을 사용해야합니다.

좋은 소식은 직접 작성하지 않아도된다는 것입니다. Java 내장형 인 java.net.URLClassLoader을 사용할 수 있습니다. 나쁜 소식은 Tomcat에 코드를 연결해야하므로 코드가 필요할 수도 있다는 것입니다.

이 검증되지 않은 제안이다 :

  1. 은 Tomcat의 WebappClassLoader
  2. URLClassLoader 멤버를 추가하고 생성자 (또는 start() 같은 LifecycleListener 이벤트 중 하나)
  3. 재정에 초기화 확장하는 ClassLoader 쓰기 같은 메소드의 슈퍼 클래스의 메소드를 호출하는 모든 메소드 및 사용하고있는 URLClassLoader의 같은 메소드를 호출합니다. 순서에 따라 당신도 super.whatever 또는 urlClassLoader.whatever은 당신에게 달려 문의 : 당신이 당신의 웹 응용 프로그램의 META-INF/context.xml 파일에 <Loader>을 정의하여 사용자 정의 ClassLoader를 설치 일
  4. 을 수행하는 방법을 결정하기 위해 서블릿 사양을 참조하십시오.

위의 항목 중 하나라도 도움이 필요하면 Tomcat users' mailing list으로 이관하십시오. 나는 이런 종류의 일을 할 수있는 URLClassLoader를 사용하여 생각

편집 2014년 11월 4일

참고 깨지기 쉬운, 오류가 발생하기 쉬운, 아마 좋은 생각이다. 대신 배포 프로세스를 수정하여 클러스터에서 웹 응용 프로그램을 업데이트하는 것이 더 쉽습니다. 이러한 작업을 위해 Tomcat의 "팜 웹 배포자"를 사용하거나 다른 솔루션을 사용할 수 있습니다. 그러나 네트워크를 통해 클래스를로드하면 삶이 복잡해지며 어떤 경우에는 이상하게 재생산되지 않는 동작이 발생할 수 있습니다.

0

일반적으로 rsync 스크립트 또는 배포 아티팩트를 클러스터에 배포하기위한 스크립트를 사용하여 배포 중에 수행됩니다.

Tomcat에서 제공하는 WebappClassLoader을 원격 위치에서로드하도록 구성 할 수 있습니다.

관련 문제