web-dev-qa-db-ja.com

OSGi、Java Modularity and Jigsaw

だから、昨日の朝の時点で、OSGiが何であるかさえ知りませんでした。 OSGiは、私が何度も何度も何度も出現し続ける流行語だったので、最終的にそれをブラッシュアップするための時間を確保しました。

それは実際にはかなりクールなもののように思われるので、私は(記録のために)私がいかなる点でもOSGi対策ではないこと、およびこれはいくつかの「OSGiばかげた」質問ではないことを述べることから始めたいと思います。

結局のところ、OSGiは-基本的に-対処済み JSR 277 on Java Modularityであり、JAR特定のコーナーケースで名前空間の解決とクラスローディングの問題につながる可能性のあるファイル仕様。OSGiは他にも多くのすばらしい機能を実行しますが、私が確認できることから、それが最大の利点(またはその1つ)です。

私にとって-かなり新しい(数年後)Java EE開発者として、2011年に現在Java 7であり、これらのクラスローディングの問題は依然として存在しています。特に、1つのアプリケーションサーバーに何百ものJARがあり、それらの多くが互いに異なるバージョンに依存し、すべてが実行されているエンタープライズ環境では、少ない)同時に。

私の質問:

私がOSGiに関心があるのと同じくらい、そしてそれが自分のプロジェクトに役立つかどうか、またはそれが私のプロジェクトに役立つかどうかを確認するためにそれについて学び始めたいのと同じくらい、ただ座ってそのような大きな何かを学ぶ時間はありません、少なくとも今。

では、これらの問題が発生した場合、OSGi以外の開発者は何をしますか?何がJava(Oracle/Sun/JCP)ソリューションは現在存在しますか?なぜジグソーパズルはJ7から切り取られたのですか? Jigsawが来年J8で実装されるコミュニティはどれほど確実ですか? Javaプラットフォームの一部ではありませんが、プロジェクトのJigsawを入手することは可能ですか?

私がここで尋ねているのは、パニック、陰謀、そして顔の組み合わせです。 OSGiが何であるかがようやく理解できたので、ジグソーのようなものが実現するまでに20年以上かかって、それがリリースからどのようにして缶詰になったのかを "理解"しません。 それは基本的なようです

そして、私は開発者として、私のソリューションがOSGi以外のものであるかについても知りたいです。

また、:これは「純粋なプログラミング」タイプの質問ではないことを知っていますが、いくつかの人があなたの鼻の形を崩す前に、私は(もう一度、記録のために)この質問を故意にSOに出したことを述べたかったです。それは、仲間のSOersを最大限に尊敬しているだけであり、毎日ここに潜んでいるのを見ている "ITの神々"からの建築レベルの答えを探しているからです。

しかし、絶対にinsistする人のために、SO質問はいくつかのコードセグメントで裏付けられています:

int x = 9;

(このOSGi/Jigsaw/classloader/namespace/JAR hell stuffに参加できる人に感謝します!)

95
IAmYourFaja

最初に、ジグソーの主な使用例はJRE自体をモジュール化することであることを理解します。二次的な目標として、他のJavaライブラリおよびアプリケーションで使用できるモジュールシステムを提供します。

私の立場は、のようなものはおそらくJREにのみ必要ですが、他の人が使用した場合に解決すると主張するよりもはるかに多くの問題を作成しますJavaライブラリまたはアプリ。

JREは非常に困難で特殊なケースです。それは12年以上も前のものであり、依存サイクルと無意味な依存に満ちた恐ろしい混乱です。同時に、約900万開発者とおそらく10億実行中のシステムが使用しています。したがって、そのリファクタリングが重大な変更を作成する場合、JREをリファクタリングすることは絶対にできません。

OSGiは、モジュール式のソフトウェアの作成を支援する(またはforcesを支援する)モジュールシステムです。既存の非モジュールコードベースの上に単純にモジュール性を振りかけることはできません。非モジュール式コードベースをモジュール式コードベースにするには、必然的にいくつかのリファクタリングが必要です。クラスを適切なパッケージに移動したり、直接インスタンス化を分離されたサービスの使用に置き換えたりするなどです。

これにより、OSGiをJREコードベースに直接適用することが難しくなりますが、JREのカットダウンバージョンを提供できるように、JREを個別の部分または「モジュール」に分割する必要があります。

そのため、JREコードを分割しながらJREコードを存続させるために、ジグソーを一種の "extreme measure"と見なしています。 notはコードをよりモジュール化するのに役立ちます。また、それを使用するライブラリやアプリケーションを進化させるために必要なメンテナンスが実際に増えると確信しています。

最後に、ジグソーはまだ存在せず、決して存在しない可能性がありますが、OSGiが存在します。 OSGiコミュニティは、モジュール式アプリケーションの開発において12年の経験があります。モジュール式アプリケーションの開発に真剣に関心がある場合、OSGiは町で唯一のゲームです。

100
Neil Bartlett

簡単なことですが、Java)で実際のコンポーネントベースの開発をしたい場合、OSGiは町で唯一のゲームです。

私の意見では、ジグソーパズルは、JDKで実行できることの妥協と、SunとOSGiの連中との以前の悪い関係の組み合わせです。多分それはJava 8で出荷されるでしょうが、私たちは待って見なければなりません。

典型的なエンタープライズ環境で作業している場合、OSGiは万能ではありません。クラスの可視性に関するいくつかのよく知られたライブラリー(Hibernateを参照)が、もはや有効ではないことを前提としているため、クラスのロードがどのように機能するかを理解する必要があります。 OSGi内。

OSGiは好きですが、既存のシステムに改造しようとはしません。また、グリーンフィールド開発の面で長所と短所を比較検討します。OSGiのライフを単純化し、すべてを自分で行うのではなく、ApacheまたはEclipse製品を検討することをお勧めします。

OSGiを実行していない場合、同じライブラリの異なるバージョンに依存しているシステムを思い付いた場合は運が悪かります。問題を回避するには、複数のバージョンのバージョンが必要です。ライブラリは、私にとってはアーキテクチャの「匂い」のようです。

21
SteveD

現在の状況を説明するために「コーナーケース」というフレーズを使用するのが好きです。

jARファイル仕様には、特定のまれなケースで名前空間の解決とクラスローディングの問題につながる可能性のある欠点があります。

とにかく、何年もの間、私は、コードなしでの結果よりもクリーンで、分離され、一貫性があり、より保守可能なコードの作成をサポートし、さらに強化するツールとテクニックに興味を持っていました。テスト駆動設計とJUnitはこのような組み合わせでした。

数か月かけてコードベースの大部分をOSGiに移行した後、OSGiはこの点でさらに優れたツールと言えます。そしてそれこそが、OSGiに移行する十分な理由です。長期的にはそれはあなたに多くのお金を節約します。

そしてボーナスとして、それはあなたにたくさんのクールなことをする機会を与えるでしょう。デモ中に、トラフィックを失うことなく認証モジュールをシームレスにアップグレードして、OAuth ...をサポートすることを想像してください...

14
forty-two