Java EE に移植しようとしているレガシー アプリケーションがあります。現在、このアプリケーションは URL.setURLStreamHandlerFactory() を呼び出して、いくつかのカスタム URL プロトコル ハンドラを登録しています。Glassfish v 2.1 および 3 では、glassfish が既にファクトリを登録しているため、この呼び出しは失敗します。
java.protocol.handler.pkgs システム プロパティを使用してみましたが、クラスローダーの問題によりうまくいきません。ハンドラー クラスはすべてアプリケーションの一部であり、それらを抽出してコンテナーのクラスパスに jar を配置することに熱心ではありません。
私は osgi バンドルの匂いを持っています - どうやら、新しいプロトコルを扱うバンドルを書くことができたようです。私は、この Web アプリケーションを osgi バンドルにすることに熱心ではありません (一度に 1 ステップずつ! 最初に EE、次に必要に応じて osgi)。
バンドル jar を WEB-INF/lib ディレクトリにポップして、Glassfish にバンドルとしてロードさせることはできますか? バンドルは、Web アプリケーション (WEB-INF/lib または WEB-INF/classes の別の jar) からパッケージをインポートする必要があります。私はこのアプリを EAR としてパッケージ化するつもりです。