0

組み込みの ActiveMQ ブローカーを持つバンドルをデプロイしたプレーンな Felix ベースの OSGI 環境があります。同じ OSGI 環境に別のバンドルをデプロイしたいと考えています。この環境には、ActiveMQ Web コンソールの War ファイルがデプロイされる桟橋が組み込まれています。埋め込まれた桟橋を生成し、war ファイルをこのバンドル (bundleActivator Start Method) の一部として展開しようとしましたが、次の例外が発生します -

Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContextListener
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:431)
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:393)

バンドル クラスパスに Servlet-API jar があります (パッケージをインポートし、バンドルの展開中に解決されています)。また、activemq-web-console-5.10.0.war ファイルの lib フォルダーにも Servlet-API jar が含まれていることに気付きました。

したがって、Servlet-API jar の重複が原因である可能性があると考えた場合、この例外がスローされ、バンドル クラスパスから Servlet-API jar が削除されました (インポートを削除し、そのパッケージをエクスポートするバンドルをアンデプロイしてみました)。バンドルがデプロイされず、配線の例外を受け取った場合 (Jetty の依存関係には明らかにその jar が必要なため)。

warファイルを解凍して再度パックして試したくありません。

注意: この war ファイルは Karaf に正常にデプロイされましたが、私自身の felix ランチャーを使用してプレーンな Felix に基づく OSGI 環境にデプロイできませんでした。

助けてください !

編集

埋め込まれた jetty を含むバンドルがデプロイされますが、それを開始すると、Jetty が開始されている (war ファイルをデプロイしている) 間に上記の例外がスローされます

編集終了

4

1 に答える 1

0

うーん、そこでカラフをゼロから再構築しますか?とにかく、Web コンソールを実行するには、felix 環境で Web コンテナーを実行する必要があります。したがって、felix http-service を実行するか、Pax Web バンドル (Karaf の場合など) を実行する必要があります。次に遭遇するのは、満足のいく簡単なログ記録です。これは、自分で作成するか、Pax Logging バンドルをデプロイする必要があります (Karaf の場合と同様)。すべてのインフラストラクチャ バンドルが利用可能な Karaf に固執しない理由はありますか?

于 2014-12-13T19:30:47.493 に答える