转自:http://jnn.blogbus.com/
最近我在做有关ESB的开发工作,发现我们的产品(开源的Celtix http://celtix.objectweb.org) 要支持JBI和SCA两个标准。这让我困惑了好久,JBI和SCA有什么区别呢?
前几天好好在网上收罗了一番,现在把收获到的东西和大家分享一下:
JBI definition http://www.theserverside.com/news/thread.tss?thread_id=35053
SCA 与JBI的区别 http://azur.typepad.com/bpel/2005/12/sca_jbi_and_mor.html
上面的链接有详细的讨论,我简单整理了一下。
JBI 的由来
Java One 2005 had a very heavy emphasis on JSR-208, Java Business
Integration. However, he says, "there seemed to be some folks with
confused looks on their faces in some JBI talks." As a response, he's
written a blog entry on what JBI actually is
<http://radio.weblogs.com/0112098/2005/07/07.html#a530>.
JBI是提供了一些简单的API定义, 这些定义包括 Normalized
Message Service , 在一个Router组件,以及一个管理模型用来管理服务
的部署集成,例如 routing engines, BPEL engines, rule systems, transformation engines
JBI提供了一个逻辑的XML消息网络, 这一网络能够很容易的映射到
HTTP, email 和 JMS/MOM ,并很方便地适应遗留系统,二进制地传输,
和RPC系统(EJB和CORBA)。 JBI可以看做是对JMS的更高层次的逻辑
抽象,并提供了不同的消息交换方式( 单步, 请求应答等)
什么是SCA ,它试图解决什么样的问题?
WSDL 在增强应用之间的可连接性以及互操作性方面迈出了一大步。
然而,WSDL只关注了服务接口,它并不提供描述一个服务所依赖的其它服务,以及这个服务所需要使用的配置策略和服务之间的依赖关系。
单独通过WSDL 很难实现服务之间的组合调用。
SCA比WSDL走的更远的方面是定义了一个服务组件模型以及一个服务组装模型。
服务模型提供了比WSDL更多的功能,它允许服务开发者不单定义服务的接口而且还可以定义 这个服务和其他服务的依赖关系,以及这些交互(事务,安全,以及可靠 传输)之间的策略 还有服务所可能提供的配置功能。
一个SCA模型对等于一个SOA项目,模型允许开发者组装一组服务组件,解决引用依赖和使用策略。这是一个很大的进步,因为当前的SOA平台需要开发者自己获取那些私有的服务部署引用,甚至有时要在他们的服务实现中写hard code.
SCA与JBI的区别
SCA的美丽之处在用它关注的重点只是SOA开发者所看到和接触到的。
SCA并没有关注用来执行SCA模块的runtime是如何构架的。
这个runtime可以实现为一个将所有的SCA服务组件编译成为Java classes的丑陋的单一服务,或者是一组模块化的引擎(每个组件一个的那种),这些引擎可以通过一个企业服务总线来进行通讯。
JBI从另一个方面来说就是一组关注创建一个开发的,可扩这的以及标准组件的企业服务总线。 这样它的内核是和SCA有一些重合的地方。同时两者之间也存在互补的机制。
说它们互补,为什么不把他们绑定在一起呢。这里有两方面的原因。
第一个原因 是JBI关注的是如果将一组引擎组装并运行 于一个JVM中。 相反SCA在另一方面并不将一个模块约束单个JVM中。 一个SCA模块可以执行在一个JVM中,同时它也可以很方便的将这些引擎部署在不同的进程甚至是不同的节点上。
第二个原因 是SCA不但支持Java而且还支持C,在今后也许还会支持C#,php。 而JBI只是SCA的一个实现方式,而不是唯一的选择。
====================================================
多少年来,Three Tier的架构似乎已经成为了教科书式的软件体系范本。它不断地提高软件灵活性和高聚合性的,时至今日,当软件复杂度更上一个数量级的时候,这种体系也开始孕育又一次重生。这就是最近的Buzz Words: SOA,也即SCA + SDO
受CHRIS在BLOG上所托,稍微关注了一下这方面的。
其实SDO已经有比较长的历史了,IBM去年就在从事该规范相关的开发。
而SCA相对来说更新鲜一些,主要是针对在面向服务的计算环境里,组件的实现方法。同时,它强调了这些组件与现有的平台,组件之间的关联,并描述怎样通过已有的技术、平台甚至于现有的组件来实现面向服务组件。另外,在将这些服务组件实现以后,它们的接口以及这些接口的语义是怎样描述的。其实,新的组件描述应该是技术独立、平台独立、语言独立的,也就是说它是一个开放的规范,这样就可以让很多IT厂商在不同的平台上用不同技术和语言来参考和实现这些技术。
除此之外,面向服务的组件需要相互之间的交互,这种交互应该是松耦合的,也就是说需要打破过去那种紧耦合的现象。因为不管是.NET、J2EE还是更早的CORBA等技术,它们在支持分布式计算时,其组件往往和平台、语言以及实现技术紧密相关。
过去,如果一个组件要调用另外一个组件的功能,它需要知道后者的接口在什么位置,使用什么协议和消息格式,这往往与其实现技术有直接的关系,所以技术、平台、语言和位置等各种各样的因素的透明性对于组件之间的交互就是非常重要的一件事情了,而SCA恰恰就规定了这一部分的内容。
另以方面,SDO其实与SCA是一对具有对应关系的规范。我早先就说过:软件=服务+数据。SCA更加关注业务逻辑,而SDO则更侧重于业务数据。
过去我们所采用的技术中,不管是.NET也好,J2EE也好,它们都有基于自身平台下的规范,比如在J2EE环境下,我们就会通过JDBC、Entity Bean这样的方式访问数据库或者其它数据源;而在.NET下同样有类似ADO这样的方式来访问各种不同的数据源。这里面的问题在于,平台透露了太多的技术细节,程序员需要了解很多相关的内容,比如他需要创建一个JDBC或ODBC的数据源,再利用这些规范所提供出来的编程接口来想办法得到数据源中的数据,为达成这个目标,程序员还需要去做对象-关系映射,以实现对象到关系数据库或者与之相反的数据转换。目前有一些技术可以用来解决这些问题,比如前段时间在Java社群中一直都非常流行的Hibernate等,诸如此类的方法和工具很多,他们都是用来协助程序员处理上述工作的。但无论如何,你都无法逃避地要看到很多这些方法中非常底层的技术细节,而且,程序员需要学习所有这些不同的技术,了解它们适应于什么情况,处理各种情况下的不同技术细节。事实上,程序员需要抽象层次更高的东西,比如业务数据对象(Business Object)以及它内部各种细粒度数据对象之间的关联,这是可以用一致、通用的方式来表示和操作的。有了抽象层次更高的模型,程序员就可以通用的方式来定义和访问业务数据,从而以统一的方式来描述和访问不同的数据源,降低对程序员技能的要求,提高生产率,更容易在不同的应用环境交换。
这样,不管是Java或者C++语言描述下,程序员都不必去了解平台上的技术细节,用一个XML Schema描述这样的通用、简单的的业务数据模型,然后在运行将对象持久化到你的关系数据库、XML或者其它数据源中。
从技术上看,SDO规范做了如下几件事情:它定义了一个连接器,可以使用JDBC、ADO等各种不同的方式去和多种数据源交互,数据源也是多种多样,不单单局限于关系数据库,也可以是不同类型的XML文件,甚至是内存中的一块区域。同时它还提供诸如连接池、缓存(Cache)、断开连接时数据访问(Disconnected Access)等高级特性,提供了跨越B/S,C/S的边界。
另外,SDO还定义了一个中介转换器(Mediator),它与连接器交互,来完成数据持久化的工作,这个协调器能够理解我们定义好的Schema,让程序员能直接看到一个直观的对象图表(Object Graph)。它根据业务的语义定义一个完整的Schema,不仅能清晰地定义各种数据对象,而且还能有效地描述各种对象之间的联系,充分利用了XML强大的自描述能力。通过它,人们可以很方便的操纵数据对象。
综合起来说,SCA/SDO都是基于已有的技术,它们所要做的就是怎样在现有技术的基础上,为异构、分布的松耦合计算环境提供一个统一、开放的组件及其服务的描述。
IBM在其SCA的实现中,也就是WPS 6.0所提供的SCA运行时环境,有多达八种不同的组件实现形式可供选择。我想更理想的实现应该是提供一个可以扩展的接口。即使在语法上、数据结构上有很大的不同,甚至是某公司自己语义上的东西,也可以方便地纳入SOA的架构里。
这样一个规范目前受到了IT技术主流的技术厂商的支持,它的建立为基于SOA的下一代计算环境下的编程模型打下了一个坚实的基础。
与古老的CORBA技术(请允许我用这样的词来描述它,呵呵~)想比,两种技术的背后都有很一致的哲学。但是受限于当时的技术发展条件,我们回顾历史的时候,CORBA在很多细节上的处理并不是太好,而且,CORBA是基于面向对象思想的,与之不同的是SCA基于面向服务的思想,其实抽象程度要相比过去的提高很多。
这里我引用一下Gartner的报告:
- 随着商业和技术的推动,SOA将成为将来的发展趋势已经没有人怀疑了;
- 2007年,超过50%以上的公司将SOA作为IT战略来考虑;
- 2008年还没有将SOA引入到公司的IT实现中去,那么该公司将成为一只恐龙,也就是说这个公司很落后了。
目睹这些年软件的迭代更新,我有时也在想,是不是这就是软件自己的“摩尔定律”,所不同的是,用来度量软件的不是单晶片上可以集成的晶体管数,而是单个软件工程师所能Handle的软件复杂度,姑且叫它"logic per brain"吧。
分享到:
相关推荐
标题中的“全部的SCA&SDO中文规范”指的是Service Component Architecture (SCA) 和 Service Data Objects (SDO) 的中文版本规范集合。这些技术是IBM提出的用于构建面向服务架构(SOA)应用的关键组件。 1. **...
【标题】"SCA SDO中文资料"涵盖了关于Service Component Architecture (SCA)和服务数据对象(Service Data Objects, SDO)的中文学习资源。SCA是一种用于构建和组装企业级服务的编程模型,它强调服务的组合和重用,...
SCA(Service Component Architecture,服务组件架构)与SDO(Service Data Object,服务数据对象)是面向服务架构(SOA,Service-Oriented Architecture)中的关键组成部分,它们为构建、管理和部署分布式应用程序...
- **复用性增强**:通过SCA和SDO构建的服务组件可以在不同的项目中重复使用,极大地提高了开发效率。 - **降低复杂性**:SCA和SDO通过提供统一的接口和抽象层,显著降低了开发和维护的复杂度。 - **跨平台能力**:...
- **数据对象**:SDO中的核心是数据对象,它可以表示来自任何数据源的数据。 - **数据访问**:SDO提供了统一的数据访问接口,使得开发者可以从数据库、XML文件等多种数据源获取数据。 - **数据操作**:SDO还提供了一...
SCA(Service Component Architecture,服务组件架构)和SDO(Service Data Object,服务数据对象)是面向服务架构(SOA)中的重要概念,主要用于构建分布式系统和服务的集成。以下是这两个技术的详细介绍: **SCA...
通过学习这些材料,你可以深入了解银行处理系统的设计原理,掌握AXIS、SCA和SDO在银行业务中的应用,以及如何利用这些技术来构建高效、安全的金融服务。此外,你还将了解到SOA(Service-Oriented Architecture)编程...
【SCA与SDO概述】 SCA(Service Component Architecture)和服务数据对象(Service Data Object)是面向服务架构(SOA)的重要技术规范,由开放源码软件联盟(OSOA)在2007年提出,并提交给OASIS标准组织。它们旨在...
一个可运行的web项目,包括SDO对象的创建、SDO对象在SCA组件中传输的示例,示例很好地展示了SDO与SCA的结合。 注,SDO使用2.1版本,项目中不包含依赖的jar,可以讲SDO-2.1版本中的jar拷贝到web项目中。
**SOA(Service-Oriented Architecture)是一种架构模式,它提倡将业务...在实际项目中,SCA/SDO结合使用能够提供一种高效且灵活的SOA实现方式,帮助开发团队快速响应业务变化,构建出可扩展和可维护的企业级应用程序。
为什么选择SCA和SDO呢?首先,SCA通过其模块化和声明式的特性,简化了服务的开发和部署过程,降低了集成复杂性。其次,SCA支持多种技术栈,允许跨平台的互操作性,这对于大型企业级应用来说尤其重要。再者,SDO的...
根据给定文件的部分内容,我们可以深入探讨Service Component Architecture (SCA) 和 Service Data Objects (SDO) 的实施情况,特别是2007年时在开源和供应商产品中的应用。这涉及多个项目和工具,旨在推动服务导向...
SCA(Sequential Convex Approximation)算法是一种在优化领域中广泛应用的方法,特别是在处理凸优化问题时。凸优化是数学优化的一个分支,它专注于找到在凸函数上的全局最小值,因为这些函数具有良好的性质,比如...
总的来说,SCA是现代软件开发中不可或缺的一部分,帮助团队维护代码的安全性和合规性,从而保护用户和公司的利益。通过深入理解SCA原理和工具的使用,开发者可以更有效地管理开源组件,降低潜在的风险。
SDO(Service Data Object)是Oracle公司提出的一种数据抽象模型,它主要应用于服务导向架构(SCA,Service Component Architecture)中,为数据在服务之间提供了一种统一的表示方式。这个"SDO学习实例"是一个帮助...
**IBM SCA设计工具**是面向服务架构(Service-Oriented Architecture, SOA)系统开发的重要组成部分,尤其在实现复杂企业级应用集成时扮演着关键角色。SOA是一种设计原则,它强调将业务功能作为独立的服务,这些服务...
SCA3300是一款高性能的三轴加速度传感器,主要设计用于工业级应用,如倾斜测量、结构健康监测和动态重量检测等。这款传感器具备湿度补偿算法,确保在各种环境条件下都能提供精确的测量数据,使用户可以专注于其特定...
这里的"SCA_sca算法_SCA_sca程序代码_sca算法代码"标题和描述提示我们,这个压缩包包含的是关于SCA算法的源程序代码,供学习和研究使用。 SCA算法主要分为几个关键步骤: 1. 数据收集:这是侧信道分析的第一步,...
SCA(Service Component Architecture)架构基础知识是指在服务组件架构中的一些基本概念和技术,旨在帮助开发者更好地理解和应用 SCA 架构。 绑定(Binding) 绑定是指服务或引用使用的访问机制。SCA 支持多种...