OSGiは何を解決するのか?質問する

OSGiは何を解決するのか?質問する

Wikipediaや他のサイトで読んだのですがOSGiですが、全体像がよくわかりません。コンポーネント ベースのプラットフォームであり、実行時にモジュールを再ロードできると書かれています。また、どこでも示されている「実用的な例」は、Eclipse プラグイン フレームワークです。

私の質問は次のとおりです:

  1. OSGi の明確でシンプルな定義は何ですか?

  2. どのような一般的な問題を解決しますか?

「一般的な問題」とは、「OSGi を使用すると、仕事をより効率的/楽しく/簡単にするために何ができるのか」など、私たちが日々直面する問題を意味します。

ベストアンサー1

OSGi のコンポーネント システムはどのような利点を提供しますか?
ここにかなりの数のリストがあります:

複雑さの軽減 - OSGi テクノロジを使用して開発するということは、バンドル (OSGi コンポーネント) を開発することを意味します。バンドルはモジュールです。バンドルは内部を他のバンドルから隠して、明確に定義されたサービスを通じて通信します。内部を隠せば、後で変更する自由度が高まります。これにより、バグの数が減るだけでなく、バ​​ンドルの開発も簡単になります。適切なサイズのバンドルは、明確に定義されたインターフェイスを通じて機能を実装するからです。OSGi テクノロジが開発プロセスにどのような効果をもたらしたかを説明する興味深いブログがあります。

再利用 - OSGi コンポーネント モデルを使用すると、アプリケーションで多くのサードパーティ コンポーネントを簡単に使用できます。OSGi 用に既製の JAR を提供するオープン ソース プロジェクトが増えています。ただし、市販のライブラリも既製のバンドルとして利用できるようになりました。

現実世界 - OSGi フレームワークは動的です。バンドルをオンザフライで更新でき、サービスが出現したり消えたりします。従来の Java に慣れている開発者は、これを非常に問題のある機能と見なし、その利点を理解していません。しかし、現実世界は非常に動的であり、出現したり消えたりする動的なサービスがあれば、そのサービスは多くの現実世界のシナリオに完全に適合します。たとえば、サービスはネットワーク内のデバイスをモデル化できます。デバイスが検出されると、サービスが登録されます。デバイスがなくなると、サービスは登録解除されます。この動的なサービス モデルに一致する現実世界のシナリオは驚くほど多くあります。したがって、アプリケーションは、サービス レジストリの強力なプリミティブ (登録、取得、表現力豊かなフィルター言語による一覧表示、サービスが出現したり消えたりするのを待つ) を独自のドメインで再利用できます。これにより、コードの作成が節約されるだけでなく、グローバルな可視性、デバッグ ツール、専用ソリューションに実装するよりも多くの機能が提供されます。このような動的な環境でコードを記述するのは悪夢のように聞こえますが、幸いなことに、その苦労のほとんど、あるいはすべてを取り除くサポート クラスとフレームワークがあります。

簡単な導入 - OSGi テクノロジは、コンポーネントの標準であるだけでなく、コンポーネントのインストール方法と管理方法も規定しています。この API は、管理エージェントを提供するために多くのバンドルで使用されています。この管理エージェントは、コマンド シェル、TR-69 管理プロトコル ドライバー、OMA DM プロトコル ドライバー、Amazon の EC2 のクラウド コンピューティング インターフェイス、または IBM Tivoli 管理システムのように単純なものになります。標準化された管理 API により、既存および将来のシステムに OSGi テクノロジを非常に簡単に統合できます。

動的更新- OSGi コンポーネント モデルは動的モデルです。バンドルは、システム全体を停止することなく、インストール、開始、停止、更新、アンインストールできます。多くの Java 開発者は、これが確実に実行できるとは考えていないため、最初は本番環境で使用しません。ただし、開発環境でしばらく使用すると、ほとんどの開発者は、これが実際に機能し、展開時間を大幅に短縮できることに気づき始めます。

適応型 - OSGi コンポーネント モデルは、コンポーネントの混合とマッチングを可能にするために根本から設計されています。これには、コンポーネントの依存関係を指定する必要があり、オプションの依存関係が常に利用できるとは限らない環境でコンポーネントが動作する必要があります。OSGi サービス レジストリは、バンドルがサービスを登録、取得、およびリッスンできる動的なレジストリです。この動的なサービス モデルにより、バンドルはシステムで利用できる機能を見つけ、提供できる機能を適応させることができます。これにより、コードがより柔軟になり、変更に対して回復力が増します。

