基于OSGi的企业级开发框架实践——序篇

标签: osgi 企业 开发 | 发表时间:2013-02-15 00:15 | 作者:jacktan
出处:http://blog.csdn.net

OSGi就好比达摩克利斯之剑一般,在其强大而锋利的背后却隐藏着让人窒息的危险。我的形容好像有点夸张,不过在现实中大多数的研发团队基本上都认为OSGi并非像各类评论文章中介绍的那样光彩熠熠,而更多的像是食之无味,弃之可惜的鸡肋。诚然,我不能强迫每个人都接受我的观点,在每个项目中始终不渝的实践OSGi。但是做为一项已经存在了10年以上的成熟技术,为什么会被如此的抵触而未被广泛的应用,这确实是我应该去探究其原因的。

从OSGi的出身我们不难发现,其应用领域最初是针对嵌入式设备的,OSGi的全称为:Open Service Gateway Initiative,最初的目的是为各种嵌入式设备提供通用的软件运行平台。当然随着技术的不断进步和演变,Java平台的不断完善,OSGi技术也被运用到了其他的研发领域,比如Eclipse IDE。

J2EE和OSGi的结合似乎也是理所当然的事情,然而越是看上去合乎情理的事情,却越是前途坎坷。由于OSGi本身的一些特性导致其在J2EE企业级开发领域尤其是在WEB研发领域存在着一些先天的不足。这里先来讲一个故事(这里的故事可不是Scrum中的user story,哈哈):在我参与的一个系统项目中,做为架构师,我毫不犹豫的选择了OSGi作为系统的技术底层框架并用一些听起来非常令人信服的理由说服了项目组的其他干系人(我承认我的选择不是百分之百的正确,你可以认为我是青春期的冲动),但是问题很快的来到了,我们的UI设计师在调试WEB模块中的JSP页面时发现了问题——由于OSGi的资源管理特性,导致每次JSP页面上的修改都要重启WEB模块,而不是像之前在SSH框架中的那样所改即所见(也无需重启Servlet容器)。很快UI设计师就开始抱怨,为什么修改一个简单的HTML标签都要执行一次重启命令,这将令UI设计师的工作效率大大降低。做为架构师的我当然要负这个责任,因为是我的“固执”导致了问题的发生,我应该为这个问题所造成的损失而买单。我面临的选择是:要么放弃OSGi重新回到SSH上,要么找到解决问题的方法。由于项目已经进行到了中途,放弃将是代价昂贵的,所以我选择了寻找问题的解决方法。经过不懈的努力最后终于证实问题的根源是OSGi中Bundle的生命周期特性所导致,当Web Bundle启动时事先会加载所有的JSP页面资源。所以在运行时修改的JSP页面并不会立即反映到已加载到OSGi容器中并处于激活状态的bundle中,必须要重启该bundle才能重新加载修改后的JSP资源。解决这个问题就是要解决如何的动态加载JSP资源,这就涉及到要侵入bundle的生命周期。最后由于UI设计师的强烈抵制以及项目进度的制约,我并没有采用修改Bundle生命周期的方案,而是采用另外一种更加重型的折中方案(该方案实现比较简单快速),以此缓解UI设计师的愤愤不平(最终UI设计师又重新回到了她所熟悉的SSH下的工作方式)。不过正是因为采用了这种重型的折中方案,使我发现了OSGi在企业级开发架构中另外一种UI和后端服务分离的新思路,正所谓塞翁失马,焉知祸福。这个事例只是我在OSGi项目中遇到的一个非常小的问题,之后又遇到了许多各式各样的奇怪问题,最终所有问题都得到了圆满的解决,但是这也证实了,为什么会有那么多的研发团队在项目调研之初会信誓旦旦的宣称将使用OSGi来实现项目,而到了实际实施中又不得不放弃的窘境。的确OSGi在企业级研发中存在着诸多的问题,这也是我为什么要写这篇冗长文章的原因,我将通过我的实践经验,来为大家介绍一套行之有效的基于OSGi的企业级开发框架!

