【发布时间】:2020-04-24 15:52:43
【问题描述】:
我有一个使用共享库的 WebSphere 应用程序。每当对共享库路径中的任何 jar 进行更新时,需要重新启动使用它的应用程序以获取最新更改。是否可以让 WAS 应用程序重新加载共享库而无需重新启动?
我使用的是传统的 WAS 8.5.5.16。
【问题讨论】:
标签: java shared-libraries websphere
我有一个使用共享库的 WebSphere 应用程序。每当对共享库路径中的任何 jar 进行更新时,需要重新启动使用它的应用程序以获取最新更改。是否可以让 WAS 应用程序重新加载共享库而无需重新启动?
我使用的是传统的 WAS 8.5.5.16。
【问题讨论】:
标签: java shared-libraries websphere
简短回答:不。
长答案:您不能这样做是有技术原因的。 Java 类加载器通常不支持重新创建它们已经定义的 Class 对象——一旦定义了一个类,它就被定义了,这就是类加载器的生命周期(loadClass 的第一步是“findLoadedClass”,它搜索对于您正在加载的类的现有版本)。为了让 Java 同意加载 Class 对象的新实例,您需要创建一个全新的类加载器,并且在 Java EE(或至少是 WAS)设置中,这需要重新启动应用程序。
根据您的问题,我相信您只是将普通共享库与您的应用程序相关联,因此这不一定适用,但我会注意到,如果您使用隔离的共享库(它有自己的类加载器) 或在服务器上配置的共享库加载器,即使重新启动应用程序也是不够的,因为这些库加载器是与服务器一起创建的,而不是与应用程序一起创建的,因此它们需要重新启动服务器才能获取更改。
【讨论】:
没有。它们只在服务器启动时加载一次。
【讨论】: