写点什么

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

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

关注

评论

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

终于搞懂了Python模块之间的相互引用问题

华为云开发者联盟

Python 路径 代码 模块

天天向上跑分模式介绍开发

luluhulian

工业绿色哪家强?3D可视化盾构机构建隧道,推动设备预测性运维

一只数据鲸鱼

物联网 数据可视化 绿色交通 绿色工业 盾构机

深度集成 Flink: Apache Iceberg 0.11.0 最新功能解读

Apache Flink

flink

机器学习笔记之:Matrix Vector Multiplication

Nydia

28天写作复盘

一笑

28天写作

浪潮云洲工业互联网平台创新实践,受权威机构关注!

工业互联网

2021年的十五个DevOps趋势预测

禅道项目管理

DevOps 微服务 自动化 趋势

看KubeEdge携手K8S,如何管理中国高速公路上的10万边缘节点

华为云开发者联盟

Kubernetes 微服务 kubeedge 边缘

养成好习惯,需要的不只是意志力

Justin

习惯养成 碎碎念 28天写作

面试时遇到一致性哈希算法这样回答会让面试官眼前一亮

中间件兴趣圈

负载均衡 面试 一致性哈希

长篇总结之JavaScript,巩固前端基础

我是哪吒

JavaScript 程序员 面试 大前端 2月春节不断更

IDEA永久注册码来了!!!(支持2020.3.1版本)

程序员生活志

IDEA

CDN加速原理的那些事

“嗖”一下28 天过去啦,我们都在交作业!

李忠良

28天写作

CSS开发过程中的20个快速提升技巧

华为云开发者联盟

CSS

目前的区块链IPFS矿机模式交易系统开发的简单解析

v16629866266

怎么一本正经地秀技

codevald

Java jdk

有用的信息安全资质查询网站大全

石君

信息安全 28天写作

智能汽车颠覆世界!(28天写作 Day28/28)

mtfelix

28天写作 智能汽车 未来世界

并发队列:PriorityBlockingQueue和DelayQueue案例使用

叫练

并发编程 队列 优先级队列 条件队列 并发队列

【无偿分享】史上最全Python学习大礼包

sum56

Python 学习 学习方法 python 爬虫 资料整理

一款基于 Web 的通用数据管理工具(转载)

BinTools图尔兹

数据库 运维 开发工具 dba 数据管理工具

谈谈我所理解的科幻「-28/28」

道伟

28天写作

redis分布式锁的这些坑,我怀疑你是假的开发

华为云开发者联盟

redis 分布式 分布式锁 服务器 value

使用V8和node轻松profile分析nodejs应用程序

程序那些事

性能优化 Profile nodejs 性能分析 程序那些事

程序员成长第四篇:程序员的职业天花板

石云升

28天写作 2月春节不断更 职场天花板

下不了的开人的手

Ian哥

28天写作

关于京东技术,你想了解的都在这里丨征文活动获奖及优秀专栏推荐

京东科技开发者

京东 征文大赛

MyBatis入门

小马哥

Java mybatis 七日更 2月春节不断更

28天写作

lidaobing

28天写作

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