本日OSGi DevConでOSGiアライアンスはOSGiコアとエンタープライズの仕様のリリース5のアーリーアクセス版を発表した。OSGi R5の最終リリースは今年の夏の後半に予定されている。
OSGi R5は何が新しいのか
OSGi R5コアの仕様には一般的な要件と機能を定義するのに使えるResource APIが追加されている。これは、既存のImport-Package
とExport-Package
の要件の一般化であり、バンドルを記述する方法を提供する。この要件と機能の定義はCapability
クラスとRequirement
クラスを通じて、アクセスできる。バンドル館のコネクションには、既存のBundleWiring
クラスからアクセスできる。このクラスはbundle.adapt(BundleWiring.class)
経由でBundle
のアダプタとして動作する。
この要件/機能モデルは新しいOSGi Bundle Repository (OBR)のフォーマットで公開される。このフォーマットはバンドルの情報を記録し、バンドル間の依存性を表現する。このフォーマットはEclipseのP2フォーマットに似ているが、OSGiランタイム用にこの要件と機能の定義を表現する新しい方法を提供する(OBRの以前のバージョンは存在はしていたが、APIを標準化した仕様としてはOSGi R5が初めてだ)。要件は依存性を分類するnamespaces上で構築される。namespacesにはJavaランタイムの種類を表すosgi.ee
やバンドル間の依存関係を表すosgi.wiring.package
やosgi.bundle.bundle
がある。
また、JavaのServiceLoader
をフックする新しいAPIもある。ServiceLoaderは複数のクラスローダがあると動作しない。この新しいAPIはロードされたバンドルを調整し、時にはバイトコードを書き直して、ServiceLoader
の動きをOSGiが認識できるスタブの呼び出しにマップして、正しいスレッドのローカルクラスローダの準備が整った後に、その呼び出しを転送する。加えて、バンドルのワイヤリングやサービスのワイヤリングやフレームワークのフックも適切に設置されているので、実行環境(Eclipse Virgoのような)はバンドルの間に仮想的なパーティショニングの枠組みを設定できる。エンタープライズ仕様では、SubsystemサービスとしてこのAPIにアクセスできる。
また、JMXインターフェイスのようなサービスに対しても小さな改善も積み重ねられている。JMXはバンドルのワイヤリングの仕組みで公開されている情報をより詳しく提供できるようになっている。
Eclipse Equinoxはすでにこれらの仕様を提供している。Apache Felixも同様だ。しかし、これらの仕様はまだ公式にはリリースされていないので、保証はされていない。