写点什么

OSGi 与 JSR 277 的争论日趋激烈

  • 2007-08-12
  • 本文字数:2490 字

    阅读完需:约 8 分钟

JSR 277 (Java 模块系统)与 OSGi JSR 291 )的争论再次变得白热化, JSR 316 (Java EE 6)的提交又一次引燃了关于 OSGi 与 JSR 277 互相重叠的争论。InfoQ 整理总结了其中的若干观点和论据。

Peter Kriens 写了一篇博客文章讨论 Java EE 6 中对 Profile 的使用,并展示了如何用组件结构来代替模块系统作为 Java EE 6 的基础。Kriens 还质疑了 Java EE 6 规范中对 JSR 277 的使用,他说:

JSR 316 仅仅在规范的需求部分,以一种相当间接的方式提到了 JSR 277。大致上是说 JSR 277 正在制定中,他们将推迟任何决定,直到 JSR 277 完成。看上去颇有道理,因为从编号上看 277 比 291 更老也更成熟?但实际上,277 仍然处在草案复审阶段,而 291 已经最终发布,因为 291 的基础是从 1999 年发布至今,已经经过 4 个主要修订版的非常成熟的 OSGi 规范。那么,应该有别的理由不提 JSR 291 吧?也许 277 提供了 291 缺少的特性?嗯,没有。从 JSR 277 规范的需求看,谁也没法说它的目标比 JSR 291/OSGi 更加远大:没有动态、没有类空间一致性、没有卸载、没有包引用等等。277 的初步草案仍然处在一种过于简单化的程度。即便是 277 唯一比 291 强的 Repository,也仍然有许多晦涩不明之处。JSR 277 最近开放了邮件列表,从里面的讨论中可以看出,似乎他们仍然被一些基本的模块性问题所困扰。不过,幸运的是,JSR 277 专家组已经承诺让 277 的模块系统与 JSR 291/OSGi 互操作。这就消除了选择 OSGi 的最后一丝风险,更不用提今天就可以在各种 VM(从 1.2 到 6,以及嵌入式设备)上运行 OSGi 的额外好处,而 JSR 277 只能运行在 2008 年下半年才会发布 Java 7 上。那么,为什么 JSR 316 要停下来等?我们已经有一个完美的方案,而且 JSR 277 承诺将会兼容?

Alex Blewitt 也质疑了 Java EE 6 选择 JSR 277 的决定

提交的草案声称:

为了更好地支持这个平台在扩展性方面的目标,应该有一个更加宽泛的模块概念。这项工作正由“JSR 277——Java 模块系统”展开,它的目标是 Java SE 7。我们预期 Java EE 7 将建立在这项技术的基础上,因此我们将推迟任何可能与将来的版本冲突的技术规范

也就是说,他们选择了 JSR 277 而非 JSR 291,并且拒绝在 JSR 277 随 Java 7 发布之前考虑任何其它选择。

InfoQ 也询问 Eric Newcomer 是否认为 SUN 应该接受 OSGi:

绝对应该,绝对合理。更重要的问题是关于 Java 的未来,关于 SUN 是会拥抱 OSGi 还是继续对抗,如果他们继续对抗 OSGi,对 Java 又会有什么影响。根据我最近有限的 OSGi 经验来说,它在许多方面都给 Java 带来了显著的改进——模块性、版本、增强的类装载。Sun 投票反对 JSR 291,不过 JSR 291 仍然获得了通过,正式成为 JSE 的一部分。不过这已经表明了 Sun 的立场。JSR 277 是由 Sun 提案的,内容是 Java 模块性,这看起来明显跟 OSGi 重叠。Sun 有过很好的机会拥抱 OSGi 并以之为基础构造 Java 7,不过,虽然没有正式的声明,但看上去他们更倾向于重复 OSGi 的工作而不是拥抱 OSGi。

我期望 Sun 能尽快理性地对待 OSGi。不过,也许 Sun 继续站在 OSGi 的对立面反而更好,因为至今 OSGi 都发展得很好。

Hani Suleiman ,JSR 291 专家组的成员之一,对这场争论有不同看法。在回答关于 JSR 277 和 OSGi 有什么共同基础时,他说:

[……]JSR-277(在某种程度上)是一个共同的基础。它从 JDK 这一面着手解决问题,这让 OSGi 和其他类似方案(Maven、Ivy 等)的任务变得更加容易。组件包(Bundle)/ 模块成为 JVM 层次的一等公民。除此之外,(OSGi 或其它)框架可以按照自己的意思添加任何增值功能。277 并没有限制。OSGi 支持者们感到不高兴只是因为基础标准用的不是他们的实现,而且还考虑了很多其它方面的东西。

用 Hibernate 来打比方,请想象这样的情形:JBoss 一直攻击 JPA 规范,说它是重新发明轮子,所有人都应该把 Hibernate 当作标准。这就是 OSGi 支持者们正在做的。

其他人,如 Neil Bartlett ,也就 JSR 277 专家组的讨论内容提出了他们的担心

