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年自己写的一篇培训文档。虽然网上已经有很多类似的文章,但是这个重复的轮子或许会让你有意想不到的收获。
分享到:
相关推荐
Spring 是一个轻量级的J2EE开发框架,特点是面向接口编程和非侵入式的依赖注入。将 OSGi 和 Spring 结合能充分发挥二者各自的特长,更好地满足企业级应用开发的需求。 在基于 OSGi 和 Spring 的 Web 应用开发中,...
Spring是一个全面的Java企业级应用开发框架,提供依赖注入(DI)、面向切面编程(AOP)、数据访问/集成、Web MVC等功能。在SSM组合中,Spring主要负责管理和协调各个组件,如数据库连接、事务管理等。 **3. ...
综上所述,基于OSGi和Spring开发Web应用不仅能够充分利用OSGi的模块化优势和Spring的依赖注入机制,还能借助dmServer和SpringSource应用平台等工具,实现更加高效、灵活和可靠的企业级应用开发。
Spring框架则是一个流行的轻量级Java企业级应用开发框架,它提倡面向接口编程和依赖注入(DI)原则,有助于减少代码耦合度和提高组件的可测试性。Spring-DM(现在称为Spring OSGi)是Spring框架的一个扩展,旨在将...
2. **企业级应用**:在大型企业应用中,OSGi可以帮助构建松耦合的组件,便于开发、测试和部署。 3. **IDE和工具平台**:Eclipse IDE就是一个基于OSGi的平台,其插件系统就是OSGi服务模型的体现。 四、学习资源 ...
在深入讨论基于OSGI的完全分布式EAI实践框架之前,首先需要对几个关键概念进行解释和阐述,以便更好地理解这篇文章的背景知识和主要讨论点。 首先,“企业应用集成系统(EAI)”指的是通过软件和标准化方法将一个...
尽管OSGi未能直接纳入Java EE 6标准,但Sun公司表示将在未来的Java EE版本中考虑其角色,预示着OSGi在未来的企业级开发中将发挥更大的作用。 对于初学者,了解OSGi的运行机制和通过“Hello World”程序实践是入门的...
Spring框架则是一个全面的企业级应用开发框架,它简化了Java开发,特别是Web应用的开发。Spring提供了依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)等核心功能,还包含...
标题中的“基于SOA和ESB企业总线的OSGi企业级应用”是一个关于构建企业级软件系统的主题,其中涉及到三个关键概念:Service-Oriented Architecture(SOA)、Enterprise Service Bus(ESB)以及OSGi(Open Service ...
基于 OSGi 和 Spring 开发 Web 应用
【基于OSGI的软构件实时数据处理子系统设计与实现】 在现代军事装备的发展中,指控系统扮演着至关重要的角色,特别是在信息化趋势下。指控系统主要用于处理试验信息、执行信息应用以及管理试验信息系统的运行。它能...
基于OSGi的企业级快速开发平台——JXADF 1、基于OSGi、J2EE 2、插件集市(http://osgi.jxtech.net)中有丰富的插件。 3、前端代码(界面、CSS、JS、图片等)、后端代码(JAVA业务逻辑、SQL脚本【只需要提供一种...
"基于osgi框架实战源码"的学习资料为开发者提供了一个宝贵的实践平台,通过实际操作可以加深对OSGi的理解,提升在大型复杂系统中的模块化开发能力。在深入学习源码的过程中,不仅要关注代码逻辑,还要理解其背后的...
本书基于作者多年使用OSGi的经验而编写,涵盖了...最后对OSGi知识进行深入讲解,通过对OSGi规范和实现框架(Equinox、Felix、Spring-DM和Apache CXF)的分析,以及最佳实践的介绍,帮助读者更好地掌握如何使用OSGi。
为了验证基于OSGi框架和插件设计模式结合构建的轻量级动态化系统的可行性和有效性,可以通过一个具体的项目实例来进行验证。例如,可以构建一个企业级应用平台,该平台具备基本的功能模块,并支持通过插件形式扩展新...
资源名称:OSGI原理与最佳实践内容简介:国内第一本OSGi图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入...