在运行的生产环境中添加类文件

时间:2011-11-15 13:14:01

标签: java class deployment appserver

是否可以将java类的.class文件添加到正在运行的应用服务器上的ear文件中,而无需重新启动它。 JVM类加载器如何以这种方式加载它。我的印象是,类加载器在启动时加载文件,如果要在正在运行的应用服务器中更改类文件,则必须重新启动服务器。

3 个答案:

答案 0 :(得分:1)

EAR是一个带有一些附加信息的JAR文件,因此您可以使用与J2EE容器相同的方法:创建一个新的类加载器(try URLClassLoader)并为其提供加载新类的必要信息。

这适用于新课程;替换现有类是另一回事,因为这些类的所有实例都包含对原始类型的引用。没有通用的方法可以解决这个问题,但是JRebel的人写了一个类加载器,它也能做到这一点(有一些限制)。

答案 1 :(得分:1)

如果尚未加载该类,您可以简单地将其提供给类加载器,即将其编译为您部署的展开文件夹(例如,WEB-INF / classes)。当您从打包的EAR进行部署时,这不起作用,因为这些在正常部署时会爆炸。

当已经加载了类时,您需要一个支持更改的类加载器。您的容器可以为您做到这一点,或者您可以查看效果很好的JRebel

答案 2 :(得分:0)

对于热码替换,您可以使用JRebel 仅仅将.class添加到耳中是不够的,因此您需要对存档进行完全重建。