速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

OSGi 适合作为 Java 中间件的基础么?

  • 2010-11-29
  • 本文字数:1694 字

    阅读完需:约 6 分钟

OSGi(JSR 8)工作组成立于 1997 年,主要关注嵌入式 Java,以支持嵌入式软件的模块化升级。在成功解决了 Eclipse 插件不可避免的依赖关系之后, OSGi 成为主流。大概在 2005 年,好几种方法都开始利用装配机制和定义良好的依赖关系在企业Java 中引入更进一步的模块化,其中包括 Spring 服务组件体系架构,而 EJB 却慢慢消失了。现在,大多数企业 Java 厂商都在 OSGi 的基础上重写了他们的中间件。

但 OSGi 技术也让很多人觉得懊恼,MuleSource 的创始人 Ross Mason 前几天就在他的博客上毫不掩饰地对此发表了议论。

OSGi 想要改变一切,依赖关系会完全隔离(不再受制于冲突的依赖关系版本),而且会严格要求 Bundle 彼此可见。和很多人一样,我就这样买了 OSGi 的账,让我们的工程人员改造 Mule、让它支持 OSGi。

我们的团队有好几个月都在 Manifest 上扯皮、打包自己的 Bundle、无休止地摆弄构建,OSGi 的优势在这之后变得越来越弱。我们认同“不劳无获”,但后来这却成了作茧自缚。

Ross 的工程团队不知道如何向中间件开发人员隐藏 OSGi 的复杂性。他认为这个问题是由 OSGi 的起源——嵌入式——造成的。

OSGi 对中间件厂商来说是个很棒的规范,……但 OSGi 绝不是为了应用开发人员的需求才创建的。它的起因是,在用户不干预的情况下远程更新部署在机顶盒里的软件。OSGi 对这类软件的部署来说是个很好的规范,因为只有中间件厂商才需要处理 Bundle 的部署。

模块化和版本化是中间件项目的两个核心问题。服务实现经常会发生变化(有时每个季度就会改变一次),而大型组织过去也常把所有的服务部署在一个 ear 文件中,每过三个月,就算 ear 中的很多内容从未发生变化、也不依赖于新的或更新过的服务,消费者和服务提供者还是要进行一次大规模的同步,更别说还要一直测试所有的服务了。有人可能会说, 缺少模块化和版本化正是 SOA 失败的原因所在。Ross 补充说:

OSGi 承诺会对软件堆栈进行模块化,并让中间件基础设施即插即用。遗憾的是,有些 Bundle 就没有兑现这样的承诺,这些 Bundle 跨容器之后就不能以相同的方式正常运行了。

Ross 认为 OSGi 背后的原则正好适用于永久异构的堆栈。但他说:

既然 OSGi 现在主要针对普通的应用开发,那就要重新思考一下它的用户交互部分。从实际情况来说,不用 OSGi 也可能在 JVM 上做到模块化和热部署,但 OSGi 日常开发的痛苦却比它具备的优势多多了。

Neil Bartlett 对 Ross 作出了如下的回应:

bnd 之类的工具已经对开发人员隐藏了 OSGi 的细节。我认为现在的问题是,基于 OSGi 进行开发的替代方法和工具过于泛滥。我仍然相信,不用 OSGi 进行日常 JVM 开发会比任何短期利益都要痛苦……你上次手工编写.class 文件是什么时候呢?也许你永远没手工写过,只是编译 Java 源文件来生成。OSGi 的 MANIFEST 也是类似的内容,它应该是类编译器工具的输出。

Joe Sampson 从测试和构建的角度分享了他使用 OSGi 的经验,这些经验都是他发现不太容易使用的部分。Hani Suleiman 指出:

OSGi 在概念层次上是个很好的模型,只是被那些本身不支持它的语言给拖累了。大家不愿意使用不支持 OSGi 的语言,这就意味着 OSGi 永远都是个令人讨厌的笨拙的框架,没有人会真正喜欢用它(据我所知,如果你经常使用 OSGi,那你的体验显然会不一样)。

Richard S. Hall 也提出了一点儿忠告:

如果你开始使用 OSGi,期望所有遗留的 JAR 包都能正常工作,还想尝到模块化的甜头,那你还不如不尝试。这跟二十世纪八十年从 C 切换到 C++ 有几分相像,那时人们希望所有内容都能自动变成面向对象的。

WSO2 的 CTO Paul Fremantle 在给Ross 的回应中解释到,WSO2 Carbon 不仅是基于OSGi 构建的,还完全向开发人员隐藏了OSGi 的细节。Paul 承认这并不容易,但用自己的构建方式实现模块化、版本化和配置却要更难一些。

