Как убрать разнесенную войну в JBoss, не останавливая сервер?
Я могу удалить все, кроме папки lib (JBoss говорит, что приложение не развернуто, но он не выпустит jar-файлы).
Я связал jboss-maven-plugin и hard-undeploy, однако он говорит, что файл (doc говорит, что он также поддерживает dirs) не развернут, но он не отменяет развертывание приложения.
Я использую jboss-4.2.1.GA. Могу поспорить, что его можно развернуть через консоль jmx, но я не смог выяснить как.
3 ответа
То, как Seam выполняет восстановление развернутого приложения,
<target name="unexplode" description="Undeploy the exploded archive">
<delete failonerror="no">
<fileset dir="${ear.deploy.dir}">
<exclude name="**/*.jar"/>
</fileset>
</delete>
<delete file="${deploy.dir}/${project.name}-ds.xml" failonerror="no"/>
<delete dir="${ear.deploy.dir}" failonerror="no"/>
</target>
это обычно работает хорошо, иногда мне нужно перезапустить (касаясь файла, который наблюдает развертыватель)
<target name="restart-exploded">
<antcall target="explode"/>
<touch file="${ear.deploy.dir}/META-INF/application.xml"/>
</target>
Я думаю, что происходит так:
- Файл WAR развернут и взорван.
- Когда ваше приложение запускается, его загрузчик классов открывает файлы JAR и блокирует их, чтобы предотвратить их удаление или перезапись.
- Затем вы останавливаете и удаляете приложение.
- К сожалению, загрузчик классов все еще существует, и блокировки, которые он все еще удерживает, препятствуют удалению файлов JAR.
Загрузчик классов все еще может существовать по двум причинам:
- Это может быть недоступно, но GC не работает.
- Это могло бы быть утечка, поэтому он не будет удален, даже если GC действительно работает.
Единственное верное решение - отключить и перезапустить JBoss.
Удалите ваше приложение вручную из папок work и tmp под вашей установкой jboss. Остановите JBoss до и запустите его после. Это поможет.