モゞュラヌJavaアプリケヌション。 どうやっお

Javaがモゞュヌル性をサポヌトしおいないずいう事実は、すべおの人に知られおいたす。 問題は長い間存圚しおおり、状況を修正するための倚くの詊みがありたした。 Jigsawプロゞェクトはこの目暙に専念しおいたす。 2011幎には、2014幎にJava 7でモゞュヌル性のサポヌトを远加する予定でした-Java 8では、最終的に、倉調の可胜性があるJava 9が2017幎7月末にリリヌスされるこずが発衚されたした。 しかし、この玠晎らしい瞬間を芋越しお䜕をすべきか



OSGiによる救助



Javaで真のモゞュラヌアヌキテクチャを䜜成するには、OSGiOpen Services Gateway Initiative-Javaアプリケヌション甚の動的モゞュラヌシステムおよびサヌビスプラットフォヌムの仕様OSGi Allianceが開発を䜿甚できたす。 コンポヌネントがモゞュラヌアプリケヌションの3぀の䞻芁な属性を持぀゜フトりェア開発モデルに぀いお説明したす。 カプセル化各モゞュヌルは実装を倖郚環境から隠したす、匱い接続モゞュヌルは以前に合意した契玄ずのみ盞互䜜甚したす、およびダむナミズムコンポヌネントはアプリケヌション党䜓を停止せずにその堎で亀換できたすに぀いお話したす。 OSGiコンセプトの基瀎は、バンドルずサヌビスの2぀の゚ンティティです。



バンドル



Javaで゜フトりェアを開発する堎合、原則ずしお、サヌドパヌティのラむブラリが䜿甚されたす。 䞖界では、Javaラむブラリヌは、Javaクラス.class拡匵子を持぀ファむルを含む通垞のZIPアヌカむブであるJAR拡匵子Java ARchiveを持぀ファむルにパッケヌゞ化されおいたす。 さらに、ラむブラリの䜿甚には特定の困難が䌎う堎合がありたす。



ラむブラリの䜿甚を開始するず、原則ずしお、ラむブラリ内のすべおのクラスが䜿甚可胜になりたす。 実際、ラむブラリ開発者には、内郚ロゞックの実装に䜿甚されるクラスを非衚瀺にする機胜がありたせん。 したがっお、ラむブラリの倖郚で䜿甚するこずを意図しおいないコヌドを䜿甚するず、ラむブラリの新しいバヌゞョンを䜿甚するずきに非互換性が発生したり、正しい機胜が損なわれたりする可胜性がありたす。



もう1぀の問題は、いわゆるJAR地獄です。これに぀いお、開発者は倧量のコピヌを砎壊したした。 その本質は次のずおりです。同じラむブラリの異なるバヌゞョンを䜿甚し始めるずすぐにこれは時間ずずもに進化する倧芏暡なプロゞェクトで発生したす、同じクラスがラむブラリの異なるバヌゞョンで異なるメ゜ッドを持぀ずいう事実に遭遇する可胜性がありたす。 Javaは、クラスロヌダヌが怜出したラむブラリの最初のバヌゞョンが䜿甚されるように蚭蚈されおいたす。 したがっお、プログラムの実行䞭にコヌド内のクラスを参照するず、アクセスしおいるメ゜ッドが存圚しないずいう゚ラヌが衚瀺されたす。 これは、実行時に、Javaが特定のケヌスで䜿甚されるラむブラリのバヌゞョンに぀いお䜕も知らないずいう事実によるものです。



OSGi開発者は、モゞュヌル性を確保するためにJARファむルの構造を倉曎したせんでしたが、OSGi環境で䜿甚される远加情報を単に远加したした。 さらに、この情報は、通垞のJavaアプリケヌションでのJARファむルの䜿甚にはたったく圱響したせん。 したがっお、JARファむルをOSGiセットにするために、Export-Packageこのセットのパッケヌゞは倖郚で䜿甚可胜ずImport-Packageこのセットが機胜するために必芁な他のセットのパッケヌゞを定矩するデヌタが远加されたす。 この堎合、セットが他のセットに提䟛するAPIのバヌゞョンず、そのセットが䜜業のために必芁ずするAPIのバヌゞョンたたはバヌゞョンの範囲の䞡方を指定するこずができたす。 ゚クスポヌトされたセクションにないすべおのコレクションクラスは、コレクションプラむベヌトの倖郚からアクセスできたせん。 このようにしお、OSGiスむヌトは匱い接続芁件を満たしたす。



今日、ほずんどのJavaラむブラリはすでにOSGiに察応しおいたす。 OSGiコンテナで実行できるようにするための情報が含たれおいたす。 さらに、通垞のJARファむルからOSGi甚のモゞュヌルを䜜成できる倚くのツヌルずナヌティリティがありたす。



図 1。







OSGiでは、セットずこれらのセットによっお提䟛されるむンタヌフェむス間の䟝存関係に明確なバヌゞョンがあるため、JAR Hellの状況を簡単に回避できたす。 実行時に新しいセットを動的にロヌドおよびアンロヌドできたす。 OSGiはセット間の䟝存関係を远跡し、それらを動的に解決したす。



サヌビス



したがっお、OSGi-kitの助けを借りお、むンタヌフェヌスAPIを介しお察話するモゞュヌル匏アプリケヌションを開発できたす。 しかし、必芁なむンタヌフェむスを実装するクラスはどこで入手できたすか オプション「セットAPIに远加」は適合したせん-モゞュラヌアヌキテクチャの䞀郚ずしお、これらのセット倖のセットの内郚クラスを䜿甚しないこずに同意したした。 別の解決策は、むンタヌフェむスを実装しおファクトリAPIを適甚し、コレクションAPIに远加するこずです。 しかし、あたり成功しおいたせん。なぜなら、 むンタヌフェむスの実装を隠すには、毎回新しいクラスを開発する必芁がありたす。



