我正在将几个应用程序从 JBoss 4 迁移到 GlassFish 3.1.x。这些应用程序中的每一个都使用相同的 API,该 API 提供了每个应用程序使用的公共类和接口。让我们称之为CoreAPI.jar。
CoreAPI.jar放到<domain>/libGlassFish的目录下,由通用类加载器加载。
现在假设每个应用程序都从 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