面向成功,实现梦想!

一起分享,一起成长,共创辉煌!
构客网首页  博客  论坛

 
  SOA我有话说
  本文的标签
SCA (收录6145篇)SOA我有话说 (收录163篇)SOA服务构造与实现 (收录34篇)
  用户信息
 
帐号:  新手必读
密码: 保存密码
 
  分类列表
全部类别(12 篇)
我的文章(12 篇)
  按月归档
2008年04月(4 篇)
2008年05月(6 篇)
2008年06月(1 篇)
2008年07月(1 篇)
  SOA2007 - SOA实践
我们何时迈向SOA
——SOA在中国的整体发展现状究竟如何?
我们如何迈向SOA
——中国企业如何迈出实施SOA的第一步?
我们应采用何种技术
——SOA国际标准SCA/SDO的具体内涵?
我们还需要何种技能
——SOA将如何改变系统架构设计以及项目管理过程?

SCA Assembly Model Specification V1.0.0 中文翻译(五)

发布时间:2008年05月07日 作者:liang_ma

阅读次数:403次 类别:我的文章 永久链接 Trackback 1条评论
参加SOA我有话说

此部分描述组装规范--1.6 构件(Composite)之引用(Reference)和服务(服务)。

 

1.6.2 引用(References

构件的引用定义为构件中组件的引用的提升。每一个提升的引用表示,这个组件引用必须由构件外面的服务解析。一个构件引用使用构件的reference元素提升。

构件引用使用reference元素表示,它是composite元素的子元素。一个composite可以有0或多个reference元素。下面的代码片段展示了包含reference元素的composite模式。


reference元素有下面的属性:

  1. <?xml version="1.0" encoding="ASCII"?>
  2. <!-- Reference schema snippet -->
  3. <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
  4.                targetNamespace="xs:anyURI"
  5.                name="xs:NCName" local="xs:boolean"? autowire="xs:boolean"?
  6.                constrainingType="QName"?
  7.               requires="list of xs:QName"? policySets="list of xs:QName"?>
  8. ...
  9.  
  10.      <reference name="xs:NCName" target="list of xs:anyURI"?
  11.                          promote="list of xs:anyURI" wiredByImpl="xs:boolean"?
  12.                          multiplicity="0..1 or 1..1 or 0..n or 1..n"?
  13.                          requires="list of xs:QName"? policySets="list of xs:QName"?>*
  14.           <interface/>?
  15.           <binding uri="xs:anyURI"? name="xs:QName"?
  16.                           requires="list of xs:QName" policySets="list of xs:QName"?/>*
  17.           <callback>?
  18.                <binding uri="xs:anyURI"? name="xs:QName"?
  19.                                 requires="list of xs:QName"?
  20.                                 policySets="list of xs:QName"?/>+
  21.           </callback>
  22.     </reference>
  23. ...
  24.  
  25. </composite>

 

l         name(必需):引用的名字。这个名字在构件所有的构件引用中必须唯一。构件引用的的名字可以和被提升的组件引用的名字不用。

l         promote(必需):标识1个或多个被提升的组件引用。它的值是一个形式为          <组件名>/<引用名>且由空格分开的列表。如果组件只有一个引用,引用名是可选的。

l         requires(可选):一个必需的策略意图列表。参见Policy Framework specification[10]

l         multiplicity(可选):连接引用到目标服务的连线的数目。可以有下面的值:

²        1..11个连线可以将这个引用作为源

²        0..101个连线可以将这个引用作为源

²        1..n1n个连线可以将这个引用作为源

²        0..n0n个连线可以将这个引用作为源

l         target(可选):目标服务URI中的一个或多个组成的列表,依赖于multiplicity的设置。每一个值连接此引用到一个构件(如A)中的服务,构件A使用包含此引用的构件作为它组件之一的实现。详见the section on Wires

l         wiredByImpl(可选):一个布尔值,默认为false,表示实现(implementation)自动连接引用。值为true时表示,引用的目标在运行时通过实现(implementation)的代码来设定(比如,通过使用相关ClientImplementation 规范定义的程序接口,以某种方式在代码中得到一个endpoint引用并设定它作为引用的目标)。如果它被设定为true,那么引用不应该在使用它的构件中静态地被连线,而是保持不连线状态。

可选地,构件引用可以指定一个interfacemultiplicityrequired intentsbindings。如果没有指定,它们的值将默认为被提升的组件引用里的值。

如果构件引用指定了一个interface元素,它必须提供一个这样的接口,这个接口与被提升的组件引用声明的接口一样,或者是与其兼容的超集。这个接口由01interface元素表述,interfacereference的子元素。更多关于interface元素的细节参见the Interface section

multiplicity属性值的指定一定要与组件引用指定的multiplicity一致,也就是说,它一定要与其相等或比其进一步严格。因此,在被提升的组件引用的multiplicity0..n1..n的地方,可以使用multiplicity分别为0..11..1的构件引用。然而,multiplicity0..n1..n的构件引用不能用来提升multiplicity分别为0..11..1的组件引用。

被指定的required intents添加到或进一步限定被提升组件引用中定义的required intents

如果1个或多个bindings被指定,它们会覆盖被提升组件引用中定义的任何一个或所有的bindings。组件引用中定义的绑定对构件里把组件引用作为源的局部连线依然有效。一个reference元素有0或多个biding子元素。binding元素的细节在Bindings section中描述。关于连线的更多细节参见the section on Wires

注意,binding元素可以指定一个终点(endpoint),它是binding的目标。一个reference不能混合使用binding元素指定的endpointtarget属性指定的endpoint。如果target属性被设定,那么binding元素只能列出一个或多个用来连线的绑定类型,这里连线(wires)由target属性标识。在这种情况下,所有被标识的用于每个连线的绑定类型都是可利用的。如果endpointsbinding元素里被指定,每一个endpoint必须使用binding元素里定义的绑定类型。另外,每个binding元素需要指定一个endpoint

reference元素有一个可选的callback元素,如果接口定义了一个回调接口,可以使用这个元素,它有1个或多个binding子元素。如果有必要知道处理回调的binding细节,可以指定callback及子元素binding。如果没有指定callback元素,则接口的行为依赖于运行时实现(runtime implementation)。

同一个组件引用可以使用不同的构件引用被提升多次,但这仅仅在组件引用定义的multiplicity0..n1..n时才被允许。相应地,要限制构件引用中的multiplicity

2个或多个组件引用仅仅在以下情况下可以被一个构件引用提升:

²        组件引用的接口是一样的,或者如果构件引用自身声明了一个接口(如A),那么所有的组件引用必须有和A兼容的接口。

²        组件引用的multiplicity是兼容的,比如一个是另一个的约束形式,这也意味着构件引用直接或间接地与此约束形式一致。

²        声明在构件引用中的意图(intent)必须一致,在这种情况下,应用于构件引用的意图是repuired intents的联合(union),这些required intents由每一个被提升的组件引用指定。如果intents间有任何矛盾(比如一个特殊意图不兼容的限定),将会发生错误。

1.6.2.1 引用举例(Example Reference

7展示了reference记号,它用来在一个组装图中表示一个引用。

   图7. Reference记号

 8展示了MyValueComposite的组装图,它包括两个引用CustomerServiceStockQuoteService

                               图8. MyValueComposite的组装图

下面的代码片段展示了MyValueComposite.composite文件,MyValueComposite构件包含了名为CustomerServiceStockQuoteServicereference元素。CustomerService引用被SCA绑定限制。StockQuoteService引用被Web service绑定限制。绑定的endpoint地址可以被指定,比如使用bindinguri属性(参见Bindings部分),或者被一个封装的构件覆盖。尽管StockQuoteService引用被一个Web Service限制,但是它的接口由Java接口定义,它的接口是从目标web serviceWSDL portType创建的。

 

  1. <?xml version="1.0" encoding="ASCII"?>
  2. <!-- MyValueComposite_3 example -->
  3. <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
  4.            targetNamespace="http://foo.com"
  5.            name="MyValueComposite" >
  6.  
  7. ...
  8.  
  9.     <component name="MyValueServiceComponent">
  10.         <implementation.java class="services.myvalue.MyValueServiceImpl"/>
  11.         <property name="currency">EURO</property>
  12.         <reference name="customerService"/>
  13.         <reference name="StockQuoteService"/>
  14.     </component>
  15.  
  16.     <reference name="CustomerService"
  17.                promote="MyValueServiceComponent/customerService">
  18.        <interface.java interface="services.customer.CustomerService"/>
  19.        <!-- The following forces the binding to be binding.sca whatever is -->
  20.        <!-- specified by the component reference or by the underlying -->
  21.        <!-- implementation -->
  22.        <binding.sca/>
  23.     </reference>
  24.  
  25.     <reference name="StockQuoteService"
  26.         promote="MyValueServiceComponent/StockQuoteService">
  27.        <interface.java interface="services.stockquote.StockQuoteService"/>
  28.        <binding.ws port="http://www.stockquote.org/StockQuoteService#
  29.            wsdl.endpoint(StockQuoteService/StockQuoteServiceSOAP)"/>
  30.     </reference>
  31.  
  32. ...
  33.  
  34. </composite>

   

1.6.3 服务(Service

构件的服务(services of a composite)通过提升包含在其内的组件所定义的服务来实现。一个组件服务通过构件中service元素得到提升。

一个构件服务由composite元素的子元素service表示。一个composite可以有0或多个service元素。下面的代码片段展示了带有service子元素的composite模式:

  1. <?xml version="1.0" encoding="ASCII"?>
  2. <!-- Servicee schema snippet -->
  3. <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
  4.      targetNamespace="xs:anyURI"
  5.      name="xs:NCName" local="xs:boolean"? autowire="xs:boolean"?
  6.      constrainingType="QName"?
  7.      requires="list of xs:QName"? policySets="list of xs:QName"?>
  8.  ...
  9.      <service name="xs:NCName" promote="xs:anyURI"
  10.          requires="list of xs:QName"? policySets="list of xs:QName"?>*
  11.         <interface/>?
  12.         <binding uri="xs:anyURI"? name="xs:QName"?
  13.             requires="list of xs:QName" policySets="list of xs:QName"?/>*
  14.         <callback>?
  15.            <binding uri="xs:anyURI"? name="xs:QName"?
  16.                requires="list of xs:QName"?
  17.                policySets="list of xs:QName"?/>+
  18.         </callback>
  19.      </service>
  20.  
  21. ...
  22.  
  23. </composite>

service元素有下列属性:

l         name(必需):服务的名称,它在此构件的所有构件服务中必须唯一。此构件服务的名称可以不同于被提升的组件服务的名称。

l         promote必需:标识被提升的服务,它是一个形式为<组件名>/<服务名>的值。如果目标组件只有一个服务,则此服务名是可选的。

l         requires(可选):策略意图列表,参考Policy Framework specification [10]

l         policySets(可选):策略集列表,参考Policy Framework specification [10]

构件服务可以选择地指定一个interfacerequired intentsbindings。如果没有指定,它们的值将默认为被提升的组件服务里的值。

    如果interface被指定,那么它必须与被提升的组件服务提供的接口一样或是与它兼容的一个子集,比如提供一个组件服务所定义的操作的子集。这个接口由01service元素的子元素interface描述。关于interface元素的细节参见the Interface section

被指定的required intents添加到或进一步限定被提升组件服务定义的required intents

如果bindings被指定,它们将覆盖被提升组件服务定义的bindings。组件服务中定义的绑定对构件里的目标是此组件服务的局部连线依然有效。一个service元素有0或多个biding子元素。binding元素的细节在Bindings section中描述。关于连线的更多细节参见the Wiring section

service元素有一个可选的callback元素,如果接口定义了一个回调接口,可以使用这个元素,它有1个或多个binding子元素。如果有必要了解处理回调的绑定细节,可以指定callback及子元素binding。如果没有指定callback元素,则接口的行为是依赖于运行时实现(runtime implementation)。

同一个组件服务可以被多个(大于1)构件服务提升。

1.6.3.1 服务举例(Service Examples

9展示了service记号,它用来表示组装图的一个服务:

                图9. service记号

10展示了包含MyValueService服务的MyValueComposite构件的组装图。

                   图10.  展示了服务的MyValueComposite构件

下面的代码片段展示了MyValueCompositeMyValueComposite.composite文件,这里MyValueComposite构件包含一个名为MyValueServiceservice元素的,这个服务是对MyValueServiceComponent组件提供的服务的一个提升。被提升服务的名字被忽略,因为MyValueServiceComponent仅仅提供了一个服务。构件服务MyValueService使用Web service绑定限定。

  1. <?xml version="1.0" encoding="ASCII"?>
  2. <!-- MyValueComposite_4 example -->
  3. <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
  4.     targetNamespace="http://foo.com"
  5.     name="MyValueComposite" >
  6.  
  7. ...
  8.  
  9.     <service name="MyValueService" promote="MyValueServiceComponent">
  10.         <interface.java interface="services.myvalue.MyValueService"/>
  11.         <binding.ws port="http://www.myvalue.org/MyValueService#
  12.             wsdl.endpoint(MyValueService/MyValueServiceSOAP)"/>
  13.     </service>
  14.  
  15.     <component name="MyValueServiceComponent">
  16.         <implementation.java class="services.myvalue.MyValueServiceImpl"/>
  17.         <property name="currency">EURO</property>
  18.         <service name="MyValueService"/>
  19.         <reference name="customerService"/>
  20.         <reference name="StockQuoteService"/>
  21.     </component>
  22.  
  23. ...
  24.  
  25. </composite>


    此部分结束。。。

 


本文参加了“SOA中国的关键任务”博客大赢家,评论文章即可参与活动,赢取万元奖金!

 评论 查看全部评论
 
wangfeng 于 2008-05-08
SCA规范的翻译工作已在满江红网站展开,本论坛版主ligang1111 已将此组装规范翻译完毕。如果楼主对此感兴趣,可以在满江红网站申请参加组装规范翻译的一审二审。 另外,还有部分规范待翻译,欢迎加入。