请看看 JSR 277 的专家组邮件列表,它已经向公众开放(虽然是只读的)。从这些讨论来看,很难认为他们有倾听两位 OSGi 专家(Glyn Normington 和 Richard Hall)的意见。在 JSR 277 草案的规范定义和应用举例中,有很多地方跟 OSGi 是不可调和的:Sun 拒绝学习任何 OSGi/JSR 291 的经验。OSGi 支持者们并不是因为我们最中意的模块系统没被选中就大发牢骚。这太孩子气了。我们鼓噪是因为原则问题,JSR 277 这个模块系统正在迈向失败!如果在 JVM 里绑死了一个残缺的模块系统,这会给整个 Java 社区造成巨大的破坏。

Chris Custine 从另一个角度看这场争论的起源:

我认为 Sun 和 OSGi 的激烈冲突纯粹是关于控制权和许可证的政治斗争。根本和技术无关!Java 社区的政治又一次无视了每个理智的人都具备的常识和逻辑。我一向非常期待 Java 能够再次复兴它在创新和进化上的能力,但正是这些东西让我担心……

Glyn Normington ,JSR 277 专家组成员和 JSR 291 的规范带头人,试图谨慎地表达他的观点。除了两者的特性对照,Normington 还就争论中涉及的问题写了一篇详细的介绍。他解释说“这两项JSR 的目标是非常不同的,虽然背后的概念很接近。JSR 277 和294 是在Java SE 平台之中加入基本支持;而JSR 291 是纯Java 的,它建立在Java 平台之上”。

Normington 认为在 JSR 277 中重用 OSGi 并不容易,他也讨论并推翻了放弃 JSR 277 的想法,最后提出了他认为最合适的解决方案:

最佳方案很清楚:JSR 277 应该接受 JSR 291,为此应该在 JSR 294 里加强语言和 VM 上的支持,并且加入 JSR 277 的 Repository 架构。这样可以让 JSR 277 的进程提前数年,还保证了 JSR 277 和 JSR 291 之间完美的互操作性。但要想实现这个最佳方案,需要 Sun 转一个 180 度的大弯。也许,只是也许,Sun 为了保证 Java 的成功,终究会做这件事。也许,只是也许,将来 Java 社区可以回顾今天,并且模仿丘吉尔的话说:“在穷尽了所有选择之后,总是可以指望 Sun 做正确的事”。

社区里面对于什么是这个困境的最佳解决方案肯定也是争论不休——您的看法呢?

查看英文原文: OSGi and JSR 277 debate continues to grow

2007-08-12 22:44943
用户头像

发布了 225 篇内容, 共 63.7 次阅读, 收获喜欢 50 次。

关注

评论

发布
暂无评论
发现更多内容

模块五作业

Elvis FAN

手机影像内卷几时休?

脑极体

HotSpot JVM 「02」Java Object Layout

Samson

学习笔记 hotspot 6月月更

聊聊我的远程工作体验 | 社区征文

Nick

远程办公 初夏征文 高效办公 WLB 在线会议

2022年,中轻度游戏出海路在何方?

Geek_2d6073

flutter系列之:flutter中的flow

程序那些事

flutter 程序那些事 6月月更

# 补齐短板-开源IM项目OpenIM关于初始化/登录/好友接口文档介绍

Geek_1ef48b

Maven的安装使用

zarmnosaj

6月月更

微博评论高性能高可用架构

intelamd

K8S学习笔记--一起来看容器的本质

IT蜗壳-Tango

IT蜗壳教学 6月月更

牛客java选择题每日打卡Day3

京与旧铺

6月月更

在线文本数字识别列表求和工具

入门小站

工具

疫情期间居家办公的总结体会 |社区征文

三掌柜

初夏征文

linux之git高级命令

入门小站

Linux

架构实战营模块五作业

融冰

Prometheus 2.34.0 新特性

耳东@Erdong

release Prometheus 6月月更

亿级月活全民K歌Feed业务在腾讯云MongoDB中的应用及优化实践

杨亚洲(专注MongoDB及高性能中间件)

MySQL 数据库 mongodb 分布式数据库mongodb NoSQL 数据库

LabVIEW Arduino TCP/IP远程智能家居系统(项目篇—5)

不脱发的程序猿

物联网 传感器 LabVIEW Arduino 远程智能家居系统

leetcode 1143. Longest Commom Subsequence 最长公共子序列(中等)

okokabcd

LeetCode 动态规划 算法与数据结构

通过Rust语言计算加速技术突破图片识别性能瓶颈​​

宇宙之一粟

rust 6月月更

简析攻防演练中蓝队的自查内容

穿过生命散发芬芳

6月月更 攻防演练

TopoLVM: 基于LVM的Kubernetes本地持久化方案,容量感知,动态创建PV,轻松使用本地磁盘

大卡尔

Kubernetes 云原生 6月月更

获取Windows操作系统的语言版本

dvlinker

操作系统语言 UI Language MSDN

Flutter TextField详解

yechaoa

flutter 6月月更 TextField

【题解】剑指 Offer 15. 二进制中1的个数(C语言)

未见花闻

6月月更

物联网协议的王者:MQTT

wljslmz

mqtt 6月月更

数据治理啥都干

奔向架构师

数据治理 数据资产 6月月更

对象的访问机制及其他

Jason199

js 原型链 6月月更

我的第一个Vue项目-Demo

Python研究所

6月月更

架构实战营毕业设计

KennyQ

gm

国内首款开源 MySQL HTAP 数据库即将发布,三大看点提前告知

StoneDB

MySQL #数据库 #开源

OSGi与JSR 277的争论日趋激烈_Java_Ryan Slobojan_InfoQ精选文章