OSGi的Spring和EJB之路

 
   | |

导读:笔者根据自己的经验分析了OSGI的一些优缺点以及在考虑OSGi之前,应切实核实是否在不关闭系统的情况下能否在运行时间中转换bundles等等。

关键词:OSGi EJB Spring框架

 
正在加载数据...

    对于OSGi,有人评论称OSGi是“Spring之后的下一个big thing”。不过该文的作者后来又觉得,OSGi也有不少的问题,其中之一就是它在把技术变得复杂化。作者是这样说的:

  TT SOA编辑推荐:OSGi教程

  我对OSGi不怀疑并承认OSGi解决了许多问题,而且它支持一些出众的结构模型比如高模块化(high modularization)以及微服务(micro services)。然而从另外一个角度来说,在使用了OSGi几年之后,也体验了它在不同领域的表现(我是指开发领域)之后,我真的开始怀疑OSGi了。

  这是我喜欢和讨厌的OSGi的一些方面:

  它从几百个具有代表性的小bundle中创建出一个系统的概念非常棒。OSGi bundle很好的一点是它们定义了边界:不仅从依赖关系的意义上,而且从运行时间的意义上也是这样。每个bundle可以充当一个微应用,有自己的lifecycle和用户,每个bundle能够仔细地断定出哪个对象对外暴露。好好地使用它们,会带给系统以松耦合,并增加再使用的可能性。而与此同时,OSGi的lifecycle使life更加复杂。实际上,追踪服务和管理服务所引发的各个问题很讨厌(我曾看到过在它们的bundle activators使用大型的state machines来管理所有事情,这种样板化代码没有人愿意写)。幸运的是有Spring DM来帮我们管理这些。坦白说,如果没有Spring DM我绝不会动手开始OSGi项目。尽管Spring DM大大降低了bundle启动的复杂度,但仍然很麻烦。我仍然需要启动OSGi的运行时间、安装启动bundles,我还需要确保所有其他我所需要的bundles已经安装和启动。

  我个人觉得,作为开发者,我们应当迫使自己执行系统的约束。我们不得不自动核对定义的限制,比如说,如果我们读取了一些我们并不想读取的类,构建程序就会失败。OSGi的版本概念,通过定义输入和输出包,将架构参数(architectural constraints)首次带入开发者的日常生活,并引入了一系列新的问题。OSGi是这样解决运行时间的版本问题的:它给每个bundle自己的class loader,并让class loader看起来像它所在的版本一样。这也带来一系列问题,因为它改变了你环境工作的方式。你的代码在所有你的单元测试中都可以通过,但一旦执行在OSGi的运行时间上,就会崩溃;Libraries崩溃因为这提升了运行时间中的类;Singletons被设计为静态对象不止一次地被创建,周而复始。当你在不断地调整你的模块构建说明时你会经常终止,而且绝对会在你的整个系统中传播反直观的依赖关系。Spring DM也是这个问题:通过在你的服务中添加一些指令并且不断地调整你的class loaders,你仍然需要调整和传送依赖关系。

  尤其是类的导入更是带来很麻烦的问题。你很快会注意到,没有强大和自动集成的测试组件来配合OSGi,你无法继续下去。

  现在说一下我的结论:

  在考虑OSGi之前,我会切实核实是否在不关闭系统的情况下我能否在运行时间中转换bundles,即使在这种情况下,我也会再次查看这些需求,来看看是否我会把他们限制在一个角落里,在这里我可以使用其他技术在动态时间上来动态地加载模块。还有其他选择可以生成这种结构条例(比如使用一个IOC container,使用独立的container来执行模块依赖等等……)许多这些东西都很接近KISS原则,避免所有其他附件的样板化代码并构建配置,这因此让你更加敏捷。

  回归到我的题目上,还有一种技术拥有这样的特点(我是指让技术更加复杂),那就是EJB。Spring是最流行的实例:技术更加复杂,开发周期更加困难。也许我们会在未来的几年内在OSGi中看到同样的境遇?我无法断定,时间将验证一切。


