web-dev-qa-db-ja.com

OSGiアプリケーションはJava 9でどのように機能しますか?

OSGiアプリケーションがJava 9でどのように機能するかを理解しようとしています(OSGiバンドルがJPMSモジュールではないと仮定しています)(OSGiバンドルが同時にJPMSになる可能性があるという解決策がまだないことを知っている限り)生産のためのモジュール)そして私はいくつかの質問があります:

  1. すべてのOSGiアプリケーションが1つの名前のないモジュールになることを正しく理解していますか?
  2. #1が「はい」の場合、Bundle.update()はどのように機能しますか?バンドルは名前のないモジュールにリロードされますか?

私がすべての間違いを理解している場合は、主な原則を説明してください。

14
Pavel_K

Java SE 9は、標準のJava SEライブラリに準拠するすべてのアプリケーションとライブラリの継続的な互換性を保証します。

OSGiは公開されたJava SE APIのみを使用するため、Java 9で変更なしで動作し続けます。現時点では、JPMSモジュールとは相互作用しません。他のすべてのJavaソフトウェアの場合。ある時点で、OSGiエキスパートグループがJPMSモジュールとOSGiバンドル間の相互運用性の仕様を作成する可能性がありますが、それは将来のことです。

特定の質問に答えるには:

  1. はい、OSGiバンドルは、JPMS用語で1つ以上の「名前のない」モジュールにマップされます。繰り返しますが、これはまさにJava 9が他のすべてのJavaアプリケーションの下位互換性を保持する方法です。

  2. バンドルの更新は、18年間機能していたのと同じように機能します。バンドルに提供されているクラスローダーは破棄され、更新クラスをロードするための新しいクラスローダーが作成されます。

19
Neil Bartlett

OSGiはクラスローダーを使用してバンドルを分離し、それを継続しますJava 9.各JARは個別のクラスローダーによってロードされるため、それぞれが独自の名前のないモジュールになります。つまり、OSGiは事実上無視します。 JPMSは、以前と同じように機能し続けますJava 9。

8
Nicolai