OSGi

OSGi
OSGiアライアンスロゴ
年が始まった1999
最新バージョン8.0 2020年10月[ 1 ] (2020年10月
組織OSGiアライアンス
ドメインジャワ
ライセンスOSGi 仕様ライセンス、バージョン 2.0
Webサイトwww.osgi.org

OSGiはEclipse Foundationの傘下にあるオープン仕様かつオープンソースのプロジェクトです。[ 2 ]

これは、1999年3月に設立されたソフトウェアオープン標準化団体であるOSGiアライアンス(旧称:Open Services Gateway initiative )の活動の継続です。同財団は当初、 OSGi標準の仕様策定と保守を行っていました。同アライアンスは2020年末にその活動をEclipse Foundationに移管しました。[ 3 ]

OSGi仕様は、Javaプログラミング言語用のモジュール式システムとサービスプラットフォームを規定しています。このプラットフォームは、スタンドアロンのJava環境やVM環境には存在しない、完全かつ動的なコンポーネントモデルを実装します。OSGiは、拡張Javaクラスファイルアーカイブ(JAR(ファイル形式) )として実装されたマイクロサービスに基づくサービス指向アーキテクチャを備えています。

説明

OSGiはサービス指向アーキテクチャに基づいて構築されています。 アプリケーションまたはコンポーネントは、デプロイメント用のバンドル形式で提供され、再起動することなくリモートからインストール、起動、停止、更新、アンインストールできます。Javaパッケージ/クラスの管理は詳細に規定されています。アプリケーションのライフサイクル管理は、管理ポリシーのリモートダウンロードを可能にするAPIを介して実装されています。サービスレジストリにより、バンドルは新しいサービスの追加やサービスの削除を検出し、それに応じて適応することができます。

OSGi仕様は、当初のサービスゲートウェイへの重点を超えて進化し、現在では携帯電話からオープンソースのEclipse IDEに至るまで、幅広いアプリケーションで使用されています。その他の応用分野としては、自動車産業オートメーションビルオートメーションPDAグリッドコンピューティングエンターテインメントフリート管理アプリケーションサーバーなどが挙げられます。

2020年10月、OSGiアライアンスは標準化の取り組みをEclipse Foundationに移行し、その後閉鎖することを発表しました。[ 4 ] すべての成果物はEclipse Foundationに移管され、「OSGiワーキンググループ」が仕様の維持と進化を続けています。

仕様策定プロセス

OSGi仕様は、メンバーによってオープンなプロセスで開発され、OSGi仕様ライセンスに基づいて無料で公開されています。[ 5 ] OSGiアライアンスは、メンバー限定のコンプライアンスプログラムを提供しています。2010年11月現在、7つの認定OSGiフレームワーク実装があります。[ 6 ]認定済みと非認定の両方のOSGi仕様実装が別のページにリストされており、OSGiフレームワークやその他のOSGi仕様が含まれています。

建築

OSGi サービスゲートウェイアーキテクチャ

OSGiは、モジュール型のソフトウェアプログラムとライブラリを開発および展開するためのJavaフレームワークです。各バンドルは、外部依存関係(存在する場合)を明示的に宣言した、クラス、jar、および設定ファイルの密結合された動的ロード可能なコレクションです。

フレームワークは概念的に次の領域に分かれています。

バンドル
バンドルは、追加のマニフェスト ヘッダーを持つ通常のJARコンポーネントです。
サービス
サービス レイヤーは、プレーン オールド Java インターフェース ( POJI ) またはプレーン オールド Java オブジェクト(POJO)の公開、検索、バインド モデルを提供することで、バンドルを動的に接続します。
サービスレジストリ
管理サービス用のアプリケーションプログラミング インターフェイス。
ライフサイクル
バンドルのライフ サイクル管理 (インストール、開始、停止、更新、アンインストール) 用のアプリケーションプログラミング インターフェイス。
モジュール
カプセル化と依存関係の宣言 (バンドルがコードをインポートおよびエクスポートする方法) を定義するレイヤー。
安全
バンドル機能を事前定義された機能に制限することでセキュリティの側面を処理するレイヤー。
実行環境
特定のプラットフォームで利用可能なメソッドとクラスを定義します。実行環境の固定リストは存在しません。Java Community ProcessがJavaの新しいバージョンやエディションを作成するたびに変更される可能性があるためです。ただし、現在、ほとんどのOSGi実装では以下のセットがサポートされています。

バンドル

分類: OSGi

バンドルとは、Java クラスと追加リソースのグループであり、MANIFEST.MFそのすべての内容に関する詳細なマニフェスト ファイルと、含まれている Java クラス グループにさらに高度な動作を与えるために必要な追加サービスを備えており、その集合体全体をコンポーネントとみなすほどです。

MANIFEST.MF以下は、 OSGi ヘッダーを含む 一般的なファイルの例です。

バンドル名: Hello Worldバンドルシンボル名: org.wikipedia.helloworldバンドルの説明: Hello World バンドルバンドルマニフェストバージョン: 2バンドルバージョン: 1.0.0バンドルアクティベーター: org.wikipedia.Activatorエクスポートパッケージ: org.wikipedia.helloworld;version="1.0.0"インポートパッケージ: org.osgi.framework;version="1.3.0"

例文の内容の意味は以下のとおりです。[ 7 ]

  1. Bundle-Name:このバンドルの人間が読める名前を定義します。バンドルに短い名前を割り当てるだけです。
  2. Bundle-SymbolicName:唯一の必須ヘッダーです。このエントリは、逆ドメイン名規則( Java パッケージでも使用される)に基づいて、バンドルの一意の識別子を指定します。
  3. Bundle-Description:バンドルの機能の説明。
  4. Bundle-ManifestVersion:このバンドルの読み取りに使用する OSGi 仕様を示します。
  5. Bundle-Version:バンドルにバージョン番号を指定します。
  6. Bundle-Activator:バンドルがアクティブ化されたときに呼び出されるクラス名を示します。
  7. Export-Package:バンドルに含まれるどの Java パッケージが外部に公開されるかを表します。
  8. Import-Package:バンドル内で必要な依存関係を満たすために外部から必要な Java パッケージを示します。

ライフサイクル

OSGiバンドルのライフサイクル

ライフサイクルレイヤーは、動的にインストール、起動、停止、更新、アンインストールできるバンドルを追加します。バンドルはクラスのロードをモジュールレイヤーに依存しますが、実行時にモジュールを管理するためのAPIを追加します。ライフサイクルレイヤーは、通常はアプリケーションには含まれないダイナミクスを導入します。環境の正しい動作を保証するために、広範な依存関係メカニズムが使用されます。ライフサイクル操作は、セキュリティアーキテクチャによって完全に保護されています。

バンドル状態 説明
インストール済みバンドルは正常にインストールされました。
解決済みバンドルに必要なすべてのJavaクラスが利用可能です。この状態は、バンドルが起動準備ができているか、停止していることを示します。
起動バンドルは開始中です。BundleActivator.startメソッドは呼び出されましたが、開始メソッドはまだ返されていません。バンドルにアクティベーションポリシーが設定されている場合、バンドルはアクティベーションポリシーに従ってアクティベートされるまで、STARTING状態のままになります。
アクティブバンドルは正常にアクティブ化され、実行されています。Bundle Activator の開始メソッドが呼び出され、返されました。
停止バンドルを停止しています。BundleActivator.stopメソッドは呼び出されましたが、stopメソッドがまだ返されていません。
アンインストール済みバンドルはアンインストールされました。別の状態に移行することはできません。

以下は、インターフェースを実装する一般的な Java クラスの例ですBundleActivator

パッケージorg.wikipedia ;org.osgi.framework.BundleActivatorをインポートします。org.osgi.framework.BundleContextインポートしますパブリッククラスActivator はBundleActivatorを実装します{プライベートBundleContext context ;@Override public void start ( BundleContext context ) throws Exception { System.out.println ( " Starting : Hello World " ) ; this.context = context ; }@Override public void stop ( BundleContext context ) throws Exception { System.out.println ( " Stopping : Goodbye Cruel World " ) ; this.context = null ; } }

サービス

標準サービス

OSGiアライアンスは多くのサービスを規定しています。サービスはJavaインターフェースによって規定されます。バンドルはこのインターフェースを実装し、サービスをサービスレジストリに登録できます。サービスのクライアントは、レジストリ内でサービスを見つけたり、サービスが出現または消滅したときに反応したりすることができます。

以下の表はOSGiシステムサービスの説明を示しています。[ 8 ]

システムサービス 説明
ログ記録情報、警告、デバッグ情報、またはエラーのログ記録、ログサービスによって処理されます。ログサービスはログエントリを受信し、その情報をサブスクライブしている他のバンドルにこれらのエントリを送信します。
構成管理者このサービスにより、オペレーターはデプロイされたバンドルの構成情報を設定および取得できます。
デバイスアクセス既存デバイスの自動検出と接続の調整を容易にします。これはプラグアンドプレイのシナリオで使用されます。
ユーザー管理者このサービスは、認証および承認の目的でユーザー情報 (プライベートおよびパブリック) を含むデータベースを使用します。
IOコネクタIOコネクタサービスは、CDC / CLDCjavax.microedition.ioパッケージをサービスとして実装します。このサービスにより、バンドルは新しい代替プロトコルスキームを提供できるようになります。
設定設定を保存するためにJava のデフォルトを使用する代わりに、より OSGi に適した代替メカニズムを提供しますProperties
コンポーネントランタイムサービスは動的な性質を持ち、いつでも追加・削除される可能性があるため、ソフトウェアの開発は困難です。コンポーネントランタイム仕様では、XMLベースの依存関係宣言を提供することで、こうした動的な側面の処理を簡素化できます。
展開管理者管理エージェントの一部の責任へのアクセスを標準化します。
イベント管理者パブリッシュ アンド サブスクライブ モデルに基づくバンドル間通信メカニズムを提供します。
アプリケーション管理者同時に利用可能なさまざまな種類のアプリケーションを含む環境の管理を簡素化します。

以下の表は、OSGi プロトコル サービスの説明を示しています。

プロトコルサービス 説明
HTTP サービスHTTPを使用して OSGi から情報を送受信できるようにします。
UPnP デバイス サービスユニバーサル プラグ アンド プレイ(UPnP) デバイスと相互運用できるように OSGi バンドルを開発する方法を指定します。
DMT管理者Open Mobile Alliance (OMA) デバイス管理仕様の概念を使用してデバイスを管理するための API を定義します。

以下の表は、OSGi のその他のサービスの説明を示しています。

その他のサービス 説明
ワイヤー管理者プロデューサー サービスとコンシューマー サービス間の接続を許可します。
XMLパーサーXML パーサー サービスを使用すると、バンドルは必要なプロパティとJAXPとの互換性を備えたパーサーを見つけることができます。
測定と状態測定および状態サービスにより、OSGi サービス プラットフォームでの測定の正しい処理が可能になり、簡素化されます。

組織

OSGi Allianceは、 1999年3月にエリクソンIBMモトローラサン・マイクロシステムズなどによって設立されました。非営利法人として法人化される前は、Connected Allianceと呼ばれていました。

会員には(2015年2月現在) 、 Adobe SystemsDeutsche TelekomHitachiIBMLiferay、Makewave、NECNTTOracleOrange SAProSystSalesforceSiemensSoftware AGTIBCO Softwareなど、非常に多様な事業分野の35社以上が含まれています。[ 9 ]

アライアンスには、組織全体のガバナンスを担う理事会が設置されています。OSGi役員は、アライアンスを支える上で様々な役割と責任を担っています。技術的な作業は、理事会によって設立された専門家グループ(EG)で行われ、非技術的な作業は様々なワーキンググループや委員会で行われています。専門家グループで行われる技術的な作業には、仕様の策定、リファレンス実装、コンプライアンステストなどが含まれます。これらの専門家グループは、OSGi仕様の5つのメジャーリリース(2012年現在)を発行しています。

エンタープライズ、モバイル、車両、コア プラットフォームの各分野には専用の専門家グループが存在します。

エンタープライズ・エキスパート・グループ(EEG)は最新のEGであり、エンタープライズ/サーバーサイドアプリケーションを扱っています。2007年11月には、レジデンシャル・エキスパート・グループ(REG)が、レジデンシャル/ホームゲートウェイのリモート管理に関する仕様策定に着手しました。2003年10月には、ノキアモトローラIBMプロシストなどのOSGiメンバーがモバイル・エキスパート・グループ(MEG)を設立し、次世代スマート携帯電話向けのMIDPベースのサービスプラットフォームの仕様策定を進めています。このプラットフォームは、 CLDCが対応できないニーズ( CDCを除く)の一部に対応します。MEGはR4と同様にOSGiの一部となりました。

仕様バージョン

  • OSGi リリース 1 (R1): 2000 年 5 月
  • OSGi リリース 2 (R2): 2001 年 10 月
  • OSGi リリース 3 (R3): 2003 年 3 月
  • OSGi リリース 4 (R4): 2005 年 10 月 / 2006 年 9 月
    • コア仕様(R4コア):2005年10月
    • モバイル仕様(R4 Mobile / JSR-232):2006年9月
  • OSGi リリース 4.1 (R4.1): 2007 年 5 月 (別名 JSR-291)
  • OSGi リリース 4.2 (R4.2): 2009 年 9 月
    • エンタープライズ仕様(R4.2):2010年3月
  • OSGi リリース 4.3 (R4.3): 2011 年 4 月
    • コア:2011年4月
    • 概要と住宅:2012年5月
  • OSGi リリース 5 (R5): 2012 年 6 月
    • コアとエンタープライズ:2012年6月
  • OSGi リリース 6 (R6): 2015 年 6 月
    • コア:2015年6月
  • OSGi リリース 7 (R7): 2018 年 4 月
    • コアとコンペンディウム:2018年4月
  • OSGiリリース8(R8):2020年12月[ 10 ]

現在のフレームワーク実装

名前ライセンス
アパッチ・フェリックスオープンソース
アパッチカラフオープンソース
コンシェルジュ OSGiオープンソース
エクイノックス OSGiオープンソース
双子座日食オープンソース
ノップラーフィッシュオープンソース

参考文献

  1. ^ 「OSGi Alliance | 仕様 / ホームページ」 . osgi.org . 2020年. 2022年10月3日閲覧
  2. ^グループ、OSGiワーキンググループ。「OSGiとは? | Eclipse Foundation」。OSGiワーキンググループ。 2023年11月8日閲覧{{cite web}}:|last=一般的な名前があります(ヘルプ
  3. ^ Tyson, Matthew (2020年8月13日). 「OSGiとは何か? Javaのモジュール化への新たなアプローチ」 InfoWorld . 2023年11月8日閲覧
  4. ^ Hargrave, BJ 「Eclipse Foundation への移行のお知らせ」
  5. ^ 「OSGi仕様ライセンス」 。 2015年9月14日時点のオリジナルよりアーカイブ2012年5月10日閲覧。
  6. ^ 「OSGi Alliance | Markets / Certified」 2008年9月25日時点のオリジナルよりアーカイブ。 2017年6月23日閲覧
  7. ^ OSGiバンドルの作成2009年4月16日、 Wayback MachineにCostin Leauによってアーカイブされました
  8. ^ Diaz Redondo, RP; Vilas, AF; Cabrer, MR; Pazos Arias, JJ; Lopez, Marta Rey (2007-02-01). 「住宅用ゲートウェイの強化:OSGiサービス構成」. IEEE Transactions on Consumer Electronics . 53 (1): 87– 95. doi : 10.1109/TCE.2007.339507 .
  9. ^ “OSGi Alliance | About / Members” . 2014年3月11日時点のオリジナルよりアーカイブ。 2014年3月11日閲覧
  10. ^ Hargrave, BJ 「OSGi Core Release 8 が最終版となり、公開されました」

さらに読む