1

Peaberry / Guice / OSGi/Servletsを適切に配置するのに問題があります。まず、プラグインアーキテクチャを活用するために、JettyベースのWARでデプロイされたWebアプリをOSGiに移行しました。私の元のアプリケーションはどこでもguiceを使用していました。

私はすべてをモジュールに分割し、ビルドをMaven-iszedしました。ServletModuleの厄介なインストールを除いて、すべてが機能しているようです。

ServletModuleをインストールしようとすると、次の例外が発生します。

java.lang.NoClassDefFoundError: com/google/inject/internal/util/$Preconditions
    at com.google.inject.servlet.ServletModule.configure(ServletModule.java:44)
at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
at com.google.inject.AbstractModule.install(AbstractModule.java:118)
at com.payplum.CoreActivator$CoreImportModule.configure(CoreActivator.java:145)
at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
at com.google.inject.spi.Elements.getElements(Elements.java:101)
at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:133)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:72)
at com.google.inject.Guice.createInjector(Guice.java:62)
at com.payplum.CoreActivator.start(CoreActivator.java:53)
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)

そのため、これらのバンドルが見つからない理由がよくわかりません。サーブレットとサーブレットの依存関係を追加し、デプロイされたバンドルに組み込まれていることを確認しました。

もう1つの重要な点は、GuiceFilterの登録だと思います。Jettyを使用しているので、ServiceTrackerを使用してExtHttpServiceを取得します。そのトラッカーが戻ってきたら、通常の呼び出しを使用して登録を追加します

service.registerFilter( this.guiceFilter, "/*", null, 0, null );

そして、それはうまくいくようです。私はこれらのものを機能させるのに本当に苦労していて、Guice / OSGi/Peaberryの部分の中間に少し引っかかっています。どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

1

例外は、クラスパスにクラスがないことを意味するため、jar がないか、jar の 1 つに (驚くべきことに) 必要なクラスが含まれていません。最終的な war ファイルに含まれる JAR をチェックします。たとえば、' jar -tf thejar.jar' を使用して、$Preconditions クラスが含まれているかどうかを確認します。

于 2012-08-26T17:53:08.247 に答える