Java 如何在不停止服务器的情况下删除JBoss中的爆炸战争?

Java 如何在不停止服务器的情况下删除JBoss中的爆炸战争?,java,jboss,deployment,explode,exploded,Java,Jboss,Deployment,Explode,Exploded,我可以删除除lib文件夹之外的所有内容(JBoss说应用程序未部署,但他不会发布JAR) 我将jboss maven插件和硬取消部署绑定在一起,但是它说文件(doc说它也支持dirs)已经取消部署,但是它没有取消部署应用程序 我正在使用jboss-4.2.1.GA。我打赌它可以通过jmx控制台取消部署,但我无法找到方法。在“从工作中”和jboss安装下的tmp文件夹下手动删除应用程序。在之前停止JBoss,在之后启动它。这将有所帮助。我认为发生的是: WAR文件已部署并分解 当应用程序启动时,它

我可以删除除lib文件夹之外的所有内容(JBoss说应用程序未部署,但他不会发布JAR)

我将jboss maven插件和硬取消部署绑定在一起,但是它说文件(doc说它也支持dirs)已经取消部署,但是它没有取消部署应用程序


我正在使用jboss-4.2.1.GA。我打赌它可以通过jmx控制台取消部署,但我无法找到方法。

在“从工作中”和jboss安装下的tmp文件夹下手动删除应用程序。在之前停止JBoss,在之后启动它。这将有所帮助。

我认为发生的是:

  • WAR文件已部署并分解
  • 当应用程序启动时,它的类加载器打开JAR文件并锁定它们,以防止它们被删除或覆盖
  • 然后停止并取消部署应用程序
  • 不幸的是,类加载器仍然存在,并且它仍然持有的锁阻止删除JAR文件
  • 类加载器可能仍然存在,原因有二:

    • 它可能无法访问,但GC尚未运行
    • 它可能已经泄漏,所以即使GC运行,它也不会被删除

    唯一可靠的解决方案是关闭并重新启动JBoss。

    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>
    
    
    
    这通常效果很好,有时我需要重新启动(通过触摸部署人员观察到的文件)

    
    
    lib没有完全从类加载器中卸载。JVM拥有文件句柄,尤其是windows无法删除文件。在我停止服务器后,我只需要删除分解的目录,但我希望能够在不停止服务器的情况下取消部署。Hotdeployment(取消部署)不应在生产环境中使用。我不同意,我认为不重新部署webapp更有效率:)我认为您指的是生产环境。
    <target name="restart-exploded">
        <antcall target="explode"/>
        <touch file="${ear.deploy.dir}/META-INF/application.xml"/>
    </target>