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