OSGiのうれしさを擬人化してみる

相変わらず体調はよろしくないので、軽めに。(でもタイトルは結構重い気が…。)

OSGiって何がうれしいか考えてみてるんですが、一つはその場にインストールされている「サービス」をトラッキングできることがうれしいんじゃないかと。ということで、こんな状況をあてはめてみた。

  • 飛行機に乗っている最中、急患が出てCAさんが客席に向かって「お医者さんいらっしゃいませんか?」と聞いてみた。

飛行機にお医者さんが乗っかっているかどうかはCAには分かりません。が、もし乗っていればお医者さんの医療が急患に施されます。もし乗っていなくても、後からお医者さんを飛行機に乗っている最中に追加し、応急処置を施すこともできます。(バーチャルな世界の話ですよ。現実には無理ですね。)

こういうことをOSGiは実現しています。サービスを利用する側はサービス提供側の実装を完全に知らなくても、そのVMにインストールされているBundleの中に同一のサービスを提供するものがあれば、そのサービスを利用することができます。もしサービスを提供するものがなければ、後からそのサービスを登録するBundleをインストールすることで、応急処置をすることもできます。

これがもしDIコンテナだったら、「飛行機にはお医者さんが乗っている」ことをXMLなりアノテーションなりで必ず記述する必要が出てきます。なんていうんでしょう。「飛行機を運行するためには必ずお医者さんが乗っていなければならない」という誓約書が必要みたいな。

VMとアプリケーションの間にOSGiをかます事で、こんな柔軟性が生まれます。DIコンテナDIコンテナと呼ばれる前はIoCコンテナと呼ばれていましたが、OSGiを使うとより柔軟なIoCが可能になっています。そのあたりがOSGiのうれしさの一つかなと個人的には思うんですが、うまく伝えられたでしょうか。