こんにちは、OSGi、パート1:初心者向けのバンドル

Open Services Gateway Initiative(OSGi)は、モジュラーアプリケーションとライブラリーを開発およびデプロイするためのアーキテクチャーを定義します。OSGiの3部構成の紹介のこの最初の記事では、Sunil PatilがOSGi開発の概念を開始し、EclipseOSGiコンテナー実装であるEquinoxを使用して単純なHelloWorldアプリケーションを構築する方法を示します。彼はまた、OSGiを使用したサービス指向アプリケーションの構築について簡単に触れ、OSGiServiceFactoryServiceTrackerクラスを紹介 し ます。

Java用の動的モジュールシステムとしても知られるOpenServices Gateway Initiative(OSGi)は、モジュラーアプリケーション開発のアーキテクチャーを定義します。Knopflerfish、Equinox、Apache FelixなどのOSGiコンテナー実装を使用すると、アプリケーションを複数のモジュールに分割できるため、それらの間の相互依存関係をより簡単に管理できます。

OSGi、Equinox、およびProject Jigsaw

英国最大の科学プロジェクトでOSGi / Equinoxの統合中に学んだ教訓を研究して実際の世界観を把握し、Java9のProjectJigsawから何が期待できるかを調べてください。

JavaサーブレットおよびEJB仕様と同様に、OSGi仕様では、OSGiコンテナーが実装する必要のある一連のサービスと、コンテナーとアプリケーション間のコントラクトの2つが定義されています。OSGiプラットフォームで開発するということは、最初にOSGi APIを使用してアプリケーションを構築し、次にそれをOSGiコンテナーにデプロイすることを意味します。開発者の観点から、OSGiには次の利点があります。

  • コンテナを再起動せずに、アプリケーションのさまざまなモジュールを動的にインストール、アンインストール、開始、および停止できます。
  • アプリケーションでは、特定のモジュールの複数のバージョンを同時に実行できます。
  • OSGiは、サービス指向アプリケーションだけでなく、組み込み、モバイル、およびリッチインターネットアプリを開発するための非常に優れたインフラストラクチャを提供します。

Webアプリケーションの構築にサーブレットコンテナを使用し、トランザクションアプリケーションの構築にEJBコンテナを使用していることを考えると、なぜさらに別のタイプのコンテナが必要なのか疑問に思われるかもしれません。簡単に言うと、OSGiコンテナーは、モジュールに分割したい複雑なJavaアプリケーションを開発することを特に目的としています。このシリーズ全体を通して、その短い答えを詳しく説明します。

こんにちは、OSGi:シリーズを読む

  • パート1:初心者向けのバンドル
  • パート2:Spring DynamicModulesの紹介
  • パート3:サーバー側に持っていく

エンタープライズアプリケーションのOSGi

OSGi仕様の作業は、1999年3月にOSGi Allianceによって開始されました。その主な目標は、ローカルネットワークおよびデバイスにマネージドサービスを提供するためのオープン仕様を作成することでした。基本的な考え方は、OSGiサービスプラットフォームをネットワークデバイス(組み込みおよびサーバー)に追加すると、ネットワーク内のどこからでもそのデバイスのソフトウェアコンポーネントのライフサイクルを管理できるようになるということです。ソフトウェアコンポーネントは、デバイスの動作を中断することなく、オンザフライでインストール、更新、または削除できます。

何年もの間、OSGiテクノロジーは組み込みシステムおよびネットワークデバイス市場で繁栄してきました。現在、Eclipseのおかげもあり、OSGiはエンタープライズ開発のための実行可能で価値のあるテクノロジーとして浮上しています。

OSGiのサポートの拡大

2003年、Eclipse開発チームは、Eclipseをより動的でリッチなクライアントプラットフォームにし、ツールセットのモジュール性を高める方法を探し始めました。最終的に、チームはOSGiフレームワークをランタイムコンポーネントモデルとして使用することに決めました。2004年6月にリリースされたEclipse3.0は、OSGiに基づくEclipseの最初のバージョンでした。

ほとんどすべてのエンタープライズアプリケーションサーバーは、OSGiをサポートしているか、サポートする予定です。Springフレームワークは、OSGiサービスプラットフォーム用のSpring Dynamic Modulesプロジェクトを介してOSGiもサポートします。このプロジェクトは、SpringベースのJavaエンタープライズアプリケーション開発でOSGiを簡単に使用できるようにするインフラストラクチャレイヤーを提供します。

オープンソースのOSGiコンテナー

エンタープライズ開発者の観点からは、OSGiコンテナーのフットプリントは非常に小さいため、エンタープライズアプリケーションに簡単に埋め込むことができます。たとえば、複雑なWebアプリケーションを開発しているとします。アプリケーションを複数のモジュールに分割する必要があります。1つはビューレイヤー用、もう1つはDAOレイヤー用、3つ目はデータアクセスレイヤー用です。組み込みOSGiコンテナーを使用してこれらのモジュールの相互依存関係を管理すると、アプリケーションを再起動せずにDAOレイヤーを更新できます(たとえば、低速DAOから高速DAOに)。

アプリケーションがOSGi仕様に準拠している限り、OSGi準拠のコンテナーで実行できるはずです。現在、3つの人気のあるオープンソースOSGiコンテナーがあります。

  • Equinoxは、OSGi Service Platformリリース4のフレームワーク部分のリファレンス実装です。これは、Eclipse IDEの中心にあるモジュラーJavaランタイムであり、OSGiR4仕様のすべての必須機能とほとんどのオプション機能を実装します。
  • Knopflerfishは、OSGiR3およびOSGiR4仕様のオープンソース実装です。Knopflerfish 2は、R4仕様で定義されているすべての必須機能といくつかのオプション機能を実装しています。
  • Apache Felixは、Apache SoftwareFoundationのオープンソースOSGiコンテナーです。これを書いている時点では、このコンテナーはOSGIR4仕様に完全には準拠していません。

この記事では、OSGiコンテナーとしてEquinoxを使用します。Apache FelixとKnopflerfishの詳細については、「リソース」セクションを参照してください。