escout

代码、心情

常用链接

统计

SOA相关

我参与的团队

最新评论

SOA之SCA规范摘要及我的理解

上次开会讨论了对SCA和SDO的理解后,又重读了IBM上关于SCA的文章,摘要如下:
SCA(Service Component Architecture)编程模型入门上指出:
 
服务组件(SCA Service Component)是SCA中的基本组成元素和基本构建单位,也是我们具体实现业务逻辑的地方。
其组件结构图如下:

       服务模块(Service Module)由一个或多个具有内在业务联系的服务组件构成,模块是SCA中的运行单位,因为一个SCA模块背后对应的是一个J2EE的企业应用项目。
服务模块之间的关系如下:

       可见,同一服务模块内部的服务组件之间是通过Reference和Interface直接关联起来的,相对来说有比较紧密地耦合。
结合HelloWorld的示例应用

       可以看到,同一个ServiceModule实际上实现了一个独立的应用,这个应用一般有自己的展示层,通过Standalone Reference的方式,和Service Component建立联系,实际的业务逻辑都封装在Service Component中。同时,对于不同的ServiceModule,要相互引用,就要多费一些功夫了,需要使用服务模块中的导入和导出定位到实际的服务模块。
       对于不同ServiceModule的交互,文章WebSphere Process Server V6 体系结构概述中给出下图一个简单的端到端业务数据同步的例子:

并解释:
       源EIS通过其适配器发出请求,传入一个应用特定业务对象(Application-Specific Business Object,ASBO),通过转接器转换成一般业务对象(Generic Business Object,GBO),进入业务流程引擎进行处理,处理的结果以另一个GBO的形式,通过Selector传输到指定的目标,再经转接器转换为目标EIS的应用特定业务对象,进入目标EIS进行处理。
       其中中间的矩形包括的ASBO、转换器、GBO等等,按照我的理解,我觉得应该是企业服务总线ESB的功能,也就是不同的ServiceModule都插接到ESB上,通过业务对象映射服务(Map Service)以及关系服务(Relationship Service)一起,完成接口转接的功能。同时,在一个SCA Service Component中,一般都是使用同样的BO,如果不同,可以使用SCA接口转接器(Interface Mediator)提供了SCA接口转接的功能转换,但是考虑到BPEL等等的自动编排,一般ServiceModule内部还是应该使用同样的BO,不同的ServiceModule之间一般BO不同。这里的BO就是SDO
同时,可以看到,不同模块的耦合主要是通过引用来实现,一般来说,SCA引用分为模块内的引用和模块间的引用。模块间的引用定义的是一个模块(中的组件)对于外部服务,例如另一个模块中的组件或者Web服务等的依赖。
      同时,我们注意到一点,在很多IBM SOA的文章中,都是使用了Service Locator的方法来定位服务,比如SCA(Service Component Architecture)编程模型入门中就使用了如下代码:
1ServiceManager serviceManager = new ServiceManager();
2Service service = (Service) serviceManager.locateService("HelloWorldInterfacePartner");
    注意到这里的HelloWorldInterfacePartner实际上是一个服务的逻辑名,所以这里就实际上解除了和实际的服务的耦合,是很松散的耦合。比较一下在spring等等IOC框架中的通过配置文件来组装POJO的方法,这样也不失为一种可行的策略。不过,相比而言,我还是更喜欢在spring中那种通过xml配置文件组装bean的方法,更加灵活一些的

posted on 2006-05-27 00:26 绿色使者、绿色心情 阅读(1406) 评论(3)  编辑  收藏 所属分类: soa team

评论

# re: SOA之SCA规范摘要及我的理解 2006-05-27 20:02 突突

通过转接器转换成一般业务对象(Generic Business Object,GBO),进入业务流程引擎进行处理,处理的结果以另一个GBO的形式,这里的BO就是SDO

对象传来传去, 感觉好复杂.   回复  更多评论   

# re: SOA之SCA规范摘要及我的理解 2006-05-28 07:15 Richie

同时,我们注意到一点,在很多IBM SOA的文章中,都是使用了Service Locator的方法来定位服务,比如SCA(Service Component Architecture)编程模型入门中就使用了如下代码:
1ServiceManager serviceManager = new ServiceManager();
2Service service = (Service) serviceManager.locateService("HelloWorldInterfacePartner");

服务定位模式,并不太好与IOC相并论,可测试性会有很大损害.EJB2.x中的jndi查找也可理解为这种模式的一个实现。  回复  更多评论   

# re: SOA之SCA规范摘要及我的理解 2006-05-28 09:45 绿色使者、绿色心情

我觉得恰恰是使用IOC,会使可测试性更好,因为这样可以脱离开容器测试,并在测试时替换实现。必须在容器内测试是自动化的可测试性的大敌,同时严重影响测试效率。EJB2.x中的测试也是最被人诟病之一,其中必须依赖jndi查找应该是一个主要原因  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: