0

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 としてパッケージ化するつもりです。

4

1 に答える 1

1

問題を解決しました。どうやら、java.protocol.handler.pkgs システム プロパティが正常に動作するため、いくつかのワイヤーが交差していたようです。

他の誰かがつまずいた場合、ハンドラーを含む jar を $DOMAINDIR/lib/ext/ と WAR の WEB-INF/lib ディレクトリに配置しました。私のアプリケーションの構成では、jvm オプションも入れました -Djava.protocol.handler.pkgs=my.handlers.pkg.prefix

Glassfish 2.1では、プレフィックスをスタートアップコードに入れるとjvmオプションなしで機能することに気付きましたが、glassfish 3ではjvmオプションが必要です.felix(osgi実装glassfishが使用している)はサーバー上のプロパティのみを参照するためです.リクエストごとではなく、起動します。

于 2009-11-12T12:47:56.417 に答える