Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在运行的生产环境中添加类文件_Java_Class_Deployment_Appserver - Fatal编程技术网

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

Java 在运行的生产环境中添加类文件,java,class,deployment,appserver,Java,Class,Deployment,Appserver,是否可以只将java类的.class文件添加到正在运行的应用程序服务器上的ear文件中,而不需要重新启动它。JVM类加载器如何以这种方式加载它。我的印象是类加载器在启动时加载一个文件,如果您要在正在运行的应用程序服务器中更改类文件,则必须重新启动服务器。对于热代码替换,您可以使用 仅仅将.class添加到ear中是不够的,因此您需要对归档进行完整的重建。ear是一个包含一些附加信息的JAR文件,因此您可以使用与J2EE容器相同的方法:创建一个新的类加载器(尝试URLClassLoader),并为

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

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

ear是一个包含一些附加信息的JAR文件,因此您可以使用与J2EE容器相同的方法:创建一个新的类加载器(尝试
URLClassLoader
),并为其提供加载新类所需的信息


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

如果还没有加载该类,您可以简单地将其提供给类加载器,即将其编译到一个分解的文件夹中,然后从中部署(例如WEB-INF/classes)。当您从打包的EAR部署时,这不起作用,因为这些EAR通常在部署时被分解

当类已经加载时,您需要一个变更感知类加载器。要么你的容器为你做了这些,要么你可以看看哪一个工作得很好