Java 9,OSGi以及模块化的未来

  关键要点

  Java 9将在2017年发布,一个标志性的特性是新的模块化系统,命名为Java平台模块化系统(JPMS)。本文探讨了它与现有的Java标准组件如何关联起来,以及它对现有的Java标准组件有什么影响。

  自1.0版本以来,Java已经增长了20倍,模块化平台是非常必要的。为了解决这个问题,也曾有过很多失败的尝试。而与此同时,OSGi已经提供应用程序模块化16年。

  OSGi和JPMS在实现细节上有本质上的区别。如果JPMS被当作模块化的通用解决方案,似乎会有严重的缺陷和缺失的功能。

  JPMS的目标是使用起来比OSGi更简单、更容易。但是,让现有的非模块化产品模块化是非常复杂的,而且JPMS在这个目标上似乎没有成功。

  JPMS在Java平台自身模块化方面做得很好,这意味着我们可以为特定的工作构建一个小的运行时环境,它只包含Java平台相关的部分。在应用程序模块化方面OSGi有很多优势。我们已经证明了两者可以结合起来,这看起来是一个成功的方式。

  Java 9将在明年发布,一个标志性的特性是新的模块化系统:Java平台模块化系统(JPMS)。虽然JPMS的细节还没有完全确定,我们已经了解了很多有关它方向性的内容。

  Java已经有一个预先存在的模块化系统,自2000年以来一直以各种形式存在。它就是被称为OSGi的模块化系统,是一个独立于供应商的行业标准。它由OSGi联盟发布,由领先的软件供应商、电信公司和其他组织(包括Adobe、博世、华为、IBM、Liferay、NTT、Oracle、Paremus 以及Software AG)组成。它推进了几乎所有的Java EE应用服务器、最流行的IDE、Web应用程序(像eBay、Salesforce.com和Liferay),并用于政府和军队,如美国空军和联邦航空管理局。

  OSGi是为物联网提供的——OSGi一开始是专为嵌入式设备设计的,那是在很多年前,当时内存和CPU资源明显受到局限。现在设备有了更多的能力。这提供了构建复杂应用程序和解决方案的机会,并催生了蓬勃发展的生态系统,在这个生态系统中组织和个人贡献的软件和硬件元素可以添加到整体解决方案中。这样的生态系统在市场上很广泛,包括互联家庭、车联网、智能城市和工业4.0(IIoT)。网关通常用于传感器和设备之间相互连接,并连接到后端系统。应用程序和服务可以在本地网关和/或云上运行。

  OSGi还提供多种规范启用构建开放的物联网生态系统的基本特性。这些特性包括设备管理、软件配置以及设备抽象,即从底层通信协议归纳设备。在今天,像AT&T、博世、NTT、德国电信、美国通用电气、日立、美诺、施耐德电气等公司都受益于采用OSGi构建物联网的解决方案,并且做了很多年。目前已经有上百万的设备连接采用OSGi和物联网。

  当然,OSGi的用户都很好奇Java 9中新的模块化系统在短期和长期将会如何影响OSGi。

  Java生态系统中很快会出现两个模块化系统,这有技术、政治和商业的原因。本文中,我们避开政治原因,从技术的角度对两者进行比较。我们总结了JPMS和OSGi如何协同工作,思考它们各自的领域是什么以及在崭新的世界中存在什么样的机遇。

  请注意,本文中,我们使用的信息在2016年8月已公开发布。在该规范确定之前一些细节可能会改变。

  背景

  自1990年代末诞生以来Java平台增长显著。综观下载文件的大小,JDK 1.1为10Mb,而Mac OS X下载JDK 8u77却非常大,有227Mb。安装占用的空间和内存需求也有了相应的增加。这些增加是因为增加了新的功能,而且大部分功能是受欢迎并且有用的。然而,每一个新的功能都为不需要这个功能的用户创造了膨胀——没有人会使用平台所有的功能。而且即使已经过时,所有现有的功能都会保留,因为Java管理员提供了令人钦佩的奉献精神——向后兼容性。

  多年来,Java体重的增加并不是一个大问题。它是最流行的企业平台,它的主要竞争对手是微软的.NET,然而.NET也有着相似的轨迹。在当今世界,Java面临不同的挑战。物联网推动了空间占用新一轮的关注,新的、灵活的平台和语言(比如Node.js、Go)都是非常有竞争力的对手。

  安全也是一个大问题:Java攻击引起了组织对安全意识的重视,把它从用户桌面完全移除。如果内部JVM和用户空间应用程序代码之间有更好的隔离,这些攻击是不可能发生的。

  很早之前我们就清楚需要为模块化平台做一些事情了。在2000年中期有一系列失败的尝试,例如,JSR 294和它的“superpackages”,JSR 277的“Java模块化系统”——最终名为Jigsaw的原型项目出现了。这本来是在2011年Java 7中提交的,但被推迟到Java 8再推迟到Java 9。作为一个原型项目,Jigsaw为JPMS规范提供了参考实现。