すでにソフトウェアを配置していますが、技術ユーザーがプラットフォームを拡張できるようにするためのより効果的な方法が必要です。
OSGi はほとんどの Java 開発者によく知られていますが、OSGi を製品に統合するのは困難な作業のように思えるかもしれません。 OSGi の正確な動作が明確でないことが、先行きをさらに混乱させています。
彼らが実験したいと思っているものとは対照的に、OSGi は多くの Java 開発者にとって広い海を航海しようとしているように感じます。
この記事では、簡単なプログラムを使用した OSGi Felix spring チュートリアルを紹介し、その利点やその他の重要な詳細について説明します。
では、OSGi とは何ですか?
モジュールとコンポーネントの作成と配布は、OSGi (Open Service Gateway Initiative) として知られる Java フレームワークによって可能になります。
関数のカプセル化と疎結合が強調されており、ソース コード間で容易に転送できるモジュラー機能や、無限の依存関係を必要としないテストなど、開発者にいくつかの利点があります。
OSGi はどのように機能しますか?
Java の動的コンポーネント システムは、OSGi と呼ばれる一連の仕様によって定義されます。 これらの仕様により、アプリケーションが多数のパーツから構築され、バンドルにパッケージ化されるという開発アプローチが可能になります。
これらのコンポーネントは、ローカルおよびネットワークベースのサービスを使用して通信します。 プログラムのコア コードを可能な限りコンパクトにすることが目的です。 このコードといくつかのコンポーネントとの間の高い結合が可能です。
アプリケーションの再利用可能な構築要素はコンポーネントと呼ばれます。 e コマース Web サイトのショッピング カートや、スタッフ管理システムの給与計算アプリケーションなどの機能について考えてみてください。
コンポーネントは OSGi を使用して実装を他のコンポーネントから隠し、必要なデータのみをサービス経由で提供できます。
これにより、コンポーネントがアクセスしてはならないデータを意図せず変更することを防ぎ、依存関係を管理します。
OSGi アプリケーション内のコンポーネント間のすべての接続は、理想的な世界ではサービスを通じて行われます。 Java パッケージには、サービス用に指定された API が含まれています。
サービス プロバイダーと顧客の間のコラボレーションには、API を構成するクラスやインターフェイスを使用する必要があります。
すべての OSGi コンポーネントはバンドルにまとめられており、それぞれが機能するために必要なリソースを含んでいます。 バンドルは、環境から何を必要とし、何ができるかについて非常に明確です。
福利厚生
- OSGi アプリケーションは、外部バンドル リポジトリにアクセスできます。
- このフレームワークにより、モジュール レベルでサービス指向の設計が可能になります。
- 標準化に加えて、アプリケーション バンドルのバージョンと依存関係を管理し、サード パーティ製ライブラリの統合を容易にすることができます。
- アプリケーションは、変化する要求への適応性が高く、移植性が高く、リエンジニアリングが迅速です。
- A ウェブアプリケーション フレームワークが Java EE プログラミング モデルと統合されているため、バージョン管理された OSGi バンドルのグループとして、動的なライフタイムで展開できます。
- フレームワークは、アプリケーションの一部としてサードパーティ ライブラリとしてインストールされるのではなく、アプリケーション サーバー ランタイムの一部として提供される標準化された形式で、Spring Framework の宣言型アセンブリと合理化された単体テストを提供します。
- 動的なライフサイクルを持つ複数のバージョン管理されたバンドルで構成される企業アプリケーションの場合、フレームワークは分離を提供します。
- これには、複数のアプリケーションで使用される共有の共通およびバージョン管理されたバンドルを格納できる統合バンドル リポジトリが含まれているため、各アプリケーションが各共有ライブラリの個別のコピーをデプロイすることはありません。
OSGi Felix spring の概要
リソースの取得
から Apache Karaf の最新バージョンをダウンロードすることにより、 このサイト、OSGi の冒険を始めることができます。
OSGi 仕様の Apache 実装である Apache Felix に基づいて、Apache Karaf は OSGi ベースのアプリケーションのプラットフォームを提供します。
Karaf は、プラットフォームとの通信を可能にするコマンド ライン インターフェイスなど、OSGi に慣れるのに役立つさまざまな便利な機能を Felix の上に提供します。
バンドルのエントリーポイント
アプリケーションは、OSGi 環境で実行する前に、OSGi バンドルとしてパッケージ化する必要があります。 さらに、アプリケーションのエントリ ポイントを指定する必要があります。 標準の public static void main(String[] args) 関数ではありません。
それでは、「」を作成することから始めましょうこんにちは世界」 OSGi ベースのアプリケーション。
基本的な OSGi API 依存関係を確立することから始めます。
OSGi ランタイムは依存関係にアクセスできるため、バンドルに依存関係を含める必要はありません。 したがって、提供済みとしてマークされます。
それでは、簡単な HelloWorld クラスを作成しましょう。
バンドルのエントリ ポイントとして機能するクラスは、OSGi 提供の BundleActivator インターフェースを実装する必要があります。
このクラスを含むバンドルが起動されると、OSGi プラットフォームは start() 関数を呼び出します。 一方、バンドルが停止される直前に、関数 stop() が呼び出されます。
各バンドルは BundleActivator を XNUMX つしか持てないことを忘れないでください。 どちらの方法でも、指定された BundleContext オブジェクトを使用して OSGi ランタイムと通信できます。
バンドルの作成
必要な変更を加えて、pom.xml を真の OSGi バンドルにします。
最初に、目標がバンドルを生成することであることを明確に表現する必要があります。
次に、maven-bundle-plugin を使用して HelloWorld クラスを OSGi バンドルとしてパッケージ化します (Apache Felix コミュニティの厚意による)。
バンドルの MANIFEST ファイルに含めたい OSGi ヘッダーの値は、指示セクションで指定されています。
Bundle-Activator は、バンドルの開始と停止に使用される BundleActivator ソリューションの適切な修飾名です。 作成したばかりのクラスと互換性があります。
OSGi ヘッダーではありませんが、Private-Package ヘッダーはプラグインにパッケージをバンドルに追加するように指示しますが、他のプラグインからアクセスできるようにはしません。 バンドルを作成するには、mvn install コマンドを使用する必要があります。
バンドルのインストールと実行
次のコマンドを実行して、Karaf を開始しましょう。
ここで、「KARAF HOME」は、Karaf がセットアップされたフォルダーを指します。 Karaf コンソール プロンプトが表示されたら、次のコマンドを使用してバンドルをインストールできます。
ローカルの Maven リポジトリを使用することで、Karaf はバンドルをロードするように指示されます。
バンドルの数値 ID を返すと、Karaf はそれを書き出します。 この ID は、以前にインストールされたバンドルの数によって異なる場合があります。 バンドルが正常にインストールされました。これを起動するコマンドは次のとおりです。
パッケージを起動すると、「Hello World by Jay」が表示されます。 以下を使用して、バンドルを停止して削除できます。
コンソールに「Goodbye World by Jay」と表示されます。
まとめ
開発者は、OSGi を使用することで、既存の Web アプリケーションを安全に保ち、メイン プログラムの他のコンポーネントから分離しながら、新しい機能を簡単に追加できます。
この投稿では、OSGi の機能、利点、簡単なプログラムなど、OSGi について学びました。 OSGi を独自のアプリケーションに組み込むことは難しくありません。
ハッピーコーディング!
コメントを残す