OSGi应用程序如何在Java 9上运行?

时间:2017-09-17 11:17:49

标签: java osgi java-9

我试图理解OSGi应用程序如何在Java 9中工作,假设OSGi包不是JPMS模块(据我所知,仍然没有OSGi包可以同时用于生产的JPMS模块的解决方案)。我有几个问题:

  1. 我是否理解所有OSGi应用程序都是一个未命名的模块?
  2. 如果#1是,那么Bundle.update()如何运作?捆绑包是否重新加载到未命名的模块?
  3. 如果我理解错误,请解释主要原则。

2 个答案:

答案 0 :(得分:19)

Java SE 9保证了所有符合标准Java SE库的应用程序和库的持续兼容性。

OSGi仅使用已发布的Java SE API,因此将继续在Java 9上保持不变。它目前不与JPMS模块交互,这将是所有其他Java软件的情况。在某些时候,OSGi专家组可能会为JPMS模块和OSGi包之间的互操作性制定规范,但这是未来的。

回答您的具体问题:

  1. 是的,OSGi包将以JPMS术语映射到一个或多个“未命名”模块。同样,这正是Java 9保留所有其他Java应用程序向后兼容性的原因。

  2. 捆绑更新的工作方式与其工作18年相同。为软件包提供的类加载器已被处理,并创建了一个新的类加载器来加载更新类。

答案 1 :(得分:8)

OSGi使用类加载器来隔离包,并继续在Java 9上执行此操作。由于每个JAR都由单独的类加载器加载,因此每个JAR都以其自己的未命名模块结束。这意味着OSGi实际上忽略了JPMS并继续像Java 9一样工作。