2011-02-07 9 views
12

私はJavaで意味ベースの検索アプリケーションを開発しています。アプリケーションをモジュール化するために、私はosgiアーキテクチャを使用すると考えました。しかし、私がosgiを初めて使ったので、私はそれを使うことの長所と短所について全く知らない。誰もがosgiを使用する利点/短所を説明してください、そして、どのような種類のアプリケーションがosgiを使用することによって恩恵を受けることができますか/アプリケーションがそうすることによって得られるものは?osgiを使用してアプリケーションを開発する

ありがとうございました!

答えて

23

OSGiは、モジュラーアプリケーションを構築するために使用される標準です。新しいレベルのモジュール性 - バンドル(別名コンポーネント、モジュール)を追加します。各バンドルには、クラスとインタフェースが含まれており、最も重要なことはしなければならない明示的な状態です:

  • 他のコンポーネントやJavaは、それは、
  • とそれが他のコンポーネントによって使用されるように公開したいパッケージを使用してパッケージが。

技術的な観点からは、バンドルはビット拡張されたjarファイルですMETA-INF/MANIFEST.MFファイルです。上記の情報はすべてMANIFEST.MFファイルに保存されています。

実践的な観点から、この説明には長所と短所の両方があります。私にとって最大の利点は、標準的なアプリケーションよりも、アーキテクチャ、モジュール、およびそれらの間の相互作用について考える必要があることです。これにより、各モジュールが明確に定義されたタスクを担当し、モジュールを再利用できる優れたアーキテクチャが作成される可能性があります。デメリットについては、多くのモジュールを作成すると時々苦しいことがあります。多くのモジュールを持つのは簡単ですが、実際にたくさんある場合は、モジュール間のすべての依存関係を維持するのが難しいかもしれません(依存関係のサイクルはかなり苦しいです)。

OSGiはモジュラーアプリケーションの構築だけの標準ではありません。バンドルが存在し、実行されている環境も指定します。これはあなたが知っておくべきことです.OSGiを使用するときは、特別な環境でアプリケーションを起動する必要があります。この環境(たとえば、Eclipse Equinox)は、アプリケーションの実行を担当します。それはいくつかの可能性を提供します。たとえば、このアプリケーションを停止する必要なく、既に実行中のアプリケーションにバンドルを追加することができます。これは、アプリケーションのタイプによっては本当に重要な要素です(ただし、IMHOでは、これが本当に必要なアプリケーションは多数ありません)。

実際に重要なことは、一部のオープンソースライブラリがOSGiインフラストラクチャと完全に互換性がなく、標準のJavaアプリケーションと同じようにそのまま使用することが難しいことです(OSGiすべてがバンドルでなければなりません)。しかし、人気のあるライブラリの多くはバンドルにまとめられていました。例えば、Springでは多くの人気ライブラリ(ただしすべてではない)を含むbundles repositoryが提供されています。

OSGiは非常に複雑で、いくつかの言葉でその可能性を説明するのは難しいです。私が書いたのは、OSGiのもっとも重要な要素(IMO)です。しかし、OSGIははるかに優れています。バンドルはお互いにイベントを送ることができます、彼らはお互いにサービスを提供することができます。あなたが詳細を知りたいのであれば、チュートリアルを進めることをお勧めします。私はthis one in Java Worldをお勧めします。その後、OSGiについてはthis free e-bookをご覧になることができます(詳細はたくさんあります)。 OSGiに関するすべての詳細は公式仕様書に記載されているかもしれませんが、(少なくとも最初は)hereであることがわかります(ダウンロードする前にライセンスといくつかの法的通知を受け入れる必要があります) 。

要約すると、OSGiはモジュラーアプリケーションを構築する際に便利だと思いますが、これは無料ではありません。あなたが何かをして、あなたに何かをさせることを禁じるかもしれない重い基準です。OSGiの方法

一部SO関連の質問:

+0

お返事ありがとうございました:) – Izza

+0

マイクロサービスの出現で、マイクロサービスはOSGiと比べてどのように優れていますか? – yathirigan

1

この質問に正しく答えるためには、本を書く必要があります。確かに、多くの本がこのテーマに書かれています。本当にOSGiについて知りたければ、そのような本を探すことをお勧めします。

OSGiはJavaモジュラリティフレームワークです。このドメインには信頼できる競争がありません。どんなアプリケーションでもモジュール化が可能ですが、モジュール性は無料ではありません。 1つの巨大なクラスローダーにすべてをスローし、コンポーネントの関係性についてあまり重視しないほうが簡単です。 OSGiを試してみると、Eclipseの一部である優れたPDEツールはEclipseターゲットではないOSGi開発をサポートし、OSGiでの作業がずっと簡単になります。

1

私の個人的な意見は、OSGiが利益よりも多くの痛みをもたらすことです。プラグイン可能なアプリケーションが本当に必要な場合は、OSGiを使い始めることができますが、プラグイン可能な方法でコードを書く必要があります。単純ではありません(eclipseでプラグインをインストールする場合でもEclipseを再起動することをお勧めします。なぜそれがOSGiを使うのか分かりません)

私はOSGiを使って2つのプロジェクトを開発しました。多くの公共図書館をラップする必要があり、すべてをラップすることができないため、プロキシオブジェクトを操作する際にクラスローダーの問題があるため、実行時にClassNotDefoundErrorが発生する可能性があるからです。

私たちがOSGiを使用するプロジェクトで持っているすべてのモジュール性は、OSGiを使って作業するときは誰もあなたに細かいバンドルを書くよう強制しません。バンドル。

コンポーネント間の結合が失われると言うと、spring-coreまたはgoogle-guice依存性注入フレームワークの自動配線を使用して実現できます。

3

私のOSGIでの私の個人的な(2年間の)経験は、技術的な法案が機能上の利点をはるかに上回ることです。

1つのライナーモックを実装するために25個以上のpomファイルを作成/編集する必要があるケースがありました。
デザインは大きな役割を果たしますが、開発者は、顧客が直面している価値に影響を与えないトピック(エイリアンのようなもの)のエキスパートになるのは困っています。
さらに、このアプローチはアジャイルにはうまく対応しません。実際には、それはあなたの主な焦点IMHOについてのすべてです。Waterfall
成果物と建設パターン。

OSGIは邪悪ではありませんが、の場合は、に最適ではありません。

関連する問題