Java类重新加载

时间:2010-12-22 05:42:14

标签: java class jboss reload hotswap

我正在使用jboss服务器并将所有类放在jar文件中 现在,如果我更改任何java文件,我需要替换jar中的类文件,并且必须重新启动服务器 有没有办法动态加载新创建的类文件而不重启服务器?

提前致谢。

3 个答案:

答案 0 :(得分:1)

我在JRebel(http://www.zeroturnaround.com/jrebel/)上取得了巨大的成功。这是一个非常好的产品,可以为您可以对Java类进行的绝大多数修改实现无缝类重新加载。没有重新启动应用程序服务器甚至不需要应用程序,类只是在幕后重新加载。

它提供30天免费试用,因此您可以查看它是否适合您。

(免责声明:我与Zero Turnaround毫无关联)

答案 1 :(得分:0)

看来你必须通过修改web.xml来欺骗服务器重新加载你的应用程序 - 这意味着你可以在编辑器中打开web.xml然后输入一个空格然后删除并保存文件或更改文件的修改日期用实用工具。

在Tomcat的Server.xml文件中,JBoss似乎没有像Tomcat的reloadable =“true”标志那样的便捷功能。

答案 2 :(得分:0)

有许多解决方案,其中没有一个特别干净或容易。

如上所述,更改web.xml将导致上下文重新加载并因此刷新源代码,这可以在不重新启动服务器的情况下完成。这是因为“WEB-INF / web.xml”在TOMCAT / conf / Context.xml文件中配置为WatchedResource。这是每个上下文都继承此设置并自动监视此文件。您可以删除此行为,但您也可以在自己的web.xml中提供WatchedResource值以观察其他文件。虽然我不推荐它,但您可以将所有类文件添加到此文件中,并在更改一个文件时重新加载上下文。

更好的解决方案依赖于当您丢弃加载Class的ClassLoader时可以重新加载Class的事实。因此,如果您在自己的ClassLoader中管理热插拔代码,那么如果刷新ClassLoader,则可以刷新代码而无需重新启动上下文。说起来容易做起来不幸,但它可能会让你开始。