是否可以在不重新启动应用程序的情况下重新加载 WebSphere Application Server (WAS) 中的共享库?
Is it possible to reload shared libraries in WebSphere Application Server (WAS) without restarting the application?
我有一个使用共享库的 WebSphere 应用程序。每当对共享库路径中的任何 jar 进行更新时,需要重新启动使用它的应用程序以获取最新更改。是否可以使 WAS 应用程序重新加载共享库而无需重新启动?
我使用的是传统的 WAS 8.5.5.16。
简答:否
长答案:您不能这样做是有技术原因的。 Java class 加载器通常不支持重新创建它们已经定义的 Class 对象 - 一旦你定义了一个 class,它就被定义了,并且这就是它的生命周期class 加载程序(加载 Class 的第一步是 "findLoadedClass",它搜索您正在加载的 class 的现有版本)。为了 Java 同意加载 Class 对象的新实例,您需要创建一个全新的 class 加载程序,并在 Java EE(或者,至少,WAS) 设置,需要重新启动应用程序。
根据你的问题,我相信你只是将一个普通的共享库与你的应用程序相关联,所以这不一定适用,但我会注意到,如果你使用一个独立的共享库(它有自己的class 加载器)或服务器上配置的共享库加载器,即使重新启动应用程序也是不够的,因为这些库加载器是与服务器一起创建的,而不是与应用程序一起创建的,因此它们需要重新启动服务器才能获取更改.
没有。它们只在服务器启动时加载一次。
我有一个使用共享库的 WebSphere 应用程序。每当对共享库路径中的任何 jar 进行更新时,需要重新启动使用它的应用程序以获取最新更改。是否可以使 WAS 应用程序重新加载共享库而无需重新启动?
我使用的是传统的 WAS 8.5.5.16。
简答:否
长答案:您不能这样做是有技术原因的。 Java class 加载器通常不支持重新创建它们已经定义的 Class 对象 - 一旦你定义了一个 class,它就被定义了,并且这就是它的生命周期class 加载程序(加载 Class 的第一步是 "findLoadedClass",它搜索您正在加载的 class 的现有版本)。为了 Java 同意加载 Class 对象的新实例,您需要创建一个全新的 class 加载程序,并在 Java EE(或者,至少,WAS) 设置,需要重新启动应用程序。
根据你的问题,我相信你只是将一个普通的共享库与你的应用程序相关联,所以这不一定适用,但我会注意到,如果你使用一个独立的共享库(它有自己的class 加载器)或服务器上配置的共享库加载器,即使重新启动应用程序也是不够的,因为这些库加载器是与服务器一起创建的,而不是与应用程序一起创建的,因此它们需要重新启动服务器才能获取更改.
没有。它们只在服务器启动时加载一次。