0

私は、1 つの OSGi バンドルで生成されたデータの一部を REST インターフェースで公開して、後で誰でも典型的な http 要求で消費できるようにしようとしています。これを行うために、apache-cxf、JAX-RS、および Jetty を組み合わせて使用​​しています (主にテスト目的で)。

私のアプリケーション全体は、次の 2 つの方法で配布されます。

  • コア: OSGi フレームワークとして一連の最小限のバンドルを実行します。
  • Full: Core + に加えて、Eclipse 内でグラフィカルに使用されるプラグインのセット。

コア起動構成では、これを問題なく機能させることができますが、マニフェストを見てください。

Require-Bundle: cxf-dosgi-ri-singlebundle-distribution;bundle-version="1.3.1",org.eclipse.core.runtime, org.eclipse.osgi.services;bundle-version="3.3.0", org.mortbay.jetty.server;bundle-version="6.1.23", org.mortbay.jetty.util;bundle-version="6.1.23"

フル ディストリビューションを起動しようとすると、jetty サーバーが起動していないように見えるため、RESTful サービスが正しく機能していません。完全な配布には、主にウィザード、パースペクティブなどに関連する、より多くのプラグインが付属しています。この問題の根本原因は何らかの形で cxf-dosgi-ri-singlebundle-distribution バンドルに関連しており、このバンドルの自動開始をデフォルトではなく true に「強制」することで対処できます (下の画像を確認してください)。

ここに画像の説明を入力

これは問題ありませんが、私の質問は...なぜこれが起こっているのですか? 次に、最も重要なこととして、更新サイトを介してフル ディストリビューションを配布します。これにより、ユーザーはそれをダウンロードし、パースペクティブを開いて使用を開始できます。つまり、これは最終的なディストリビューションに影響しますか? 更新サイトの apache-cxf バンドルに対して、この auto-start=true を制御する方法はありますか?

私が自分自身を明確にすることができることを願っています...

ありがとう!

4

1 に答える 1

0

私は自分の質問に答えるのが好きではありませんが、フィードバックが得られず、他の誰かが同じ問題を抱えている可能性があるので...ここに行きます

apache-cxf は実際には必要ないため、使用しないことで、安静バンドルの全体の設計を変更することにしました。私がやりたいことをするために必要なのは、組み込みの Jetty サーバーと、HttpRequests と HttpResponses を処理するための javax だけです。したがって、起動の問題を同時に利用して、サードパーティのライブラリとの依存関係を取り除きます。

Eclipe の次の公式サイトからアイデアを得ました。

Equinox に HTTP サーバーを埋め込む

バンドルベースのサーバー アプリケーションの作成

さらに、より実践的なチュートリアルもここにあります。

Web サーバー アプリケーションとしての OSGi

Eclipse の拡張: バンドルされたアーカイブからの HTML コンテンツの表示

啓蒙のための両方の著者に感謝します:)。

于 2012-08-23T09:13:52.893 に答える