OSGi(Open Service Gateway Initiative) Lab

 OSGi LabではiDempiere(アイデンピエレ)の基盤として採用されているOSGiについて調査及び研究し、その成果をまとめています。

OSGiとは

 OSGi(Open Service Gateway initiative)とは、もともとは1999年3月に、Sun、IBMを中心に設立された、情報家電の規格、仕様策定を行う国際団体の名称でした。現在ではOSGiは、「Javaモジュールの動的追加や実行を管理するためのフレームワーク」に関する仕様を表す言葉として使用されており、その仕様を策定する団体はOSGi Allicanceとなっています。

OSGiとは「Javaモジュールの動的追加や実行を管理するためのフレームワーク」の仕様

 ここで、Javaモジュールと言っているのは.jarファイルに代表される、javaのある機能を再利用するための塊だと思って下さい。その塊がいわゆるプラグインと呼ばれ、OSGiは「Javaでプラグイン構造を実現するための仕様」だともいえます。OSGiではプラグインのことを「バンドル(Bundle)」といいます。バンドル≒プラグインです。このサイトでは、OSGiに強く関係する所ではバンドルという表現を使用し、iDempiereに強く関係する所ではプラグインという表現を使用しています。

OSGiの仕様策定団体:OSGi Allicance

OSGi Alliance
OSGi Alliance

 OSGiの仕様策定を行うOSGi Allianceには、現在は通信/家電/パソコン/自動車関連会社など多数の団体が参加しています。そして、名だたる日本企業も多数参加しています。

OSGiの特徴

動的機能追加

 JavaVMを停止させる事無く(≒サーバーを停止させる事無く)、バンドルをインストールし機能を追加する事ができます。

部品化

 バンドルをブロックのように組み立ててアプリケーションを構築します。この事により、ハード依存、プロトコル依存部分の切り出しが容易になり、組み合わせにより様々なパターンに対応でき、不具合発生時の影響範囲も特定しやすくなります。

バンドルの連携概念

 OSGiでは、バンドルを組み合わせる事でアプリケーションを構築していきます。ここではバンドル連携の概念を説明します。OSGiでバンドルを連携する方法は大きく分けて2種類あります。「パッケージによる連携」と「サービスによる連携」です。

パッケージによる連携

 バンドルは各々が独立しているため、そのままでは他のバンドルの持つクラスは使用できません。そこで、パッケージによる連携を行う事で、他のバンドルが持つクラスを使用する事ができます。

 例えば、バンドルAに属するパッケージ”foo”を、他のバンドルで使用しても良いとする場合、バンドルAはパッケージ”foo”をExport-Package”として定義します。バンドルAのパッケージ”foo”に属するクラスを使用したいとバンドルBは、”Import-Package”として”foo”を設定する事で、”foo”に属するクラスを使用する事ができます。


サービスによる連携

 サービスによる連携を行うと、他のバンドルが生成したインスタンスを使う事ができます。

 例えば、バンドルAがNewして作成したインスタンスを、バンドルBに使用させたい場合などはサービスによる連携をする事になります。


連携方法の特徴

◆パッケージによる連携方法の特徴

  • インスタンスを使用する側で生成します。
  • 静的なメソッドを提供するユーティリティクラスや例外クラスなど、いつ誰が使用しても問題ないクラスを提供するのに適しています。

◆サービスによる連携方法の特徴

  • インスタンスを提供する側で生成します。※使用する側は、渡されたインスタンスを利用するだけです。
  • インスタンスを使用するタイミングがコントロールできる(されている)ため、状況に影響を受ける機能を提供するのに適しています。

OSGiの実装

 OSGiは仕様ですので、その仕様の実装がいくつか存在します。ここではOSGiの実装として有名な3つのOSGiフレームワークを紹介します。

equinox
equinox

 IBMが作成し、Eclipseに寄贈したOSGiフレームワーク。iDempiereで採用されているOSGiの実装です。

 ※equinoxは、昼と夜が同じ長さの日のことで、the vernal(spring) equinoxが春分、the autumnal equinoxが秋分です。

felix
felix

 felixは、アパッチ財団が開発しているOSGiのフレームワークです。iDempiereでは、プラグイン(バンドル)のインストールなどを行う管理画面(Webコンソール)のみ利用しています。

knopflerfish
knopflerfish


concierge(コンシェルジュ)

 組み込み専用の軽量なOSGiフレームワーク。

OSGiコンテンツメニュー

Bundle Activator

Bundle Context

Bundleのステータス遷移とアップデート

スタートレベル

バンドル間の連携方法

EquinoxのOSGiコンソール ※サポーターズコンテンツ

OSGiアプリケーションの起動 ※サポーターズコンテンツ

OSGi Tips ※非公開コンテンツ

参考サイト