理论上,重新加载类是内置在 JVM 中的,尽管大多数实现(特别是 Oracle 的)只重新加载(热交换),只要您只更改方法体内的代码即可。
另一个问题是,在 Eclipse 中,WTP 适配器必须配合并且只部署更改的类定义(增量部署)。由于某种原因,GlassFish 一直是增量部署的主要反对者,因此它的 WTP 适配器会在进行最微小的更改后重新启动服务器。
JBoss 曾经是增量部署的支持者,但在 AS 7 之后(“一切都必须不同”),他们现在也成为了“重启服务器”学派的追随者。
另一个问题是简单的类加载通常只是故事的一部分。在 EJB、JSF、JPA 和许多其他框架中,类也必须由框架重新注册,必须清除缓存等
这就是像 JRebel 这样的东西出现的地方。它重新加载了对类的几乎所有类型的更改。它还可以独立于 WTP 适配器工作,从而使您摆脱服务器供应商的心血来潮,即今天重新启动是时髦的,明天是跛脚的,或者正好相反。JRebel 还拥有许多框架的知识和插件。
不幸的是,JRebel 并不完美,偶尔会失败,但总的来说它运行良好。
另一条建议:大多数现代应用程序服务器在相对较快的硬件和小型应用程序上在一秒钟内启动,对于较大的应用程序则需要大约 10 秒。有了这些和会话序列化,你几乎不再需要像 JRebel 这样的东西了。