2011-04-07 2 views
2

tomcat에서 핫 전개를하고 싶지만 실패합니다. 배포 할 때 maven tomcat 플러그인을 사용합니다. "mvn tomcat : redeploy"를 호출하면 warcat이 tomcat webapps 폴더에 성공적으로 업로드됩니다. 하지만 원래 웹 응용 프로그램 폴더가 성공적으로 제거되지 않기 때문에 성공적으로 압축이 풀리지 않습니다. WEB-INF/lib에는 여전히 oracle jdbc jar가 있습니다. 그리고 수동으로 삭제하려고하면 이벤트를 삭제할 수 없습니다. 그것은 하나의 프로세스가 그것을 사용하고 있다는 것을 알려줍니다. jdbc 연결이 해제되지 않은 것 같습니다.Tomcat 핫 배포가 실패합니다.

이 문제를 어떻게 해결할 수 있습니까? 감사합니다

제프 장

답변

1

웹 어플리케이션 웹 애플리케이션으로 인해 사용자의 웹 애플리케이션 클래스 로더는 웹 애플리케이션의 일부 인스턴스/클래스에 들고 외부 참조에 완전히 쓰레기 수집하지 않음으로써 발생할 수 있습니다 배포 해제하지. 이렇게하면 웹 응용 프로그램에서 해당 항아리를 잠그면 웹 응용 프로그램 파일이 제거되지 않습니다.

나만의 webapp입니까? 그렇다면 메모리 프로파일 러를 사용하여 Tomcat에서 프로파일 링을 시도해야합니다. 배포, 사용 및 배포 취소주기를 수행하고 웹 응용 프로그램의 클래스/인스턴스를 유지하는 참조가 무엇인지 확인하십시오.

jdbc 드라이버이므로 데이터 소스를 살펴 보겠습니다. 예를 들어, Spring을 사용하여 데이터 소스를 구성하는 경우, 데이터 소스가 닫혀 있는지 확인하십시오. 예 :

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 

destroy-method="close"은 웹 응용 프로그램이 종료 될 때 데이터 소스가 올바르게 종료되었는지 확인합니다.

5

tomcat의 context.xml에서 antiJarLocking 및 antiResourceLocking 속성을 변경할 수 있습니다. 그러면 이전 전쟁을 성공적으로 제거 할 수 있으므로 응용 프로그램을 다시 배포 할 수 있습니다.

<Context antiJARLocking="true" antiResourceLocking="true">  
+0

이것은 나를위한 해결책입니다! – debuti