1

で実行されている Web アプリケーションに埋め込まれているシステムHttpServiceで、が競合するという問題があります。OSGiApache KarafTomcat

アプリケーションの一部は にOSGi基づいておらず、 内のコードを介して直接リクエストに応答しますWAR。一部の部分は、 を使用してコンテナFelix Servlet Bridge内のサーブレットを呼び出してリクエストに応答します。Felix OSGiまた、Felixのホワイトボード バンドルを使用して、サーブレットの自動登録を実現しています。

ActiveMQの機能も使用しており、コンソールKarafに含まれています。Pax Webその結果、埋め込みアプリケーション サーバと統合するHttpServiceからの1 つと、別のポートで独自のサーバを実行するからの 1 つになります。Felix Servlet BridgeHttpServicePax WebJetty

したがって、問題は、一部のスタートアップのホワイトボード バンドルが に接続し、Pax Web HttpServiceサーブレットが間違った場所に公開されることです。HttpServiceホワイトボード バンドルを構成して目的のfromを何らかの方法で要求する方法が見つかりませんでした。関連するバンドルはすべてサードパーティのものであるため、それらのコードもServlet Bridge変更することは避けたいと考えています...Java

これを解決する最善の方法は何ですか?

ActiveMQ(保守性のためにコードよりも構成を優先し、コンソールを独自のポートに保持したい)

4

1 に答える 1

1

アプリサーバーで実行し、内部で別の Web サーバーを実行するのは、奇妙な (そしてかなり無駄な) セットアップのように思えます...この自業自得の複雑さには理由があると思います:-)

最初の最も簡単な解決策は、おそらくホワイトボードを使用せず、Declarative Services 参照を使用してから、指定された http サービスに登録することです。次に、Config Admin を使用して、HTTP サービス参照のターゲット フィルターを設定できます。または、すべての Http サービスに登録することもできます。

2 番目の解決策は、Apache Felix Whiteboard サービスを修正し、Config Admin を介してすべての HTTP サービスまたは特定のサービスに構成できるようにすることです。独自のホワイトボード バンドルを作成することもできます。これは非常に小さなバンドルであり、特に DS では非常に簡単です。もしそうなら、それを Apache Felix に (返して) 寄付してください。

3 番目の解決策は、サービス フックを使用して、ホワイトボード バンドルが正しい HTTP サービスのみを認識するようにすることです。このようなバンドルを構成するには、再び Config Admin を使用します。少しハックですが。

4 番目の解決策は、ActiveMQ を別のフレームワークで実行し、そのサービスをクライアント フレームワークにエクスポートすることです。これが実現可能かどうかは不明ですが、サービス指向のバンドルでは一般的に非常にうまく機能します。これは OSGi サブシステムを使用できますが、実装がどれくらい進んでいるかはわかりません。

最後の解決策は、私の好みです。問題を取り除き、適切に保護されたパスの下のブリッジ Web サーバーで ActiveMQ を実行するか、代わりに Jetty を Web サーバーとして使用して Tomcat をスキップします。

于 2013-05-30T08:53:40.107 に答える