gpt4 book ai didi

java - GlassFish 扩展通用类加载器使用的 JAR

转载 作者:行者123 更新时间:2023-11-30 04:47:08 25 4
gpt4 key购买 nike

我正在将多个应用程序从 JBoss 4 迁移到 GlassFish 3.1.x。这些应用程序中的每一个都使用相同的 API,该 API 提供每个应用程序使用的公共(public)类和接口(interface)。我们称之为CoreAPI.jar .

CoreAPI.jar放入 <domain>/lib GlassFish 目录,由公共(public)类加载器加载。

现在假设每个应用程序都从 CoreAPI 扩展了一个名为 Version 的类(不是抽象类)。 :

public class Version {
public String getVersion() { return null; }
}

方法getVersion()在 API 本身的多个位置调用,每个使用 API 的应用程序负责扩展该类并提供如下版本:

public class MyAppVersion extends Version {
private static final String VERSION = "1.0";

@Override
public String getVersion() { return VERSION; }
}

当我将应用程序部署到 GlassFish(捆绑在 WAR 或 EAR 中)时,每当 API 调用 getVersion() 时从父类中,我得到 java.lang.NullPointerException - 它似乎找不到子类。

如果 CoreAPI.jar 则正确找到子类与 WAR 捆绑在一起并从 <domain>/lib 中删除目录,但我不能这样做,因为许多应用程序需要它作为共享库。

有没有办法让共享库“看到”已部署应用程序中的子类?

谢谢!

澄清:我无权更改 CoreAPI

最佳答案

Is there a way I can make a shared-library 'see' a sub-class within a deployed application?

没有。应用程序类加载器是公共(public)类加载器的后代,类加载器只能看到它们的父类加载器,而看不到它们的依赖类加载器。

当公共(public)类尝试在公共(public)库中实际的代码中执行诸如 Class.forName("com.app.ImplementationClass") 之类的操作时,通常会发现这种情况。

关于java - GlassFish 扩展通用类加载器使用的 JAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10726648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com