是否可以只将 java 类的 .class 文件添加到正在运行的应用服务器上的 ear 文件中,而无需重新启动它。JVM 类加载器如何以这种方式加载它。我的印象是类加载器在启动时加载一个文件,如果你要在正在运行的应用服务器中更改类文件,你将不得不重新启动服务器。
问问题
1161 次
3 回答
1
EAR 是一个包含一些附加信息的 JAR 文件,因此您可以使用与 J2EE 容器相同的方法:创建一个新的类加载器 (try URLClassLoader
),并为其提供加载新类所需的信息。
这适用于新课程;替换现有类是另一回事,因为这些类的所有实例都包含对原始类型的引用。没有通用的方法来解决这个问题,但是JRebel的人写了一个类加载器,它也可以做到这一点(有一些限制)。
于 2011-11-15T13:20:11.920 回答
1
如果该类尚未加载,您可以简单地将其提供给类加载器,即将它编译到您部署的展开文件夹(例如,WEB-INF/classes)。当您从打包的 EAR 进行部署时,这不起作用,因为它们通常在部署时被分解。
当类已经被加载时,你需要一个能够感知变化的类加载器。要么你的容器为你做这件事,要么你可以看看JRebel效果很好。
于 2011-11-15T13:20:26.997 回答
0
对于热代码替换,您可以使用JRebel 仅仅将 .class 添加到耳朵中是不够的,因此您需要对存档进行完全重建。
于 2011-11-15T13:18:22.770 回答