2

Glassfish 3.1.2 で実行されている Spring webapp があります。webapp を OSGi に変換し始めたところです。既存の Web アプリケーションをアンデプロイし、Spring および Gemini OSGi jar を Glassfish インストールの modules ディレクトリにコピーしました。次に、Glassfish OSGi Web コンソール (カスタマイズされた Felix Web コンソールの一種であると理解しています) を使用してそれらをインストールし、アクティブ化しましたが、すべて問題ありませんでした。何もしませんでしたが、テストしたかったWebコンソールにインストールしてアクティブ化できました。

次に、Glassfish アプリケーション コンソールを使用して既存の Web アプリケーションの非 OSGi jar を再デプロイし、2 種類の jar が共存できるかどうかを確認しました。この時点で、他のクラスの中でNoClassDefFoundErrors見つけられないという不満が投げられ始めました。org.apache.commons.loggingこれらのクラスは、インストールされた OSGi jar として Module ディレクトリとアプリケーション クラスパスの両方に存在していました。その後、コンソールで jar を非アクティブ化しましたが、OSGi jar は削除しませんでしたが、例外がスローされ続けました。

クラスローダーの出力を取得したところ、Web アプリケーションの jar ファイルWEB-INFが読み込まれていないことがわかりましたが、これが問題なのか症状なのかはわかりませんでした。

次に、アンインストールされた OSGi jar から jar を削除すると、すべてが再び機能し始め、webapp をデプロイできました。

これが起こる理由を誰でも思いつくことができますか?モジュールディレクトリの内容はクラスパスにあると推測していますが、そうであればなぜですか? OSGi jar と非 OSGi jar を連携させたい場合、これが問題を引き起こすのをどのように防ぐことができますか?

サイドノート

  • クラスローダーによってクラスがロードされているのを見たとき、モジュールフォルダーからコンテンツがロードされているのを確認できませんでした。
  • 非 OSGi jar がデプロイされた後に OSGi jar をインストールしてアクティブ化できますが、その逆はできません。
4

1 に答える 1