写点什么

开源文档《OSGi 进阶》发布暨作者访谈录

  • 2007-10-14
  • 本文字数:3243 字

    阅读完需:约 11 分钟

OSGi 正在变得炙手可热,无论是 OSGi 与 JSR 277 之争,还是 Struts2 开始使用 OSGi 来完成插件的热部署,都使它越来越频繁地进入开发人员的视线。而近日, Bluedavy 在去年发布了名为《 OSGi 实战》的开源文档后,又发布了此系列的第二篇:《 OSGi 进阶》。InfoQ 中文站就这次发布邀请 Bluedavy 对文档的写作背景、OSGi 的设计理念及当前的应用现状进行了访谈。

在谈到编写第二篇开源文档《 OSGi 进阶》的原因时,Bluedavy 说道:

《OSGi 实战》主要是为了向大家介绍 OSGi 的好处,以及 OSGi 到底是什么,具体怎么去用,目的是为了能吸引更多的人关注 OSGi、了解认识 OSGi; 《OSGi 进阶》则是为了和大家分享基于 OSGi 设计实际的项目 / 产品、集成流行的 Java 框架去实现 B/S、分布式系统、如何将传统的系统重构为基于 OSGi 的系 统等方面的一些经验,希望能让更多的人将 OSGi 应用到实际的项目 / 产品中去。 第一篇 OSGi 实战 Opendoc 发布后,应该说还是起到了一定的效果的,无论是从 javaeye 上的 OSGi 圈子、我个人的 blog 以及我个人的 MSN 上,都有不少的朋友开始讨论 OSGi,尝试 OSGi 应用到实际的项目的可能性,从我 MSN 上一些好友我也了解到,国内已经有些公司开始在商业的产品中应用 OSGi 了。

但是看到那么多的朋友对 OSGi 非常有兴趣,但由于不知道基于 OSGi 怎么去设计实际的项目 / 产品,又或是因为 OSGi 与流行 Java 框架不好集成的原 因,最终放弃了在实际的项目 / 产品中使用 OSGi,这也是促成我编写第二篇 Opendoc 的原因之一,我希望能将大家对于 OSGi 的兴趣转化为真实的使 用;另一方面的原因则是整个业界发展的大趋势,短短的一年间,各大公司、开源项目都公开支持 OSGi,使得 OSGi 进入企业应用领域的步伐比想像中顺利了 很多。

我们知道,模块化的开发方式早已在企业开发中得到了广泛应用,也一直是系统设计时的基本准则。而在 OSGi 中,每一个模块都 对应于自己的单个 bundle,以声明的形式来表示对其他 bundle 中 package 的依赖,或是暴露某些接口以供其他 bundle 调用,从而实现了物 理上的模块隔离。这种方式与传统的模块开发相比其优点在哪里呢?Bluedavy 回答说:

由于 Java 一直以来在物理隔离式的模块化开发 / 部署上都支持的不好,以至于基于 Java 构建的系统都没有做到真正的模块化。在模块化不是物理隔离方式实现的情况下,非常容易出现的现象是模块之间的界限在不知不觉中抹去了,最后整个系统的依赖关系会逐步变的复杂。 一个比较典型的例子:假设在一个留言板系统中,留言列表和新增留言划分为了两个模块,这两个模块是没有强耦合的,但在非物理隔离的模块化实现时,我们很容 易出现的做法就是在留言列表的页面上直接编写一个新增留言的功能链接,其实这也就隐藏式的将这两个模块强耦合在一起了。到了物理隔离的模块化实现时,就会 开始考虑这个问题。

这点就像 Bea microServices 的人的一句话:“Until modularity is not enforced,it is not there”。

在《 OSGi 实战》一书中,Bluedavy 曾经描述过,像 OSGi 这样一个为动态扩充、修改系统功能提供了支持的模块系统可以带来什么样的好处:- 基于 OSGI 的系统,可通过安装新的 Bundle、更新或停止现有的 Bundle 来实现系统功能的插拔。

  • OSGi 有一整套完整的机制去实现动态改变系统行为。

  • 基于 OSGi 的系统不会受到运行在其中的 Bundle 的影响,不会因为 Bundle 的崩溃而导致整个系统的崩溃。

  • 只有在请求发生时 OSGi 才去完全加载、启动相应的 Bundle、Service,保证了系统的高效

  • 规范的、可积累的模块

