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サービス・レジストリーは、バンドルがサービスを登録、取得、およびlistenできる動的レジストリーです。この動的サービスモデルにより、バンドルはシステムで使用可能な機能を見つけ、提供できる機能を適応させることができます。これにより、コードは変更に対してより柔軟で回復力があります。
透明性-バンドルとサービスは、OSGi環境の第一級市民です。管理APIは、バンドルの内部状態へのアクセスと、他のバンドルへの接続方法を提供します。たとえば、ほとんどのフレームワークには、この内部状態を示すコマンドシェルが用意されています。アプリケーションの一部を停止して特定の問題をデバッグしたり、診断バンドルを組み込んだりできます。数百万行のログ出力や長い再起動時間を監視する代わりに、ライブコマンドシェルを使用してOSGiアプリケーションをデバッグできます。
バージョニング -OSGiテクノロジーはJARの地獄を解決します。JAR地獄は、ライブラリAがライブラリB; version = 2で動作するが、ライブラリCはB; version = 3でしか動作しないという問題です。標準のJavaでは、運が悪い。OSGi環境では、すべてのバンドルが慎重にバージョン管理され、共同作業が可能なバンドルのみが同じクラススペースで一緒に配線されます。これにより、バンドルAとCの両方が独自のライブラリで機能するようになります。このバージョン管理の問題を抱えたシステムを設計することはお勧めしませんが、場合によってはそれが救命につながる可能性があります。
シンプル -OSGi APIは驚くほどシンプルです。コアAPIは1つのパッケージであり、30未満のクラス/インターフェイスです。このコアAPIは、バンドルの作成、インストール、開始、停止、更新、アンインストールに十分であり、すべてのリスナーとセキュリティクラスを含みます。ほんの少しのAPIに多くの機能を提供するAPIはほとんどありません。
小 -OSGiリリース4フレームワークは、約300KBのJARファイルに実装できます。これは、OSGiを組み込むことによってアプリケーションに追加される機能の量に対する小さなオーバーヘッドです。したがって、OSGiは、非常に小さいデバイスから小さいデバイス、メインフレームまで、幅広いデバイスで動作します。実行する最小限のJava VMを要求するだけで、その上にほとんど追加されません。
高速 -OSGiフレームワークの主な責任の1つは、バンドルからクラスをロードすることです。従来のJavaでは、JARは完全に表示され、線形リストに配置されます。クラスを検索するには、このリスト(多くの場合非常に長く、150も珍しくありません)を検索する必要があります。対照的に、OSGiはバンドルを事前に配線し、各バンドルについて、どのバンドルがクラスを提供するかを正確に把握しています。この検索の欠如は、起動時の大幅なスピードアップ要因です。
レイジー-ソフトウェアのレイジーは優れており、OSGiテクノロジーには、本当に必要な場合にのみ物事を行うための多くのメカニズムがあります。たとえば、バンドルは熱心に開始できますが、他のバンドルがそれらを使用しているときにのみ開始するように構成することもできます。サービスは登録できますが、使用時にのみ作成されます。仕様は何度も最適化されており、この種の遅延シナリオを可能にすることで、多大な実行時コストを節約できます。
セキュア -Javaの下部には非常に強力なきめ細かいセキュリティモデルがありますが、実際に構成するのは非常に困難です。その結果、ほとんどの安全なJavaアプリケーションは、バイナリの選択で実行されます。セキュリティがないか、機能が非常に制限されています。OSGiセキュリティモデルは、きめの細かいセキュリティモデルを活用しますが、バンドルの開発者が要求されたセキュリティの詳細を簡単に監査できる形式で指定し、環境のオペレーターが完全に責任を負うことで、使いやすさを向上させます(元のモデルを強化します)。全体として、OSGiは、ハードウェアで保護されたコンピューティングプラットフォームが不足してもまだ使用可能な最も安全なアプリケーション環境の1つを提供する可能性があります。
非侵入型-OSGi環境のアプリケーション(バンドル)は、そのままにしてください。OSGiが制限することなく、仮想マシンのほぼすべての機能を使用できます。OSGiのベストプラクティスは、Plain Old Java Objectを作成することです。このため、OSGiサービスに特別なインターフェイスは必要ありません。JavaStringオブジェクトでもOSGiサービスとして機能できます。この戦略により、アプリケーションコードを別の環境に簡単に移植できます。
どこでも実行-まあ、それは異なります。Javaの本来の目的は、どこでも実行できるようにすることでした。明らかに、Java VMの機能は異なるため、すべてのコードをどこでも実行することはできません。携帯電話のVMは、銀行アプリケーションを実行するIBMメインフレームと同じライブラリをサポートしない可能性があります。注意すべき問題が2つあります。まず、OSGi APIは、すべての環境で利用できるわけではないクラスを使用するべきではありません。第2に、実行環境で使用できないコードが含まれているバンドルは開始しないでください。これらの問題はどちらもOSGi仕様で対処されています。
出典:www.osgi.org/Technology/WhyOSGi