2012-03-06 2 views
5

톰캣 설명서는 (http://tomcat.apache.org/tomcat-6.0-doc/config/context.html)톰캣 업데이트의 context.xml하지만

만 컨텍스트 파일이 존재하지 않습니다하는 경우는 $ CATALINA_BASE/conf/[enginename]/[hostname] /에있는 응용 프로그램의 경우 응용 프로그램 파일 내의 /META-INF/context.xml에있는 개별 파일에 있습니다. 웹 응용 프로그램이 WAR로 패키지 된 경우 /META-INF/context.xml은 이 $ CATALINA_BASE/conf/[enginename]/[hostname] /으로 복사되고 응용 프로그램의 컨텍스트 경로와 일치하는 으로 바뀝니다. 이 파일이 존재하면 새로운 /META-INF/context.xml이있는 새 WAR이 호스트의 appBase에 배치 된 인 경우이 파일을 바꾼 후에 을 대체 할 수 없습니다.

굵게 표시된 텍스트는 분명합니다. 그러나 나는 사실이 아님을 통보합니다. context.xml에와

  1. aaa.war가 웹 어플리케이션에 META-INF
  2. 사본에 포함 : 여기

    는 단계입니다 (I 정확히이 동작이 필요합니다). tomcat이 배포됩니다. 웹 어플리케이션에 META-INF/context.xml에에게
  3. 파일 conf\Catalina\localhost\aaa.xml
  4. 사본을 변경하여 conf\Catalina\localhost\aaa.xml OK
  5. 변경 aaa.war 파일이 변경됩니다!

무엇이 잘못 되었나요? 버그 또는 숨겨진 기능입니까?

배경 - 내가 해결하고 싶은 문제 :

구성 독립적 인 빌드 및 설치. 나는 전쟁 파일을 심는다. 클라이언트는 자신의 설정을 사용하여 Tomcat을 구성합니다. 새 릴리즈를 출시 할 때 설정이없는 전쟁 만 제공하고 배치하면 클라이언트 특정 구성을 사용하게됩니다.

설명서에 따르면 가장 좋은 장소는 context.xml입니다.하지만 매번 덮어 쓰면 전혀 사용하지 않는 것이 좋습니다. (? 왜 나는 새로운 결과물이 생성하는 경우 빌드 시간에 뭔가를 변경하면 큰 구성을 이용하지 JNDI와 같은 것을 사용합니다.)

환경 : 윈도우, 바람둥이 나는했습니다 6.0.33

+0

비슷한 문제 : http://stackoverflow.com/questions/4158468/tomcat-context-management – takacsot

+0

답변이 사이트에 이미 표시되었습니다. http://stackoverflow.com/questions/7142365/how-to-provide-a -context-a-web-application-under-tomcat을위한 설정 – takacsot

답변

6

을 똑같은 문제에 직면하고 직접적인 오해를 불러 일으키지 않으면 문서가 적어도 부적절합니다.

이미 배포 된 WAR 파일의 새 버전을 webapps 디렉토리에 복사하면 Tomcat은 기존 애플리케이션을 재배치하지 않지만 이전 애플리케이션을 배포 취소 한 다음 새 애플리케이션을 배포한다는 점에서 문제가 있습니다. 차이점은 처음에는 중요하지 않지만 문제는 이전 응용 프로그램을 배포 해제하는 동안 conf/Catalina/localhost의 모든 컨텍스트 파일이 삭제된다는 것입니다. 그런 다음 새 WAR 파일의 새 컨텍스트 파일이 새 응용 프로그램을 배포하는 동안 conf/Catalina/localhost에 복사됩니다.

발견 된 유일한 해결책은 새 응용 프로그램을 WAR 파일로 배포하는 것이 아니라 확장 된 디렉토리를 대체하거나 덮어 쓰는 것입니다. aaa.war를 webapps /로 복사하지 않고 aaa.war 파일을 webapps/aaa /로 바로 압축 해제합니다.