但是,无论是技术框架的选型,还是架构方案的选择,都不可能只看到其优势所在就简单的做出定论。每一种选择,都需要考虑到是否与既有方案可以顺利结合,应 用环境是否足够成熟,有充分的外界条件支持等等。那么对于 OSGi 来说又是什么样子的呢?Bluedavy 给出了自己的答复:

从应用的架构层面选择的话,OSGi 足够成熟,理由在于目前企业应用领域的关键问题,在 OSGi 中都逐步的有了对应的解决方案,这些解决方案中最有影响力 的当属 Spring 和 OSGi 的结合,Spring-OSGi 使得 OSGi 的应用很容易的获得 Spring 提供的企业应用需求功能的实现的支持。 目前用 OSGi 来做企业应用,应该说技术上的瓶颈已经不多了,只是怎么去充分的发挥 OSGi 的优势,是有一定的挑战的。

记者又请 Bluedavy 就“企业应用的关键问题”和“OSGi 中对应的解决方案”做出更详尽的解释,他说道: > OSGi EEG 小组在总结 OSGi 进入企业应用领域需要解决的问题上列出了这么几点:

  • 分布式系统的支持; 在分布式系统上,目前 SCA 是个好的解决方案,SCA 的实现有 Newton 和 Tuscany,另外就是通过集成 Axis 来通过 webservice 实现分布式的通讯。

  • OSGi 服务的扩展,以支持从外部发布 / 调用 OSGi 服务,同时需要考虑多种语言的支持,而非仅仅是 Java; 这点呢,一方面就得依靠和 Java 流行框架的集成,像 Spring-OSGi 就实现了在 Spring 的 bean 中调用 OSGi 服务,另一方面就得依靠 SCA 了。

至于我们这些程序员在实际的项目 / 产品中可能会碰到的企业应用开发的问题可能会有下面几个:

  • 怎么样把 OSGi 和 Webwork+Spring+Hibernate 这样的架构集成起来。类似 Webwork+Spring+Hibernate 这样的 架构无疑是目前 Java B/S 应用领域最为流行的技术组合拳,而且这样的三者的结合确实基本上解决了企业应用领域的关键需求,例如分布式的调用、事务机制等,如果 OSGi 能和这 样的技术组合拳集成,自然也就使得 OSGi 应用能够应对企业应用领域的需求了,在 OSGi 进阶的 Opendoc 中详细的介绍了 OSGi 与这个技术组合拳的 集成方法,并诞生了一个 OSGi+Hibernate+Spring+Webwork 的脚手架以及基于此脚手架的留言板系统。

  • 传统的系统能不能重构为 OSGi 系统。无论对于项目还是产品而言,如果需要将新的项目 / 产品改变为基于 OSGi 的项目 / 产品,那么就有一个问题就是如何将 在以前项目 / 产品中积累的东西重构为可部署至 OSGi 系统,这相信也是大部分关注的问题,这个问题在 OSGi 进阶 Opendoc 中也以一个实际的例子来进 行了讲解。

  • 既然使用了 OSGi,如果发挥不出它的优势的话,就毫无意义了。OSGi 系统的典型特征是:模块化、动态化和可扩展。要做到这三点从设计 / 实现层面都要进 行把握,在 OSGi 进阶 Opendoc 中也从实际项目 / 产品的角度去介绍了如何去设计、如何去实现,同时也总结了一些 OSGi 的设计模式和最佳实践,使得 大家在应用 OSGi 实现实际的项目 / 产品时充分的发挥 OSGi 的优势。

在自己的实际应用中,Bluedavy 也碰到过一些比较棘手的问题,其中包括:某些 Java 框架依然需要开发人员自己来实现集成;目前 OSGi HttpService 尚不支持 *.action 这样的通配方式的 servlet mapping,对于 filter 也不支持等等。但是最主要的问题还是落在了如何去构建模块化、动态化和可扩展的系统上面。正因为它的重要性,在 《OSGi 进阶》一书中,Bluedavy 用了整整两章的篇幅来论述 OSGi 的设计模式和最佳实践。也许随着 OSGi 的广泛应用,开发人员对于系统设计的认识,也会 提高到一个新的层次。 在访谈的最后,Bluedavy 对 OSGi 目前的应用现状做了总结:

