我正在将几个应用程序从 JBoss 4 迁移到 GlassFish 3.1.x。这些应用程序中的每一个都使用相同的 API,该 API 提供了每个应用程序使用的公共类和接口。让我们称之为CoreAPI.jar
。
CoreAPI.jar
放到<domain>/lib
GlassFish的目录下,由通用类加载器加载。
现在假设每个应用程序都从 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; }
}
当我将应用程序部署到捆绑在 WAR 或 EAR 中的 GlassFish 时,无论何时getVersion()
从父类调用 API,我都会得到一个java.lang.NullPointerException
- 它似乎找不到子类。
CoreAPI.jar
如果与 WAR 捆绑在一起并从目录中删除,则可以正确找到子类<domain>/lib
,但我不能这样做,因为许多应用程序需要它作为共享库。
有没有办法让共享库“看到”已部署应用程序中的子类?
谢谢!
澄清: 我无权更改 CoreAPI