你对OSGi 持什么看法?你有没有遇到什么困难?OSGi 对你来说是透明的么?你的中间件是否充分模块化,且支持一流的版本控制策略?就像Hani 所指出的,现代架构的核心问题往往是缺少语义、架构的语义与底层编程语言的语义不匹配,难道我们就要因此将这个架构打入地狱么?

查看英文原文: Is OSGi the Right Foundation for Java Middleware?

2010-11-29 04:544068
用户头像

发布了 151 篇内容, 共 62.2 次阅读, 收获喜欢 18 次。

关注

评论

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

C#/VB.NET 设置Word文档段落缩进

在下毛毛雨

C# .net word文档 段落缩进

盘点适合中小企业的文档管理工具

Baklib

优秀的产品手册有助于留住你的客户

Baklib

重拾面向对象软件设计

阿里巴巴中间件

阿里云 技术 中间件 技术代码

数字藏品系统开发,NFT数字藏品开发说明

开源直播系统源码

软件开发 NFT 数字藏品 数字藏品软件开发 数字藏品系统

2022 云原生编程挑战赛启动!看导师如何拆解边缘容器赛题?

阿里巴巴中间件

阿里云 云原生编程挑战赛

极狐GitLab Helm Chart 已上线,玩转云原生极狐GitLab!

极狐GitLab

DevOps gitlab 云原生 Helm Kubernetes, 云原生, eBPF

落地好OKR的8大关键步骤及常用辅助工具

爱吃小舅的鱼

OKR

中移链DDC-SDK技术对接全流程(一)

BSN研习社

建木持续集成平台v2.5.4发布

Jianmu

DevOps 持续集成 gitops 持续部署 Gitea

看了深入Java虚拟机:JVMG1GC的算法与实现文档,我悟了

程序知音

Java JVM 垃圾回收 java架构 后端技术

​孟子轻量化技术迈上新台阶:登顶 ZeroCLUE 和 FewCLUE 榜单,已开源并提供 SDK

澜舟孟子开源社区

人工智能 自然语言处理 后端 大规模预训练模型

干货|为什么说开源基金会的选择很关键?(下)

Orillusion

开源 WebGL 元宇宙 webgpu web3d

浅谈 SAP ABAP 系统里的 ALV 输出方式实现

汪子熙

前端开发 SAP abap 9月月更 ALV

Apache Kyuubi 在小米大数据平台的应用实践

网易数帆

Java hive Apache Spark Thrift kerberos

了解数字机器人最新发展动向,不要错过华为数字机器人秋季发布会​

王吉伟频道

RPA 机器人流程自动化 智慧政务 机器人开发 华为数字机器人

使用FeatureAbility模块启动其他Ability

白晓明

OpenHarmony应用开发 FeatureAbility

设计模式的艺术 第二十一章备忘录设计模式练习(设计一款RPG网游,为了给玩家提供更多方便,在游戏过程中可以设置一个恢复点,用于保存当前的游戏场景。如果在后续游戏过程中玩家角色“不幸牺牲”,可以返回到先前保存的场景,从所设恢复点开始重新游戏)

代廉洁

设计模式的艺术

数据赋能智慧重庆,巴适得很!

云计算

基于预训练模型的金融事件分析及应用

澜舟孟子开源社区

人工智能 自然语言处理 金融科技 大规模预训练模型

主流定时任务解决方案全横评

阿里巴巴中间件

阿里云 云原生 定时任务

到底什么样的数字化才是企业需要的?用2个数字化案例告诉你

优秀

数字化转型

在数字时代,如何选择企业的知识管理软件

Baklib

高性能对象池实现

C++后台开发

后端开发 高性能服务器 内存池 对象池 C++开发

搭建自己的以图搜图系统 (一):10 行代码搞定以图搜图

Zilliz

Python 机器学习 深度学习 相似度分析 以图搜图

百余位顶级投资人齐聚无锡,DEMO CHINA创新中国峰会即将揭幕

创业邦

预训练模型在金融 NLP场景下的应用

澜舟孟子开源社区

人工智能 自然语言处理 大规模预训练模型

【8.26-9.2】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

SpringCloud 注册中心(Nacos)快速入门

nacos SpringCould 9月月更

当你的老板站在你背后,看你处理故障......

嘉为蓝鲸

运维 IT 故障 上班

Java编程之语法结构

魏铁锤

OSGi适合作为Java中间件的基础么?_Java_Jean-Jacques Dubray_InfoQ精选文章