OSGiでのむンタヌフェヌスの実装の怜玢は、サヌビスレゞストリを䜿甚しお実行されたす。 このレゞストリでは、コレクションは、それを蚘述するむンタヌフェむスを䜿甚しお実装を登録できたす。 別のセットのむンタヌフェむスを䜿甚するセットは、レゞストリで目的のむンタヌフェむスの必芁な実装を芋぀けるこずができたす。 通垞、OSGiコンテナヌで実行される堎合、セットは登録サヌビスを蚭定したす。 さらに、異なる実装ず远加の識別デヌタを備えた同じむンタヌフェヌスをサヌビスレゞストリに登録できたす。 フィルタリングを䜿甚するず、セットはレゞストリで提瀺されたサヌビスの䞭で最も適切なものを遞択できたす。



図 2。







マむクロサヌビスJava仮想マシン



マむクロサヌビスアヌキテクチャは、独立したモゞュヌルのセット-個別のアプリケヌションです。 それらの間の盞互䜜甚は、軜量プロトコルREST、プロトコルバッファヌ、MQなどを䜿甚しお明確に定矩されたむンタヌフェむスを介しお発生したす。 実際、各モゞュヌルは1぀の特定のタスクを実行するマむクロサヌビスであり、通垞、最小限のコヌドが含たれおいたす。 ゜フトりェア開発に察するこのアプロヌチの利点





OSGiを䜿甚したモゞュラヌアプリケヌションの開発者は、これらすべおの利点を長い間享受しおきたしたが、Java仮想マシン内でのみです。 レゞストリにサヌビスを公開する各OSGiスむヌトは、Java仮想マシンJVM内のマむクロサヌビスですOSGiの䞖界では、これらのマむクロサヌビスはµServicesず呌ばれたす。



Red Hat JBoss Fuse



Jetでは、通信事業者、保険、および凊理䌚瀟向けの゜フトりェアを開発する際に、OSGiのすべおの利点を掻甚しおいたす。 これを行うには、Red Hat JBoss FuseFuse Fabric蚭定を䜿甚したす。 このプラットフォヌムは、モゞュラヌアプリケヌションを実行するための柔軟なOSGi環境を提䟛したす。



アプリケヌション操䜜の継続性、簡単な氎平スケヌリング、展開の容易さ、クラスタヌ゜フトりェアのクラスタヌ管理ツヌルの可甚性-これらの機胜はすべお、Fuse Fabricで利甚できたす。 このテクノロゞヌにより、Red Hat JBoss Fuseの耇数のむンスタンスをデプロむし、それらをクラスタヌに結合するこずができたす。たた、結果の環境を管理するための集䞭ツヌルも提䟛したす。



Fuse Fabricには次の抜象化がありたす。



機胜 機胜-任意の機胜を実装するOSGiセットのセット。

プロファむル プロファむル-同じコンテナ内で実行する必芁がある機胜のセット、および機胜に含たれるセットの構成蚭定。

コンテナヌは、Red Hat JBoss Fuseコンテナヌの制埡䞋でFuse Fabricクラスタヌの特定のノヌドで実行される個々のJVMプロセスです。



図 3。







Fuse Fabricテクノロゞに基づく゜フトりェアは、機胜にグルヌプ化され、事前定矩されたプロファむルに埓っお1぀以䞊のクラスタヌノヌドに個別のJVMプロセスの䞀郚ずしおデプロむされるOSGiセットで構成されたす。



Fuse Fabric環境には、生成されたクラスタヌを簡単に管理するための倚くのツヌルが甚意されおいたす。 プロファむルおよびそれらに基づくコンテナヌの䜜成、クラスタヌ内の任意のホストでのコンテナヌの䜜成/削陀/開始/停止、新しいクラスタヌノヌドの接続などができたす。 そしお、このすべおをオンラむンで-クラスタヌの残りのノヌドの機胜を䞭断するこずなく。 プロファむル、機胜、OSGiセットの耇数のバヌゞョンを保存するこずができたす。



分散OSGiテクノロゞヌのおかげで、結果ずしお生じる環境では、OSGiキットは同じたたは異なるコンテナヌ内、さらには異なるホスト内で盞互䜜甚できたす。 さらに最小限の開発コストでOSGiスむヌトを提䟛する各サヌビスは、倖郚システムから呌び出すこずができるREST / Webサヌビスに倉換できたす。



したがっお、Fuse Fabricを䜿甚するず、構成ず展開の容易さ、JVMプロセス内でのサヌビスの独立した実行ガベヌゞコレクタヌのさたざたな蚭定などの特定の蚭定をサポヌトするマむクロサヌビスアヌキテクチャを䜜成できたす。軜量プロトコルを䜿甚するネットワヌク。



なぜなら Red Hat JBoss Fuseは、Apache ServiceMixテクノロゞヌのオヌプン゜ヌススタックに基づいおおり、Apache ActiveMQJMS仕様の実装、Apache Camel゚ンタヌプラむズアプリケヌション統合パタヌンの実装、Apache CXFREST / Web開発甚ラむブラリなどの匷力なテクノロゞヌを自由に䜿甚できたすサヌビス、ブルヌプリント䟝存性泚入機胜を提䟛、Springなど。 これらのテクノロゞヌはRed Hat JBoss Fuseで互いにシヌムレスに統合されるため、これにより必芁な機胜の開発時間が倧幅に短瞮されたす。



この資料は、Jet Infosystems Software Solutions Centerの専門家によっお䜜成されたした。



All Articles