いくつかのアプリケーションをJBoss4からGlassFish3.1.xに移行しています。これらの各アプリケーションは、各アプリケーションが使用する共通のクラスとインターフェースを提供する同じAPIを使用します。それを呼びましょうCoreAPI.jar。
CoreAPI.jarGlassFishのディレクトリに配置<domain>/libされ、共通のクラスローダーによってロードされます。
ここで、各アプリケーションが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を変更するためのアクセス権がありません