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