您的位置:首页 > 其它

《SOA思想、技术与系统集成应用详解》《SOA核心技术应用》读书笔记五-SCA组件、模块、域

2010-10-15 20:53 519 查看
在该系列笔记的三中,对SCA的思想、特点与组成进行了简单介绍。为了以后对SCA代码实现更加清晰,我们继续探讨SCA编程模型中的主要概念:组件-component,模块-composite,域-domain。

SCA组件:

在SCA模型中,组件是业务功能的基本元素,通过模块被组合成为完整的商业解决方案。组件是服务的提供者,同时在组件的实现中也可以依赖于其他服务,即也可以是服务的消费者。

组件总是存在于某个模块(composite)中。在SCA编程模型中,模块及其组件是在.composite文件中定义的,该文件是基于xml格式的。在这个文件中,组件的定义用component元素描述。component元素的结构如下图:



其中,?表示此属性可有可无。从图中,也能看出一个组件由一个实现(implementation元素)和若干服务(service元素)、引用(reference元素)以及属性(property元素)组成。允许可以定义没有实现的组件。给段.composite文件中的组件定义代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<composite name="compositeA">
<component name="componentA">
<implementation.java class="services.componentAImpl"/>
<property name="user">Jack</property>
<reference name="customerService"/>
<reference name="stockService"/>
</component>
</composite>


组件的实现(implementation)有不同的类型,对应不同的具体实现技术(不单指实现语言,还包括底层的框架和运行时环境)。实现类型有Java,BPEL,C++,ejb,spring等。在.composite文件中用implementation来定义,如下:

<implementation.java class=""/>
<implementation.bpel process=""/>
<implementation.spring location="targetURI" />
<implementation.composite name="" />
<implementation.osgi
bundleSymbolicName=""
[bundleVersion=""]
[classes=""]
[imports=""]>
<properties service="">...</properties>*
<properties reference="">...</properties>*
<properties serviceCallback="">...</properties>*
<properties referenceCallback="">...</properties>*
</implementation.osgi>


组件的服务是以接口的方式提供的,同时组件的引用也是通过接口去调用所依赖的服务的。接口是用来定义业务功能的,一个服务只提供一个接口,一个接口可以定义一到多个操作,每个操作可以有一个请求(输入)消息和一个响应(输出)消息,也可以没有。请求和响应消息可以是简单类型如string,也可以是复杂类型。目前支持三种接口:java接口,wsdl1.1端口类型和wsdl2.0接口。如下:

<component name="OrderServiceComponent">
<implementation.java class="org.example.orderservice.OrderServiceImpl" />
<service name="OrderService">
<!--uri的格式为wsdl-namespace-uri/#wsdl.interface(portType or interface-name)-->
<interface.wsdl interface="http://www.example.org/OrderService/#wsdl.interface(OrderService)" />
<binding.ws uri="http://localhost:8085/OrderService"/>
</service>
</component>
或者
<interface.java interface="service.stockQuoteService" />


接口分为远程接口和本地接口,在java中通过@Remotable标记定义,WSDL接口都是远程的。远程指服务可以被运行在不同进程里(包括在不同机器上)的客户端调用。另外还有双向接口,会话接口。

//java中的远程接口定义
@Remotable
public interface HelloService{
String hello(String message);
}
<!--双向接口-->
<interface.java interface="" callbackInterface=""/>


绑定很重要,是指访问服务所使用的方式,在SCA中主要用在服务和引用里。在.composite中通过服务或引用中的binding元素定义

的,SCA支持的绑定类型有SCA服务、web服务、无状态会话bean、JMS绑定等。

<binding uri=""? name="" requires="" policySets=""/>


组件的服务描述了这个组件对外提供的业务功能。通常一个组件有若干个服务,每个服务包括一个接口和若干绑定,接口描述了服务

提供的操作,而绑定描述了该服务的访问方式。在.composite中用<service>元素定义。

组件的引用描述这个组件所依赖的外部服务。一个组件可能有若干引用,每个引用包括一个接口和若干绑定,接口描述了该引用需要

调用的操作,而绑定描述了该引用调用外部服务时使用的访问方式。

组件的属性用于配置这个组件的实现的属性,在.composite文件中用property元素定义。该元素有属性如下:

type和elment定义属性类型;source指向该组件的属性引用的模块的属性;file是一个文件的uri,文件内容就是组件属性的值。

SCA模块(composite)

SCA模块按照一定的逻辑划分对SCA组件进行分组和装配,是SCA域中的基本组合单元。一个模块包含若干组件、服务、引用和属性。

模块的服务是通过提升(promote)模块内部某个组件的服务而成的。同样模块的引用是通过提升内部某些组件的引用而成的。模块可以嵌套。

每个模块对应一个.composite文件。

模块的属性实际上是其内部组件的部分或全部属性。模块的服务来自哪一个组件服务,使用service元素的promote属性定义,属性值

的格式是“组件名/服务名”。模块的引用使用reference元素定义,promote属性定义该引用来自哪一个组件。参考以下.composite配置:

<composite name="myComposite">
<!--模块服务定义-->
<service name="myService" promote="myServiceComponent">
<interface.java interface="MyValueService"/>
<binding.ws port="http://www.value.org/myService#wsdl.endpoint(myService/myserviceSOAP)"/>
</service>
<!--模块引用定义-->
<reference name="stockService" promote="MyServiceComponent/StockService">
<interface.java interface="stockService" />
<binding.ws port="http://www.stock.org/stockService#wsdl.endpoint(stockService/StockServiceSOAP)"/>
</reference>


模块内部组件之间的连接是把源组件的引用连接到目标组件的服务上。有两种方式:一利用引用(reference)的target属性指定一个

引用要连接的服务;二是用模块(composite元素)的wire子元素定义从一个引用到一个服务的连接。参考如下.composite配置:

<composite name="">
<wire source="" target=""/>
<component name="">
<reference name="" target=""/>
</component>
</composite>


另外模块也可以做为组件的实现,我们在介绍组件实现的时候也提到过了,即<implementation.composite

name="模块名"/>。

SCA域(domain)

一个SCA域指一系列服务,它们提供了由某个组织进行控制的一组业务功能。是对模块的分组。包括:一个虚拟的域级模块,一系列

已安装的contribution,一系列逻辑服务。此概念比较抽象,在以后的具体工作中再理解补充。

常见的绑定

绑定用binding元素定义,常常出现在服务和引用里。有SCA绑定、Web服务绑定、JMS绑定。参考以下配置:

<binding.sca/>
<!--其中wsdlElement的值有四种格式:
1.服务,<wsdl-namespace-uri>#wsdl.service(<service-name>)
2.wsdl 1.1端口,<wsdl-namespace-uri>#wsdl.port(<service-name>/<port-name>)
3.wsdl 2.0端点,<wsdl-namespace-uri>#wsdl.endpoint(<service-name>/<endpoint-name>)
4.绑定,<wsdl-namespace-uri>#wsdl.binding(<binding-name)
-->
<binding.ws wsdlElement=""/>
<binding.jms/>


SCA编程模型的其他概念如策略框架、扩展模型等就不再介绍,概念太抽象,让我们在具体工作中体验和补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