小编典典

热部署在内部如何工作?

java

我正在使用Eclipse服务器功能进行热代码部署。使用tomcat作为Web服务器。但是我不确定它是如何工作的。我有自己的理解,它必须如何在内部工作。

我的理解:- 当开发人员更改代码(例如,类Employee)时,Eclipse将在正确的位置(必须是特定的Web
/应用服务器,将其称为热部署目录(HDD))放置/发布修改后的已编译类。
。现在将显示Web服务器特定的类加载器。它在HDD下找到新条目。现在,它查找classloader是否已在perm
gen空间中加载了类,Web服务器将从permgen空间中将其卸载,并在内部重新加载了新的类,而无需服务器重新启动,从而反映了新的更改(字节码)。作为重新加载的一部分,Web服务器还将在perm
gen空间中将现有的Epmloyee对象与新的类定义链接起来,以便反映出新的变化。

我的理解正确吗?

这样的一些链接说Eclipse热部署只是重新部署的自动化。我认为这意味着eclipse会自动停止服务器,重新发布并重新启动它,而无需开发人员干预。
但是,我认为这不是正确的,因为与启动/发布/重新启动相比,此过程确实非常快。
同样,如果情况确实如此,则会话和其他活动对象在重启后将如何保持活动状态?
也许这个链接在过去是正确的,但现在不是,因为我发现jar中类的热部署工作也可以


阅读 221

收藏
2020-11-19

共1个答案

小编典典

热代码部署取决于运行时功能。您链接到的答案并不意味着自动停止服务器部署新代码并再次启动服务器。这本来是浪费的。

相反,大多数Java应用程序服务器都可以 重新部署
该应用程序。这意味着服务器将创建一个新的Web应用程序类加载器,通过该新类加载器加载应用程序的新版本,在某些情况下,它将迁移状态(对HTTP会话进行序列化/反序列化),并删除旧版本的应用程序。

现在,重新部署的速度在很大程度上取决于应用程序本身-应用程序的初始化方式。是否需要预热缓存?是否必须满足依赖关系(a-las
Spring,CDI)?是否必须初始化Hibernate SessionFactory?涉及许多因素。

Eclipse WTP自然要做的就是它可以触发应用程序容器的重新部署过程,仅此而已。当然,小型应用程序不会花很长时间重新部署。

除非有特殊的运行时技术/容器/框架,并且没有为Eclipse开发的特殊连接器要利用钩子来触发针对该特定技术更新的热代码。一个很好的例子是OSGi运行时的bndtools

只是为了消除一些混乱:

人们常常将
HotSwap
热部署
混为一谈。第一个是HotSwap,它是JVM在运行时更新类定义的功能。后一种是热部署,它是应用程序服务器自动或不增量地部署应用程序的能力,而无需重新启动JVM进程。

所以我的回答是关于热部署,而不是关于HotSwap。因此,我将热部署称为平台的“自动化”,而不是其基本机制。

2020-11-19