Сбой при развертывании Tomcat - PullRequest
2 голосов
/ 07 апреля 2011

Я бы хотел выполнить горячее развертывание в tomcat, но не получилось. Я использую плагин Maven Tomcat для развертывания. Когда я вызываю «mvn tomcat: redeploy», война успешно загружается в папку tomcat webapps. Но это не распаковано успешно, потому что моя оригинальная папка веб-приложения не удаляется успешно. В WEB-INF / lib все еще существует jracle jdbc jar. И это не может быть событие удаления, когда я пытаюсь удалить его вручную. Это говорит мне, что есть один процесс, который использует его. Я предполагаю, что соединение jdbc не освобождено.

Как я могу решить эту проблему? Спасибо

Джефф Чжан

Ответы [ 2 ]

5 голосов
/ 13 июля 2012

вы можете изменить свойства antiJarLocking и antiResourceLocking в context.xml tomcat, тогда старая война может быть успешно удалена, и вы сможете повторно развернуть свое приложение.

<Context antiJARLocking="true" antiResourceLocking="true">    
1 голос
/ 07 апреля 2011

Веб-приложения, которые не удаляются, могут быть вызваны тем, что веб-приложение не полностью очищено от мусора из-за ссылок за пределами вашего загрузчика классов веб-приложения, удерживающих некоторые экземпляры / классы в веб-приложении.После этого эти файлы будут заблокированы в веб-приложении, что не позволит удалить файлы веб-приложения.

Это ваше собственное веб-приложение?Если это так, вы должны попробовать профилировать его в tomcat с помощью профилировщика памяти - выполните цикл развертывания, использования и отмены развертывания и посмотрите, какие ссылки сохраняют классы / экземпляры вашего веб-приложения.

Поскольку это драйвер jdbc, яНачнем с рассмотрения источника данных.Например, если вы используете Spring для настройки источника данных, убедитесь, что источник данных закрыт.Например,

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

destroy-method="close" обеспечивает правильное отключение источника данных после завершения работы веб-приложения.

...