Как убрать разнесенную войну в 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>

Я думаю, что происходит так:

  1. Файл WAR развернут и взорван.
  2. Когда ваше приложение запускается, его загрузчик классов открывает файлы JAR и блокирует их, чтобы предотвратить их удаление или перезапись.
  3. Затем вы останавливаете и удаляете приложение.
  4. К сожалению, загрузчик классов все еще существует, и блокировки, которые он все еще удерживает, препятствуют удалению файлов JAR.

Загрузчик классов все еще может существовать по двум причинам:

  • Это может быть недоступно, но GC не работает.
  • Это могло бы быть утечка, поэтому он не будет удален, даже если GC действительно работает.

Единственное верное решение - отключить и перезапустить JBoss.

Удалите ваше приложение вручную из папок work и tmp под вашей установкой jboss. Остановите JBoss до и запустите его после. Это поможет.

Другие вопросы по тегам