OSGi 在过去的一年中得到了众多企业应用软件领域的商业公司的支持,例如 IBM、BEA、Oracle、SAP、IONA,这些公司都在自己的商业产品 中开始采用 OSGi;而开源领域的则有像 Spring、Struts 2、Newton 这些的加入。无疑 OSGi 将成为企业应用软件领域的重要内容,在此希望国内的同仁们也能更多的来关注 OSGi,并将 OSGi 应用到实际的 项目 / 产品中去。

此外,记者还了解到,OGSi 的官方中文站点(osgi.org.cn)正在筹备建设中,不日即将上线;同时,OSGi 中国 User Group 也获得了 OSGi 联盟授权,成为继日本 User Group、韩国 User Group、法国 User Group 以及西班牙 User Group 后的第五个官方认可的 User Group,负责中国范围内 OSGi 的宣传和推广。可以预见,在不久的将来,OSGi 在国内一定会迎来更加广阔的应用前景。 请继续关注 InfoQ 中文站,我们会为您带来更多关于 OSGi 的精彩报道。

2007-10-14 20:072002
用户头像

发布了 197 篇内容, 共 62.6 次阅读, 收获喜欢 21 次。

关注

评论

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

解决大中型浏览器(Chrome)插件开发痛点:自定义热更新方案——1.原理分析及构建部署实现

梁龙先森

Java chrome 大前端 浏览器 技术方案

从技术到应用实践 揭秘京东区块链布局全景

京东科技开发者

区块链 区块链方案 供应链

LeetCode题解:231. 2的幂,迭代,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

屏读时代,我们患上了注意力缺失候群症

脑极体

TCP梳理总结

江龙

一周信创舆情观察(10.26~11.1)

统小信uos

【得物技术】数据分析 - 生活品类社区内容精选池模型

得物技术

数据分析 得物技术部 得物技术 社区内容 精选池模型

力扣解题:第三题(个人思路整理)

人语驿边桥

力扣

GitHub上超牛的Java进阶教程,汇总Java生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识

Java架构之路

Java 程序员 架构 面试 编程语言

1分钟带你解锁Angular

Leo

学习 大前端 angular

GrowingIO 响应式编程探索和实践

GrowingIO技术专栏

响应式编程

架构师训练营 - 第三周学习总结

joshuamai

啥是数据库范式

Simon

MySQL 数据库 数据库设计

“软件教父”花费20年,教你如何在应用层混迹的风生水起

小Q

Java 学习 架构 面试 应用

这可能是关于编程指南的最实用指南了

华为云开发者联盟

开发者 软件开发 语言

架构师训练营 第三周作业(手写单例模式)

springH₂O

架构训练营

华为发布5GtoB核心网建设白皮书

华为云开发者联盟

5G 边缘技术

LeetCode题解:231. 2的幂,递归,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

一道比较运算符相关的面试题把我虐的体无完肤

Gopher指北

从广西的新基建耕种,读懂一颗名为智能体的种子

脑极体

低代码开发不靠谱?看低代码开发在物联网APP开发中的应用

华为云开发者联盟

技术 软件开发 代码

谈谈敏捷开发概念和迭代开发方案

Philips

敏捷开发 快速开发

MySQL中特别实用的几种SQL语句送给大家

陈哈哈

SQL优化 实用SQl语句 高性能SQL

快快使用ModelArts,零基础小白也能玩转AI!

华为云开发者联盟

人工智能 开发者 开发

架构师训练营第三周课后作业

天涯若海

6年Java开发经验,蚂蚁金服面试3+2次,最终有惊无险通过!(已拿offer)

Java架构之路

Java 程序员 架构 面试 编程语言

《高效程序员的45个习惯:敏捷开发修炼之道》.pdf

田维常

电子书

应用层软件开发教父教你如何重构,资深程序员必备专业技能

小Q

Java 学习 架构 面试 重构

阿里P8大牛精心整理,GitHub上超火的《Java工程师成神之路》从基础,到高级、底层、架构、进阶、扩展,囊括了Java体系内的所有知识点。

Java架构之路

Java 程序员 架构 面试 编程语言

HTTP2协议及websocket协议总结

江龙

干货 | 京东技术中台的Flutter实践之路

京东科技开发者

flutter

开源文档《OSGi进阶》发布暨作者访谈录_Java_李剑_InfoQ精选文章