我正在使用 jboss 服务器并将我的所有类都放在一个 jar 文件中。
现在,如果我更改任何 java 文件,我需要替换 jar 中的类文件并且必须重新启动服务器。
有没有办法在不重启服务器的情况下动态加载新创建的类文件?
提前致谢。
我在 JRebel (http://www.zeroturnaround.com/jrebel/) 上取得了巨大的成功。这是一个非常好的产品,它支持对 Java 类进行的绝大多数修改进行无缝类重新加载。不需要重新启动应用程序服务器,甚至不需要重新启动应用程序,类只是在后台重新加载。
它提供 30 天免费试用,因此您可以查看它是否适合您。
(免责声明:我与零周转无关)
看来您必须通过修改 web.xml 来欺骗服务器重新加载您的应用程序 - 这意味着您可以在编辑器中打开 web.xml 输入空格然后删除并保存文件或使用实用程序更改文件的修改日期.
JBoss 似乎没有像 Tomcat 的 Server.xml 文件中的 Tomcat 的 reloadable="true" 标志这样方便的功能。
有许多解决方案,但没有一个特别干净或容易。
如前所述,更改 web.xml 将导致上下文重新加载并因此刷新源代码,这可以在不重新启动服务器的情况下完成。这是因为“WEB-INF/web.xml”在 TOMCAT/conf/Context.xml 文件中配置为 WatchedResource。也就是说,每个上下文都会继承此设置并自动监视此文件。您可以删除此行为,但您也可以在自己的 web.xml 中提供 WatchedResource 值以监视其他文件。虽然我不推荐它,但您可以将所有类文件添加到其中,并且当您更改一个文件时上下文将重新加载。
更好的解决方案依赖于这样一个事实,即当您丢弃加载该类的 ClassLoader 时可以重新加载该类。因此,如果您在自己的 ClassLoader 中管理您的热插拔代码,那么您可以在刷新 ClassLoader 时刷新代码而无需重新启动上下文。说起来容易做起来难,不幸的是,它可能会让你开始。