おすぎです。
最近、マイブームです。こっちね → http://www.osgi.org/
Eclipseの基盤となるフレームワークとしても使われている仕様で、昔から何だかんだと縁のある奴なんですよね。しかし、Eclipseプラグインを作るといっても、大抵は「ふ〜ん」程度でスルーして、OSGiがどんなことをしているのか、深く知らないままなケースが多いと思います。
かくいう自分もそんなモンで、先日まで「プラグインのベース機能を提供してて、bundleって奴で構成されてて、クラスローダーがカオスなんでしょ?」程度の理解(ちょっと誇張しすぎだが)だった訳です。
で、プラグイン開発者はちょっと変わった事しようとすると、当然の如くクラスローダーまわりでドツボにはまる訳です。はい、自分もそうです。
で、実は最近、仕事との絡みもあり、ちょいとOSGiを徹底調査している昨今です。
OSGiってどんなものか
を説明してみたいと思うんですが、俺もJVMの仕様とか厳密には把握しきれていないので、多少おかしな所もあるかもしれんです。その場合は、※欄あたりで突っ込んでください。
通常のJavaプログラムは、JVMを立ち上げて、必要に応じてクラスをロードしながらmainメソッドの実行を始める。で、mainメソッドが終わるとJVMが終了する。このJVMのライフサイクル(ライフタイム?)を通して、一度ロードしたクラスはずっと変わる事はない。JVM起動時にclasspath指定した中にクラスがなければアウトだし、有ったら有ったで最初から最後まで全く同じ。メソッドが増えたり減ったり処理内容が変わったりはしない訳です。
例えばこの前提で「プラグイン機能」の仕組みを作ろうとした場合、プラグインが新たにインストールされたりアンインストールされたりアップデートされた時には、必ずJVMの再起動が必要、ということになってしまいます。
JVMを起動したまま、最初は無かったクラスが突然使えるようになったり、元々存在するクラスが消えたり挙動が変わったりすることは、基本的にない訳ですから。
簡単にまとめ過ぎているので多少語弊はありますが、こういった事を簡単にできるようにしたフレームワーク、それがOSGiです。
さーて、長くなりそうなので連載化しようかな。つづく。