Wikipedia やOSGiに関する他のサイトを読んだことがありますが、全体像はよくわかりません。コンポーネントベースのプラットフォームであり、実行時にモジュールをリロードできると書かれています。また、どこにでもある「実用的な例」は、Eclipse Plugin Framework です。
私の質問は次のとおりです。
OSGi の明確で単純な定義は何ですか?
どのような一般的な問題を解決しますか?
「よくある問題」とは、私たちが毎日直面している問題を意味します。
Wikipedia やOSGiに関する他のサイトを読んだことがありますが、全体像はよくわかりません。コンポーネントベースのプラットフォームであり、実行時にモジュールをリロードできると書かれています。また、どこにでもある「実用的な例」は、Eclipse Plugin Framework です。
私の質問は次のとおりです。
OSGi の明確で単純な定義は何ですか?
どのような一般的な問題を解決しますか?
「よくある問題」とは、私たちが毎日直面している問題を意味します。
OSGi には次の利点があります。
これにより、オンデマンドでロードされる一連のバージョン管理されたプラグイン アーティファクトとしてアプリケーションを構築できます。各プラグインはスタンドアロン コンポーネントです。Maven がビルドを構造化するのに役立つので、ビルドを反復可能にし、それによって作成された一連の特定のバージョンのアーティファクトによって定義できます。OSGi は、実行時にこれを行うのに役立ちます。
OSGi モジュールのホットプラグ可能性については、あまり気にしません (少なくとも現在は)。それは強制されたモジュール性です。いつでもクラスパスで何百万もの「パブリック」クラスを使用できないようにすることで、循環依存から十分に保護されます。Java 言語構造体「パブリック」の観点からだけでなく、ライブラリの観点から、パブリック インターフェイスについて真剣に考える必要があります。 /module: 他のユーザーが利用できるようにしたい (正確に) コンポーネントは何ですか? 機能を実装するために本当に必要な (他のモジュールの) インターフェイスは (正確には) 何でしょうか?
ホットプラグが付属しているのはいいことですが、ホットプラグ機能のすべての組み合わせをテストするよりも、通常のアプリケーションを再起動したいです...
Java を使用するすべての人が利用できる多くの利点があります (これらだけを思い出しました)。
わかりやすくするために編集。OSGiページは私のものよりも良い簡単な答えを与えました
簡単な答え:OSGiサービス・プラットフォームは、ネットワーク化されたサービスを連携させるための標準化されたコンポーネント指向のコンピューティング環境を提供します。このアーキテクチャにより、アプリケーションの構築、保守、および展開の全体的な複雑さが大幅に軽減されます。OSGi Service Platformは、再起動を必要とせずに、さまざまなネットワークのデバイス上で構成を動的に変更する機能を提供します。
単一のアプリケーション構造、たとえばEclipse IDEでは、新しいプラグインをインストールするときに再起動することは大したことではありません。OSGi実装を完全に使用すると、実行時にプラグインを追加し、新しい機能を取得できるはずですが、eclipseを再起動する必要はまったくありません。
繰り返しになりますが、毎日の大したことではなく、小さなアプリケーションの使用です。
しかし、マルチコンピューターの分散アプリケーションフレームワークを検討し始めると、そこから興味深いものになり始めます。重要なシステムの稼働時間を100%にする必要がある場合は、コンポーネントをホットスワップしたり、実行時に新しい機能を追加したりする機能が役立ちます。確かに、今ではほとんどの部分でこれを行うための機能がありますが、OSGiはすべてを共通のインターフェースを備えた素敵な小さなフレームワークにバンドルしようとしています。
OSGiは一般的な問題を解決しますか、それについてはよくわかりません。つまり、それは可能ですが、より単純な問題の場合、オーバーヘッドはそれだけの価値がない可能性があります。ただし、より大規模なネットワーク化されたアプリケーションを扱い始める場合は、これを考慮する必要があります。
OSGi で私を夢中にさせるいくつかのこと:
1) 実装とそのコンテキスト ローダーには多くの癖があり、多少非同期になる可能性があります (合流点内で felix を使用します)。[main] がほとんどすべての同期を実行している純粋な春 (DM なし) と比較して。
2) ホット ロードの後、クラスは等しくありません。たとえば、休止状態に tangosol キャッシュ レイヤーがあるとします。OSGi スコープ外の Fork.class で満たされています。新しい jar をホットロードしますが、Fork は変更されていません。クラス[フォーク] != クラス[フォーク]. 同じ根本的な原因で、シリアル化中にも表示されます。
3)クラスタリング。
これらを回避することはできますが、これは大きな問題であり、アーキテクチャに欠陥があるように見えます。
そして、ホットプラグを宣伝している皆さんへ.. OSGi の #1 クライアント? エクリプス。バンドルをロードした後、Eclipse は何をしますか?
再起動します。
私はまだ OSGi の「ファン」ではありません...
私は Fortune 100 企業でエンタープライズ アプリケーションを扱ってきました。最近、私たちが使用している製品が OSGi 実装に「アップグレード」されました。
ローカル cba 展開を開始しています... [2/18/14 8:47:23:727 EST] 00000347 CheckForOasis
最終的にデプロイされ、「次のバンドルは静止されてから再開されます」[2/18/14 9:38:33:108 EST] 00000143 AriesApplicat I CWSAI0054I: アプリケーションの更新操作の一部として
51 分... コードが変更されるたびに... 以前のバージョン (非 OSGi) は、古い開発マシンに 5 分未満でデプロイされます。
16 ギガの RAM と 40 ギガの空きディスク、および Intel i5-3437U 1.9 GHz CPU を搭載したマシン上
このアップグレードの「メリット」は、(本番) 展開の改善として販売されました。これは、年に 2 ~ 4 回の小規模な修正展開で、年に約 4 回行う活動です。15 人 (QA と開発者) に 1 日あたり 45 分を追加することは、正当化されるとは思えません。大規模なエンタープライズ アプリケーションでは、アプリケーションがコア アプリケーションである場合、それを変更することは当然のことです (小さな変更は広範囲に及ぶ影響を与える可能性があります。企業全体の消費者とコミュニケーションを取り、計画を立てる必要があります)。 OSGi。アプリケーションがエンタープライズ アプリケーションではない場合、つまり、各コンシューマーが独自に調整されたモジュールを持ち、独自のサイロ化されたデータベース内のデータの独自のサイロにヒットし、多くのアプリケーションをホストするサーバー上で実行される可能性がある場合は、OSGi を検討してください。少なくとも、
OSGi には次の利点があります。
■ Java ベースのポータブルで安全な実行環境
■ サービス管理システム。バンドル全体でサービスを登録および共有し、サービス プロバイダをサービス コンシューマから分離するために使用できます。
■ OSGi がバンドルと呼ぶ Java モジュールを動的にインストールおよびアンインストールするために使用できる動的モジュール システム。
■ 軽量でスケーラブルなソリューション
また、モバイル側でミドルウェアとアプリケーションの移植性を高めるためにも使用されています。モバイル側は、WinMo、Symbian、Android などで利用できます。デバイス機能との統合が発生するとすぐに、断片化する可能性があります。
少なくとも、OSGi を使用すると、モジュール性、コードの再利用、バージョン管理、および一般的なプロジェクトの配管について考えるようになります。
他の人はすでに利点を詳細に概説しています。ここでは、OSGi を見たり使用したりした実際のユースケースについて説明します。