纵观当今天下,我唯一比较熟悉的最成熟而且是比较早运用OSGi技术的组织莫过于alipay了(当然也有其他的一些银行研发团队在实践)。不过alipay的OSGi是一种伪OSGi,因为他们系统中的所有bundle并不是真正的classloader级别的隔离,而只是Spring上下文的隔离,即一个bundle一个ApplicationContext。而不是一个bundle一个classloader并且一个ApplicationContext。所以我称之为伪OSGi。虽然alipay的SOFA是一个伪OSGi的运行时开发框架,但现实中的一切都证明了它是成功的(挺过了各种类型的大促,例如双11等等)。SOFA本身也会不断的自我成长,会变得更加的完善和可靠。这里我不是在推销alipay的SOFA框架,只是想证明一点,OSGi是适合J2EE企业级开发的,关键是如何的用好它——这把达摩克利斯之剑!

我个人认为,要成为一款优秀的OSGi开发框架应该具备如下要素,才能称之为OSGi Framework:

1.开发框架必须为开发者提供所有的基础设施,而且不能与应用程序的业务逻辑产生耦合;

2.开发框架必须提供一套代码模板,减少开发人员的代码量,让开发人员将关注点集中于业务逻辑模型的设计;

3.开发框架必须提供一套助手或是工具,避免开发人员重复造轮子;

4.开发框架必须提供一套有效的集成测试工具,简化开发人员的测试工作;

5.开发框架必须提供一套自动化的打包部署方案,简化应用程序的发布和部署;

6.开发框架必须被设计成高扩展性,方便开发人员的个性化扩展;

7.开发框架必须被设计成高可靠性和高维护性,能够方便开发人员排查错误,至少是报的错误能让开发人员看懂;

8.开发框架必须提供翔实的开发手册,帮助开发人员快速的熟悉了解框架的运行机制和组织结构;

当然,还有一些我尚未想到的要素,希望读者可以补充之。

好吧,序篇就写到这里吧。我是一个纯粹的实用主义者,不会因为时髦的前沿技术而去冒险。每当我选择一项技术前,我都会反复的问自己,这是我需要的东西的吗?如果我使用了它,它会为我带来利益吗?虽然有些事情只有通过自己的实践才会知道东西的好坏,但是并不是每一件事情都需要自己亲历亲为,因为在当今时代中,我们更需要站在巨人的肩膀上来完成我们自己的任务,这样我们会用更快的速度实现我们想要的结果。我承认我自己是很难做到这点,重复造轮子的冲动每每的让我热血沸腾,只是要证明别人能做到的,我自己也能做到而且做的更好。重复造轮子并不是坏事,只是说重复的造重复的轮子是没有意义的,但是重复的造出更好的轮子,那又何乐而不为呢?因为更好的轮子能够带领我们更好更远的前进。

下一篇是扫盲篇《OSGi与Spring DM技术分享》,引用的是2010年自己写的一篇培训文档。虽然网上已经有很多类似的文章,但是这个重复的轮子或许会让你有意想不到的收获。

作者:jacktan 发表于2013-2-15 0:15:42 原文链接
阅读:77 评论:0 查看评论

相关 [osgi 企业 开发] 推荐:

基于 OSGi的企业级开发框架实践——认识OSGi和SpringDM

- - CSDN博客架构设计推荐文章
OSGi——Open Service Gateway Initiative,最初的目的是为各种嵌入式设备提供通用的软件运行平台. 后来经过10年的发展和壮大,OSGi已经不只是在嵌入式设备中应用,而是被推广到各种其他的应用领域,比如其中最成功的Eclipse IDE. 目前在企业级应用开发中也开始大量使用OSGi技术,尤其是在应用服务器领域,各大主要厂商相继宣布推出支持OSGi规范的中间件产品,例如Websphere、Glassfish、JBoss等.

基于OSGi的企业级开发框架实践——序篇

- - CSDN博客推荐文章
OSGi就好比达摩克利斯之剑一般,在其强大而锋利的背后却隐藏着让人窒息的危险. 我的形容好像有点夸张,不过在现实中大多数的研发团队基本上都认为OSGi并非像各类评论文章中介绍的那样光彩熠熠,而更多的像是食之无味,弃之可惜的鸡肋. 诚然,我不能强迫每个人都接受我的观点,在每个项目中始终不渝的实践OSGi.

