HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

开源文档《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:071626
用户头像

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

关注

评论

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

一文简述:钓鱼攻击知多少

穿过生命散发芬芳

6月月更 钓鱼攻击

一篇文章带你对Java对象创建过程解密

派大星

JVM

flutter系列之:flutter中的Wrap

程序那些事

flutter 程序那些事 6月月更

在线JSON转CSharp(C#)Class工具

入门小站

工具

如何在物联网低代码平台中使用数据字典功能?

AIRIOT

物联网 低代码平台

axios(二)

小恺

6月月更

linux之git入门命令

入门小站

Linux

元素的常用事件

Jason199

js 事件 6月月更

K8S学习笔记--安装Docker环境

IT蜗壳-Tango

IT蜗壳 6月月更

数据库每日一题---第20天:按日期分组销售产品

知心宝贝

数据库 程序员 前端 后端 6月月更

华为云如何实现实时音视频全球低时延网络架构【上】

坚果

6月月更

什么是元数据

奔向架构师

数据仓库 元数据 6月月更

Android 11适配指南之系统相机拍照、打开相册

yechaoa

android 适配 6月月更 11.0

数据科学家是不是特有前途的职业?

袁袁袁袁满

JVM调优简要思想及简单案例-为什么需要JVM调优?

zarmnosaj

6月月更

mysql存储引擎之Myisam和Innodb的区别

乌龟哥哥

6月月更

高效的远程办公经验 | 社区征文

远程办公 6月月更 初夏征文

电商如何借助小程序发力

Geek_99967b

小程序 电商

C语言字符串与内存库函数的介绍与模拟实现

未见花闻

6月月更

使用GetX构建更优雅的Flutter页面结构

岛上码农

flutter ios 前端 安卓开发 6月月更

一篇文章学会er图绘制

工程师日月

6月月更

Java基础:反射机制详解

百思不得小赵

javase 反射机制 6月月更

redis 精讲系列介绍八 - 淘汰策略

Nick

Redis 核心技术与实战 6月月更 redis 底层原理 redis 淘汰策略 redis 精讲

APM 工具 SkyWalking 是什么

耳东@Erdong

监控 Skywalking 6月月更

Java Core 「15」J.U.C Executor 框架

Samson

学习笔记 Java core 6月月更

在线文本过滤小于指定长度工具

入门小站

工具

leetcode 91. Decode Ways 解码方法(中等)

okokabcd

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

怎样能在小程序中实现视频通话及互动直播功能?

Geek_99967b

小程序 小程序容器 小程序营销

【愚公系列】2022年06月 Java教学课程 01-Java语言背景介绍

愚公搬代码

6月月更

Fegin的解析

卢卡多多

OpenFegin 6月月更

为 Serverless Devs 插上 Terraform 的翅膀,解耦代码和基础设施,实现企业级多环境部署(下)

阿里巴巴云原生

阿里云 开源 云原生 Serverless Devs

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