透明性 -バンドルとサービスは、OSGi 環境の第一級オブジェクトです。管理 API は、バンドルの内部状態へのアクセスと、バンドルが他のバンドルとどのように接続されているかへのアクセスを提供します。たとえば、ほとんどのフレームワークは、この内部状態を表示するコマンド シェルを提供します。アプリケーションの一部を停止して特定の問題をデバッグしたり、診断バンドルを取り込んだりすることができます。数百万行のログ出力と長い再起動時間を見つめる代わりに、OSGi アプリケーションはライブ コマンド シェルでデバッグできることがよくあります。

バージョン管理 - OSGi テクノロジは JAR 地獄を解決します。JAR 地獄とは、ライブラリ A はライブラリ B;バージョン=2 で動作しますが、ライブラリ C は B;バージョン=3 でしか動作しないという問題です。標準 Java では、これは不可能です。OSGi 環境では、すべてのバンドルが慎重にバージョン管理され、連携できるバンドルだけが同じクラス スペースに接続されます。これにより、バンドル A と C の両方が独自のライブラリで機能できます。このバージョン管理の問題のあるシステムを設計することはお勧めできませんが、場合によっては救世主となることがあります。

シンプル - OSGi API は驚くほどシンプルです。コア API は 1 つのパッケージと 30 未満のクラス/インターフェースのみです。このコア API は、バンドルの作成、インストール、起動、停止、更新、アンインストールを行うのに十分であり、すべてのリスナーとセキュリティ クラスが含まれています。これほど小さな API でこれほど多くの機能を提供する API はほとんどありません。

小さい - OSGi Release 4 フレームワークは、約 300 KB の JAR ファイルで実装できます。これは、OSGi を組み込むことでアプリケーションに追加される機能の量に対して小さなオーバーヘッドです。したがって、OSGi は、非常に小型のデバイスからメインフレームまで、幅広いデバイスで動作します。実行には最小限の Java VM のみが必要で、その上に追加されるものはほとんどありません。

高速- OSGi フレームワークの主な役割の 1 つは、バンドルからクラスをロードすることです。従来の Java では、JAR は完全に可視であり、線形リストに配置されます。クラスを検索するには、この (多くの場合、非常に長く、150 個も珍しくありません) リストを検索する必要があります。対照的に、OSGi はバンドルを事前に接続し、各バンドルについて、どのバンドルがクラスを提供するかを正確に認識します。この検索の必要がないことは、起動時の大幅な高速化要因です。

怠惰 -ソフトウェアの怠惰は良いことであり、OSGi テクノロジには、本当に必要なときだけ処理を実行するためのメカニズムが多数用意されています。たとえば、バンドルは積極的に開始できますが、他のバンドルが使用しているときだけ開始するように構成することもできます。サービスは登録できますが、使用されるときだけ作成されます。仕様は、実行時のコストを大幅に節約できるこのような怠惰なシナリオを可能にするために、何度も最適化されてきました。

安全 - Java は、基盤に非常に強力なきめ細かなセキュリティ モデルを備えていますが、実際には構成が非常に困難であることが判明しています。その結果、ほとんどの安全な Java アプリケーションは、セキュリティなしまたは非常に限られた機能の 2 者択一で実行されています。OSGi セキュリティ モデルは、きめ細かなセキュリティ モデルを活用しますが、バンドル開発者が要求されたセキュリティの詳細を簡単に監査できる形式で指定し、環境の運用者が完全に管理できるようにすることで、使いやすさが向上します (元のモデルが強化されるだけでなく)。全体的に、OSGi は、ハードウェアで保護されたコンピューティング プラットフォーム以外で、現在でも使用可能な最も安全なアプリケーション環境の 1 つを提供します。

非侵入的 - OSGi 環境のアプリケーション (バンドル) は独自に動作します。OSGi の制限を受けることなく、VM のほぼすべての機能を使用できます。OSGi のベスト プラクティスは、Plain Old Java Objects を記述することです。このため、OSGi サービスには特別なインターフェイスは必要ありません。Java String オブジェクトでも OSGi サービスとして動作できます。この戦略により、アプリケーション コードを別の環境に簡単に移植できます。

どこでも実行可能 -状況によります。Java の本来の目的は、どこでも実行できるようにすることでした。当然、Java VM の機能が異なるため、すべてのコードをどこでも実行できるわけではありません。携帯電話の VM は、銀行アプリケーションを実行する IBM メインフレームと同じライブラリをサポートしていない可能性があります。対処すべき問題が 2 つあります。まず、OSGi API は、すべての環境で使用できないクラスを使用すべきではありません。次に、実行環境で使用できないコードが含まれているバンドルは起動すべきではありません。これらの問題は両方とも、OSGi 仕様で対処されています。

ソース :詳しくはこちら

おすすめ記事