兄弟公司新来的BlueDavy同学正好是我过去OSGI起步时的间接导师(看了他的《OSGI进阶》和一些实际的使用经验分享),中午第一次在网上遇到,谈了一会儿,下午有一点时间正好去看了看他新的三篇文章,关于OSGI,SCA,服务框架的文章,有一些自己的体会,在这儿也分享一下,自己对于OSGI也就入门性的了解,所以分析的未必到位,也只能说投石问路了^_^,不过很是期待后面彼此的合作和交流。
OSGI --> SCA
在去年的3,4月份,平台需要做一次重构,前端框架不列入第一次重构范围,重构的重点在于后端整体框架的重构和服务框架的设计与实现。对于服务框架这部分,前期的需求主要是希望能够为将来的模块化做好准备,因此就正好去研究了一下OSGI。OSGI的优点在于做到了真正的业务组件模块化(实现类,各种资源,类库等),就和其元数据Bundle名字一样,完全打包。其实就OSGI的起源来看也是这样,它最早用于汽车制造的设计,和J2ME嵌入式开发一样,这种良好的封装对于组件的交互(接口稳定),动态装载替换都有天生的良好支持。而当前的Java应用开发也越来越重视业务模块的封装和重用,动态载入以及类库的独立管理都是未来的一种趋势。但经过一段时间的实践操作,使我考虑去寻找一个新的技术框架规范来实现我的服务框架,原因是什么呢?首先和BlueDavy同学在文章中说到一点一样,OSGI的服务框架没有提供外部显示调用,同时当时我实践的Equiox要被Embedded到平台中比较困难,除非由上至下全部采用统一的OSGI框架,而且和外部第三方系统进行交互也不是很方便。再则,OSGI的一大亮点classloader自管理机制也是一个制约,在实际开发中很需要能够这么做,由于第三方开源项目的依赖日益增多,这问题就更加突出,不说别的,就说现在Jdk1.6中已经作为基础API框架的Stax API 框架,就会被任意的第三方实现,载入的方式也是动态运行期查找实现载入,这时候莫名其妙的问题,单元测试没有问题,上了Web Container有问题都冒了出来。但是OSGI的隔离需要处理很复杂的依赖关系,这样往往在复杂的情况下还是会出现解决不了的灵异问题。最后就是OSGI其实和我的需求不是很符合,起码是后面平台战略的改变以后,OSGI就更加不是首选的技术实现。因为现在公司需要构建的是应用接入平台,SAAS模式的运营平台,OSGI的长处不在于这种分布式异构松耦合服务框架的实现,它特长在于单机同构模块化的服务框架实现。因此,OSGI就此暂告一段落。
还是那句老话啊,没有不好的技术,只有被滥用的技术,适合的才是最好的,从OSGI转到SCA并不是说OSGI不如SCA,没有可比性,只是说SCA更合适我当前的应用场景,没必要喝汤非要用筷子。
SCA和服务框架
我的Blog已经有很多关于SCA应用设计实现的文章,这里我不再去讨论那些,只是把为什么在设计服务框架时选择SCA来说一下。其实服务框架的技术选型,试验,实践,应用,都是一步一步踏踏实实的走过来的。
ASF(Application Service Framework)也就是当前基于SCA规范实现的服务框架有这么一些特质,也是未来应用接入平台需求所决定的一些必备特质。
模块化:SCA规范明确界定了服务模块的封装交互。(很多人觉得模块化是个概念,系统规模日益增大,模块间耦合对于需求变化频繁,模块化集成测试,动态载入需求等等都会产生很大的影响)
开放性:在我的blog有个朋友问起,用Spring实现这些功能绰绰有余,web service独立的框架一大堆,为什么还搞出一个SCA来弄,自找麻烦。赫赫,如果这么说,那么就证明其实没有仔细理解SCA是什么,SCA只是一个框架规范,而上面提到的都是实现技术手段,用Spring也可以实现SCA框架,而且实现起来很容易,但真正要把SCA的开放性体现出来,那么需要做的远远不是简单的用N个Spring Factory来构造N个Composite那么简单。其实现在ASF中已经很好的集成了Spring,Hessian,Jetty,Axis2,JMS等等,简单来说,只要想集成的就是一个SCA的实现,也就是说其实SCA不是什么技术,而是一种技术实现规范,任何技术只要按照这种规范来实现了,也就是一种SCA扩展,SCA框架就好比Eclipse,SCA就好比Eclipse的plug api和Flow design。一本好菜谱怎么做全看厨师,用什么料,什么锅子铲子,厨师说了算,如果硬生生的将技术和SCA去比较,那只会离SCA越来越远。
SOA:记得我去BEA参加SOA年会的时候,听了几节关于SOA的技术教学课,因为时间的原因,几个老师都很快地去说了一下SOA的大致概念,不过最为突出的就说到了Web Service,其实自己觉得这可能会误导很多人。现在一提到SOA很多刚刚接触的朋友都说就是用Web Service来做服务掉用么,但其实和前面对于SCA犯了一样的一个错误,Web Service只是SOA的某一部分的一种技术实现手段,无疑Ws的成熟运用是SOA的技术支持,但是SOA对于服务的管理其实才是最重头的部分。SCA框架在WS上的支持主要来源于他的开放可以集成各种好的开源应用,Jetty+AXIS2(以后考虑集成CXF来满足Rest类型的服务发布)可以很好的满足需求,Jetty+Hessian可以提供给内部的分布式服务调用和组装。在服务管理方面,灵活的框架规范已经实现了服务调用组装于实现透明,松耦合异构化的服务在SCA框架中得到了很好的支持,唯一需要考虑的是,在将来更高层服务流的支持上,可以集成BPM来提供更高层次的支持。前一阵子考虑是否要集成某一个开源的ESB到框架中,用来提供更多的服务管理功能,不过看了看几个不错的ESB开源框架,很多功能已经都是在ASF中实现的,而且相对来说比较重,所以暂时就没有再作什么工作了。
在BlueDavy同学服务框架一文中提到的服务的组装调用管理在ASF都已经得到了很好的支持。
SCA & OSGI
然后回过头来再看看SCA和OSGI的关系。其实我觉得用个比喻来说明会更加形象一些,现在就好比我们平台需要开发一种武器攻击范围可近可远,我就选择了弓箭,SCA就好比弓箭的设计图,而ASF现在就好比是弓,已经有了火箭,冰箭,木箭等等,OSGI是一支可变的箭,箭头多变,以变克敌。ASF中集成OSGI就是将这种好的技术作为一种内部扩展实现,在各种适合的应用场景中发挥其最大的作用。
OSGI在当前互联网应用之所以没有被广泛应用,其实也有它的道理,首先对于现在的应用来说模块化的动态载入和部署应用需求场景很少,特别是生产环境,因为当前的大应用往往重新部署和启动来的更有效和方便,classloader管理的复杂性也是很重要的原因。
但就将来的趋势来看,Jdk7的一个重点就是类似于OSGI的动态性,也已经把OSGI作为JSR,那么就能看出OSGI的未来。
没有好与不好,只有适合和不适合,按需设计,简单事情简单做,才是设计最重要的原则。
分享到:
相关推荐
**SCA(Service Component Architecture)** 是一种服务组件框架,旨在简化基于 **SOA(Service-Oriented Architecture)** 的应用程序构建。SCA的核心目标是让开发者能够专注于业务逻辑,而不是技术实现细节,通过...
例如,OSGi可以作为运行SCA组件的基础平台,提供模块化管理和动态更新能力,而SCA可以在OSGi之上提供高层次的服务组件模型,简化服务的创建和部署。 SCA和OSGi的联合使用,能够实现更加灵活和可扩展的应用架构。...
"SCA服务构件架构.pdf"可能是关于Service Component Architecture(SCA)的资料,这是一个用于构建分布式应用程序的模型,与OSGi相似,但更注重服务的组合和交互。SCA可以与OSGi结合使用,以构建更加灵活和可扩展的...
Swordfish不仅关注于OSGi本身,而且还整合了其他关键的SOA技术,如Java Business Integration (JBI) 和Service Component Architecture (SCA),以实现更高效的服务组合和管理。 - **JBI** 定义了一种标准化的方式,...
6. **OSGi**:OSGi是一种Java模块化系统,它为Java应用程序提供了动态的模块化框架,Tuscany SCA的实现基于OSGi规范,这使得它能够灵活地管理和部署服务。 7. **分布式系统**:SCA常用于构建分布式系统,其中的服务...
Apache Tuscany SCA(Service Component Architecture)是Apache软件基金会开发的一个开源项目,它提供了一个用于构建、部署和管理服务的框架。SCA是一种服务导向架构(SOA)标准,旨在简化不同技术间的互操作性,使...
引入了OSGi(Open Services Gateway Initiative)技术,OSGi是一种模块化系统和Java服务框架,能够有效地解决SCA中的组件隔离问题。通过OSGi,服务组件可以在独立的环境中运行,降低组件间的耦合度,提高系统的灵活...
5. **ServiceMix架构**:ServiceMix基于OSGi(Open Service Gateway Initiative)框架,允许动态部署和管理服务。OSGi容器提供了模块化和版本控制的能力,使得服务的更新和维护更加灵活。 6. **服务组件运行时(SCA...
当引用的服务可用时,SCA框架会自动连接它们。 6. **复合组件**:复合组件是包含其他组件的组件,可以用来组织和管理多个组件,形成更复杂的系统结构。 7. **域(Domain)**:域是SCA架构的顶级容器,用于管理一组...
1. **服务组件运行时(Service Component Runtime, SCA)**:SCA是定义服务接口、组件和服务关系的标准化模型。它允许开发者以声明式的方式定义服务的依赖和交互,简化了服务的组合和部署。 2. **服务数据对象...
Newton项目与Paremus的Infiniflow产品相关联,是一个基于SCA/OSGi技术的分布式Java运行时框架。其特色在于能够动态地将组件分配到系统网格中,体现了SCA在复杂分布环境中应用的可能性。 ### Eclipse SOA Tools ...
Apache Tuscany SCA(Service Component Architecture)是一个开源框架,用于构建分布式应用程序和服务。SCA是一种编程模型,它简化了服务的组装和管理,通过组件、接口、绑定和装配模型来实现这一目标。 1. SCA ...
智慧校园技术路线主要涵盖了架构设计、基于SOA的数字化校园构建、基础设施、基础平台、组件服务、信息服务以及开发平台和框架等多个方面,旨在打造一个灵活、可扩展且高度集成的信息化教育环境。 1.1 架构设计 智慧...
总之,SOA和BC的结合为企业架构提供了强大的灵活性和可扩展性,而SCA则为实现这一目标提供了标准化的工具和框架。通过深入理解这些概念并有效应用于实践,企业可以构建出适应快速变化业务需求的、高效的企业级IT系统...
- Newton项目与Paremus的Infiniflow产品相关,提供了一个基于SCA/OSGi技术的分布式Java运行时框架。 - 该框架支持动态地将构件分配到系统网格。 #### 四、SCA与SDO的商业实现 1. **Oracle Fusion** - Oracle ...
Apache Tuscany是Apache软件基金会的一个开源项目,它专注于服务组件架构(Service Component Architecture, SCA)的实现。SCA是一种用于构建和部署分布式应用程序的规范,它允许开发者使用多种编程语言和数据格式来...
SOA架构的IT业界技术标准主要有服务组件架构SCA与服务数据对象SDO。基于开放标准采用的相关技术有可扩展标记语言XML、简单对象访问协议SOAP、Web服务描述语言WSDL、统一描述、发现和集成UDDI、JAVA消息服务JMS、企业...