OSGi应用程序如何在Java9上工作?

OSGi应用程序如何在Java9上工作?,java,osgi,java-9,Java,Osgi,Java 9,我试图理解OSGi应用程序在Java9中是如何工作的,假设OSGi包不是JPMS模块(据我所知,仍然没有解决方案表明OSGi包可以同时作为JPMS模块用于生产)。我有几个问题: 我是否理解所有OSGi应用程序都是一个未命名的模块 如果#1是,那么Bundle.update()如何工作?捆绑包是否重新加载到未命名模块 如果我理解错了,请解释一下主要原理。OSGi使用类装入器隔离捆绑包,并在Java 9上继续这样做。由于每个JAR都是由一个单独的类装入器装入的,因此每个JAR都会在其自己的未命名模块

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

  • 我是否理解所有OSGi应用程序都是一个未命名的模块
  • 如果#1是,那么
    Bundle.update()
    如何工作?捆绑包是否重新加载到未命名模块

  • 如果我理解错了,请解释一下主要原理。

    OSGi使用类装入器隔离捆绑包,并在Java 9上继续这样做。由于每个JAR都是由一个单独的类装入器装入的,因此每个JAR都会在其自己的未命名模块中结束。这意味着OSGi实际上忽略了JPM,并继续像Java 9之前一样工作。

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

    OSGi只使用已发布的JavaSEAPI,因此将在Java9上保持不变。此时它不会与JPMS模块交互,这将适用于所有其他Java软件。在某个时候,OSGi专家组可能会为JPMS模块和OSGi捆绑包之间的互操作性制定一个规范,但这是为了将来

    要回答您的具体问题:

  • 是的,OSGi捆绑包将映射到JPMS术语中的一个或多个“未命名”模块。同样,这正是Java9为所有其他Java应用程序保留向后兼容性的方式

  • Bundle更新的工作方式与18年来的工作方式相同。为包提供的类加载器被释放,并创建一个新的类加载器来加载更新类


  • 仅供参考,年的JPMS提案明确承认了OSGi的价值,并表示打算让OSGi继续在Java9下工作。引用第2.5节:OSGi的生命周期和动态服务注册设施对某些复杂的应用程序很有用,但超出了上述需求的范围。那些需要这些工具的人仍然能够在JavaSE9实现之上运行OSGi。