我有一个使用共享库的 WebSphere 应用程序。每当对共享库路径中的任何 jar 进行更新时,需要重新启动使用它的应用程序以获得最新的更改。能否让WAS应用程序无需重启就能重新加载共享库?
我使用的是传统的WAS 8.5.5.16。
简答。简答: 不
长答案:没有。有一个技术上的原因,为什么你不能这样做。Java类加载器一般不支持重新创建已经定义的Class对象--一旦你定义了一个类,它就被定义了,在类加载器的生命中就是这样(loadClass的第一步是 "findLoadedClass",它搜索你要加载的类的现有版本)。为了让Java同意加载一个Class对象的新实例,你需要创建一个全新的类加载器,在Java EE(或者至少是WAS)的环境下,这需要重新启动应用程序。
从你的问题来看,我相信你只是将一个普通的共享库与你的应用程序关联起来,所以这不一定适用,但我想指出的是,如果你使用一个孤立的共享库(它有自己的类加载器)或在服务器上配置的共享库加载器,即使重启应用程序也是不够的,因为这些库加载器是与服务器一起创建的,而不是与应用程序一起创建的,所以它们需要重启服务器来接收变化。
不,它们只在服务器启动时加载一次。