OSGi使用四问

- - 技术改变世界 创新驱动中国 - 《程序员》官网
没有什么技术是万能的,任何一门技术都有它的适用场景和最佳实践方法. OSGi不只是一门技术,更多的是一种做系统架构的工具和方法论,如果在不适用的场景中使用OSGi,或者在适用的场景中不恰当地使用OSGi,都会使整个系统产生架构级的缺陷. 因此,了解什么时候该用OSGi是与学会如何使用OSGi同样重要的事情.

Neil Bartlett访谈:关于OSGi与新发布的Bndtools 2.0

- - InfoQ cn
Neil Bartlett是卓越的OSGi专家以及流行的OSGi Eclipse插件工具Bndtools的维护者,他. 宣布Bndtools 2.0已经释放. 支持OSGi Release 5 Resolver以及Repository规范. 导出运行描述符作为单独的可执行文件. 基线(对于不正确版本的bundle会出现构建错误).

OSGI化你的应用的一个推荐方式

- - ITeye博客
    我个人感觉OSGI表面是为了模块化,但其本质是为了软件设计的永恒主题--复用.     从过程式软件设计,到结构化软件设计,再到面向对象的软件设计,再进一步则是面向组件的软件设计. 而java在JDK层面上已经提供了很好的面向对象的软件设计基础,但在面向组件的软件设计方面,则需要在更高的应用层面去实现,而没有基础性的实现方式.

企业开发的互联网转型

- - 乱象,印迹
算起来,我从互联网开发转向企业开发已经有四年时间了. 在刚刚投身企业开发的那段时间,虽然也读过《企业应用架构模式》之类的书,到底没有做过正经的“企业开发”,而且业务并不算太复杂,所以还是借着之前互联网开发的老底子解决问题. 这么做确实解决了很多问题,但心里还不太放心,总觉得这不是名正言顺的“企业开发”,以后会有问题.

企业应用开发与互联网应用开发区别

- - 行业应用 - ITeye博客
注:转自 http://timeson.iteye.com/blog/609045. 新形式下的企业应用特点: . 企业应用系统从封闭走向开放,由局域网转到互联网,随着涉众面的极大扩展,新的企业应用要求多浏览器支持(IE,FireFox),国际化支持,全球业务的互联互通. 这样就要求企业应用不能满足简单的表单、表格、树、菜单;而是要求有较好的用户体验,提倡富互联网应用.

Twitter也要企业平台化?希望第三方来开发企业应用

- - 微博之博
看来,微软收购企业社交网站Yammer启发了 Twitter. CEO迪克·科斯特洛最近表示,Twitter虽已成为一个强大的广告和 营销工具,但目前才刚刚开始向一个多面企业通讯平台转变. 他提示说:“我们会看到更多的CRM创新工具、更多的分析工具、更多的情感分析工具的出现,这是自然而然的事情,也是我们所期待的结果.

【转载】开发杀手级企业应用10规则

- - HTML5研究小组
卓越的企业级App要7*24小时在线,保持机警,能帮助员工抓住每一个机会. 你也许认为你和你的团队都已经拥有了个人电脑. 但是根据 Lextech Global Services(一家移动app设计与开发公司)的CEO  Alex Bratton的说法,你并没有真正拥有. Brathon说:“如果安装了合适的app,移动设备就是首要的真正的个人电脑:可以装在口袋里,7*24小时可用,最重要的是,移动设备不是为大众市场而设计的,而是为你的个人需求而设计的.

Android进行设备管理(针对企业开发)

- - CSDN博客推荐文章
在使用设备管理功能前需在 res/xml/device_admin.xml 中声明和定义要使用的设备策略,这些声明和定义的策略将会被我们的应用程序执行,如果你执行了没在  res/xml/device_admin.xml  声明和定义的策略,那将会抛出  . SecurityException  异常,具体定义如下.