OSGi
 OSGi和企业Java的未来方向
 OSGi实现动态特性的关键模式
 过细粒度的Bundle是成功实现OSGi应用的大敌
 Swordfish: Eclipse公司基于OSGi的SOA架构
 现今可以使用工具同OSGi一起工作吗?
 Eclipse公司从OSGi技术中看到未来
 基于OSGi和Spring开发Web应用(二)
 基于OSGi和Spring开发Web应用(一)
 专家观点:选择OSGi或Java EE?
 OSGi框架协助管理Java组件(上)
 OSGi框架协助管理Java组件(下)
 IBM WebSphere拥抱OSGi
 Spring OSGi的整合
 OSGi的Spring和EJB之路

原文出处:http://developer.51cto.com/art/200910/159560.htm
 
来源:51cto    作者:王玉磊    
 
 
 
 
 

Java Web服务

 
很多时候“架构”是用来描述所有Web服务器都连接在一个巨大的ESB一起时会发生什么的东西。因为对于许多项目来说是迄今为止的道路……
 
从两个观点上来看,Scala是一门重要的语言。第一,它代表了许多程序员所没有的新的想法,也就是说,我在功能理念下如何编程……
 
长期以来应用开发最通用的语言之一,Java已经开始获得云计算平台的支撑。但是由于新的和分布式架构平台,像Google App Engine……
 
大约15年的时间了,Java继续增加作为现代中间件的影响力。不论今后是否成功,显然Java已经为计算带来了新的同质性。Java最大的中间层价值……
 
今年当Oracle准备收购Sun以及VMware收购SpringSource之时,Java的世界有些动摇。Sun控制着Java Community Process(JCP),JCP支配着语言……

热门技术手册排行

 

随着开源技术越来越成熟,一个稍有开发经验的人通过学习就可以用开源的产品和技术构建一套可用的系统。对于从事软件开发的人员,尤其是对Java或动态语言相关领域的人来说,“开源”也许是他们最喜爱的单词。但是,很多时候我们需要的不仅仅是一个可用的系统,而是希望这个系统开发更简易、性能更高和扩展性更好等。这确实是一个令人头痛的问题。本指南很多地方都是点到为止,要深入了解相关信息的读者请借助参考资料、网站等自行挖掘。

 

本专题分六部分探讨SOA设计模式,当初设计面向服务架构的一大初衷就是降低服务间耦合度,由此提高服务的灵活性和自由度。

 

业务流程管理(business process management,bpm)不是一个新概念,甚至不是一个新名词。它是从相关的业务流程变革领域,如业务流程改进(bpi)、业务流程重组(bpr)、业务流程革新中发展起来的。流程管理技术也是从早期的工作流管理、eai、流程自动化、流程集成、流程建模、流程优化等技术中发展起来的。

 

TOAGF是一个架构框架,简而言之,TOGAF是一种协助发展,验收,运行,使用,和维护架构的工具。它是基于一个迭代(Iterative)的过程模型,支持最佳实践和一套可重用的现有架构资产。

 

云计算的概念越来越流行,Amazon、Google和IBM是第一批将云计算引入公众视线的公司。云计算就是新的Web2.0,一种既有技术上的市场绽放。

 

Mashup是一个非常cool的新的应用程序种类。如果你想真正的了解它们,我们需要回过头来看看你现在的计算机,其实它就是一个非常好的帮助你理解mashup的模型。现在开源的操作系统无疑是非常好的apis的集合或应用程序编程接口,帮助开发者去构建其应用程序。计算机本身也是一个很好的为用户提供接口的例子,键盘和鼠标可以被理解为你通过计算机的接口而使用的不同的应用程序。本技术手册为读者提供了一些相关信息,如果需要深入了解mashup,读者可以借助其他参考资源。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录