写点什么

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:44935
用户头像

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

关注

评论

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

如何用Apifox 发送接口请求?

Liam

开发者 测试 后端 开发 Postman

6月月更“粽”头戏,大家一起来参与吧!

InfoQ写作社区官方

热门活动 6月月更

平衡人工智能的性能要求,实现可信AI在银行业务场景的高质量应用

易观分析

人工智能

云原生时代,热门监控工具对比与使用场景分析

云智慧AIOps社区

云原生 监控 Grafana Prometheus 监控宝

小区适合投放自助洗车机吗?

共享电单车厂家

自助洗车加盟 小区投放自助洗车机

是开自助洗车店还是传统洗车店好?

共享电单车厂家

自助洗车加盟 开自助洗车店 传统洗车店

英特尔开源项目推动SYCL标准采用,打破单个厂商封闭生态系统

科技之家

企业的文档管理策略

小炮

文档管理

Scrum实施的8个步骤

爱吃小舅的鱼

Linux 使用 cp 命令强制覆盖功能

AlwaysBeta

Linux 运维

TiDB 查询优化及调优系列(四)查询执行计划的调整及优化原理

PingCAP

末流985,秋招斩获多家大厂offer 经验分享

大数据梦想家

面经分享 大数据开发

Fastjson官方再次披露高危漏洞,包括rocketmq、jeecg-boot等近15%的github开源项目受影响

墨菲安全

安全 idea插件 Fastjson 依赖漏洞检测 墨菲安全

避免惊群以及负载均衡的原理与具体实现

C++后台开发

nginx 负载均衡 后端开发 C++后台开发 惊群

7 款最棒的开源 React UI 库测评 - 特别针对国内使用场景推荐

蒋川

JavaScript react.js 开源 UI 组件库

大数据学习必备 | 推荐几个牛X 的 github 项目,助你事半功倍

大数据梦想家

大数据 学习资料 Github'

深入 HTTP/3(2)|不那么 Boring 的 SSL

SOFAStack

互联网 TLS HTTP3.0 QUIC协议 HTTP API

自助手动洗车设备洗车怎么样?

共享电单车厂家

自助洗车加盟 自助洗车机洗车 自助手动洗车设备

eKuiper 1.5.0发布:实现无缝式工业数据采集+边缘流处理

EMQ映云科技

物联网 IoT emq 开源之夏 5月月更

IoT技术的最后决战!百万大奖究竟花落谁家?

华为云开发者联盟

IoT 华为云 iotda NSBD-IOT

MBTI 剧透人生,你的天选职业是什么?(免费测)

融云 RongCloud

没有店面店铺可以做自助洗车吗?

共享电单车厂家

自助洗车加盟 自助洗车店面

十一、云原生网络微隔离

穿过生命散发芬芳

5月月更 微隔离

「v2.4」千呼万唤的图形化编排,来了!

Jianmu

持续集成 低代码 开发工具 开源项目 节点编排

为什么穷人越穷,富人越富?

大数据梦想家

程序人生

又一国际知名律师事务所选择福昕PDF

联营汇聚

聚焦无障碍阅读,福昕捐出2000套福昕高级PDF编辑器

联营汇聚

模块二

Geek_2ce415

数据行业中的建模是什么?

清林情报分析师

数据分析 行业分析 数据建模 业务思维 模型思维

百度智能小程序巡检调度方案演进之路

百度Geek说

PingCAP Clinic 服务:贯穿云上云下的 TiDB 集群诊断服务

PingCAP

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