11

「OSGiの方法」は、個別の一貫した機能を含む個別のバンドルを開発することです。これらのバンドルにはユーティリティクラスが含まれている場合もあれば、ユーティリティクラスに依存して独自のOSGiサービスを設定している場合もあります。

一方、ユーザーはバンドルにさらされる可能性はほとんどありません。彼らは、タスクを実行したり、問題を解決したりするソフトウェアであるアプリケーションにもっと関心を持っています。通常、アプリケーションは複数のバンドル(たとえば、Import-Packageを介してインポートされたもの)を使用してタスクを実行します。

OSGiの世界でこの関係を形式化するための最良の方法は何ですか?要件の例の1つは、アプリケーションの現在のバージョン番号(バンドルではない)をユーザーに表示するような単純なものです。このバージョン番号はどのようにして発見されますか?

Eclipseには「機能」と呼ばれる概念がありますが、これはOSGi標準ではありません。

Peter KriensはOSGiアプリケーションについて書いていて、彼の記事は理にかなっています。私がそれから得たのは、アプリケーションがバンドルにマップできるということでした。バンドルが何らかの方法で他のバンドルを使用しているだけです。しかし、Import-Packageを使用してアプリケーションバンドルを作成する場合、開発の観点からそれがどのように実現可能かはわかりません。

1つの方法は、Require-Bundleを使用し、独自のバージョンを持つ「アプリケーションバンドル」を作成することですが、OSGiの世界ではRequire-Bundleは眉をひそめています。

ただし、Import-Packageを使用して、必要なすべてのパッケージを必要なバージョンでインポートすると、開発者にかなりのメンテナンスオーバーヘッドが追加され、実行可能ではないと思います。実装パッケージに対しても、最小の変更が行われるたびに、パッケージバージョンを更新する必要があります。その後、「アプリケーションバンドル」でパッケージバージョンへの依存関係を更新します。

4

3 に答える 3

6

フレームワークはアプリケーションです... OSGiの世界で私が見た最大の間違いは、OSGiをマルチテナントフレームワークと見なすことです.OSGiはその目的のために設計されておらず、適切ではありません. フレームワーク内には高い結束力があり、登録されたすべてのサービスがあなたのサービスです。OSGi のアーキテクチャ モデルにより、サービスを介して接続された疎結合コンポーネントからアプリケーションを作成できます。これは、ソフトウェアで得られる最高のものです(残念ながら、不足しているコンポーネントがたくさんありますが、来るでしょう)。

bndtools では、このモデルを支援するために最善を尽くしています。bndtools bndrun ファイルは、基本的にデプロイ可能なアプリケーションです。bnd は、この bndrun ファイルを Main-Class マニフェスト ヘッダーを持つ実行可能な Jar に変換できます。(そして、JPM を使用すると、どのシステムにも簡単にデプロイできます。)

したがって、ワークフローは基本的に次のとおりです。サービス (== アーキテクチャ) を設計し、標準コンポーネントを見つけ、不足しているコンポーネントを開発し、コンポーネントをテストし、統合をテストし、すべてを実行可能な JAR (または WAR) に変換します。

もちろん、必要に応じて単一の VM 内で複数のフレームワークを実行することもできますが、同じフレームワークで無関係なアプリケーションを実行しないでください。

于 2012-07-04T17:17:30.397 に答える
4

お探しの単語は「サブシステム」だと思います。OSGi ドラフト仕様があると思います。そこに。

私の個人的な見解:

バンドルを構築し、どこかに保存します (たとえば、Sonatype Nexus サーバー、私は非常に満足しています。OBR をサポートし、p2 データの生成を限定的にサポートしています)。

「アプリケーション」は、そのリポジトリから特定のバージョンのバンドルを選択したものであり、バージョンを再度作成できます。

本当の標準はまだありません。この時点で、非標準のものを 1 つ選択する必要があると思います。標準のものに変更したり、複数のものをサポートしたりするコストは、それほど大きくはないはずです。

これらのスライドはそれらすべてに言及しています

于 2012-07-04T10:17:36.707 に答える
2

OBR や新しい R5 リゾルバーなどのリゾルバーを使用する場合、その使用によってImport-Package必ずしも大きなメンテナンス オーバーヘッドが生じるとは限りません。

ただし、そのRequire-Bundle方法も可能です。「アプリケーション」は通常、少数 (たとえば 1 ~ 5) の「興味深い」バンドルで構成されます。次に、依存関係、SCR、ブループリントなどの残りのすべてがあります。したがってRequire-Bundle、興味深いバンドルの小さなセットを参照するために を使用する単一の最上位アプリケーション バンドルを作成し、他のすべての依存関係を で指定できますImport-Package

于 2012-07-04T10:18:31.883 に答える