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

日期: 2008-05-28 作者:liang_ma 来源:TechTarget中国

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


  1.6.2 引用(References)


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


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


  reference元素有下面的属性:


  <?xml version=”1.0″ encoding=”ASCII”?>
  <!– Reference schema snippet –>
  <composite http://www.osoa.org/
               name=”xs:NCName” local=”xs:boolean”?   autowire=”xs:boolean”?
               constrainingType=”QName”?
              requires=”list of xs:QName”? policySets=”list of   xs:QName”?>
  …
  
     <reference name=”xs:NCName” target=”list of xs:anyURI”?
                         promote=”list of xs:anyURI” wiredByImpl=”xs:boolean”?
                         multiplicity=”0..1 or 1..1 or 0..n or 1..n”?
                         requires=”list of xs:QName”? policySets=”list of xs:QName”?>*
          <interface/>?
          <binding uri=”xs:anyURI”? name=”xs:QName”?
                          requires=”list of xs:QName” policySets=”list of xs:QName”?/>*
          <callback>?
               <binding uri=”xs:anyURI”? name=”xs:QName”?
                                requires=”list of xs:QName”?
                                policySets=”list of xs:QName”?/>+
          </callback>
    </reference>

 
</composite>


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


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


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


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


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


  0..1,0或1个连线可以将这个引用作为源


  1..n,1或n个连线可以将这个引用作为源


  0..n,0或n个连线可以将这个引用作为源


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


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


  可选地,构件引用可以指定一个interface、multiplicity、required intents和bindings。如果没有指定,它们的值将默认为被提升的组件引用里的值。


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


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


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


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


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


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


  同一个组件引用可以使用不同的构件引用被提升多次,但这仅仅在组件引用定义的multiplicity为0..n或1..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的组装图,它包括两个引用CustomerService和StockQuoteService。



  图8. MyValueComposite的组装图


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


  <?xml version=”1.0″ encoding=”ASCII”?>
  <!– MyValueComposite_3 example –>
  <composite http://www.osoa.org/http://foo.com”>http://foo.com”
           name=”MyValueComposite” >
 
  …
 
    <component name=”MyValueServiceComponent”>
        <implementation.java class=”services.myvalue.MyValueServiceImpl”/>
        <property name=”currency”>EURO</property>
        <reference name=”customerService”/>
        <reference name=”StockQuoteService”/>
    </component>
 
    <reference name=”CustomerService”
               promote=”MyValueServiceComponent/customerService”>
       <interface.java interface=”services.customer.CustomerService”/>
       <!– The following forces the binding to be binding.sca whatever is –>
       <!– specified by the component reference or by the underlying –>
       <!– implementation –>
       <binding.sca/>
    </reference>
 
    <reference name=”StockQuoteService”
        promote=”MyValueServiceComponent/StockQuoteService”>
       <interface.java interface=”services.stockquote.StockQuoteService”/>
       <binding.ws port=”http://www.stockquote.org/StockQuoteService#
           wsdl.endpoint(StockQuoteService/StockQuoteServiceSOAP)”/>
    </reference>
 
  …
 
  </composite>


  1.6.3 服务(Service)


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


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


  <?xml version=”1.0″ encoding=”ASCII”?>
  <!– Servicee schema snippet –>
  <composite http://www.osoa.org/
     name=”xs:NCName” local=”xs:boolean”? autowire=”xs:boolean”?
     constrainingType=”QName”?
     requires=”list of xs:QName”? policySets=”list of xs:QName”?>
 …


     <service name=”xs:NCName” promote=”xs:anyURI”
         requires=”list of xs:QName”? policySets=”list of xs:QName”?>*
        <interface/>?
        <binding uri=”xs:anyURI”? name=”xs:QName”?
            requires=”list of xs:QName” policySets=”list of xs:QName”?/>*
        <callback>?
           <binding uri=”xs:anyURI”? name=”xs:QName”?
               requires=”list of xs:QName”?
               policySets=”list of xs:QName”?/>+
        </callback>
     </service>
 
  …
 
  </composite>


  service元素有下列属性:


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


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


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


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


  构件服务可以选择地指定一个interface、required intents和bindings。如果没有指定,它们的值将默认为被提升的组件服务里的值。
 
  如果interface被指定,那么它必须与被提升的组件服务提供的接口一样或是与它兼容的一个子集,比如提供一个组件服务所定义的操作的子集。这个接口由0或1个service元素的子元素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构件


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


  <?xml version=”1.0″ encoding=”ASCII”?>
  <!– MyValueComposite_4 example –>
  <composite http://www.osoa.org/http://foo.com”>http://foo.com”
    name=”MyValueComposite” >
 

 
    <service name=”MyValueService” promote=”MyValueServiceComponent”>
        <interface.java interface=”services.myvalue.MyValueService”/>
        <binding.ws port=”http://www.myvalue.org/MyValueService#
            wsdl.endpoint(MyValueService/MyValueServiceSOAP)”/>
    </service>
 
    <component name=”MyValueServiceComponent”>
        <implementation.java class=”services.myvalue.MyValueServiceImpl”/>
        <property name=”currency”>EURO</property>
        <service name=”MyValueService”/>
        <reference name=”customerService”/>
        <reference name=”StockQuoteService”/>
    </component>
 
  …
 
  </composite>


  此部分结束。。。


  原文出处:http://gocom.primeton.com/blog9589_35328.htm

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

liang_ma
liang_ma

相关推荐

  • 联合创新,携手共赢 华为与Commvault签署全球合作联盟协议

    【中国,上海,2015年9月19日】在2015年华为云计算大会上,全球领先的信息与通信解决方案供应商华为与美国知名的数据管理软件及相关服务主要供应商Commvault签署全球合作联盟协议。基于合作协议,双方将会加大投入数据中心备份解决方案在云化环境下的“可服务化”技术研究 。Commvault公司全球业务发展副总裁Andreas May、华为IT数据中心解决方案总裁马力出席签约仪式。

  • 松散耦合的七个级别

    在软件领域,“耦合”一般指软件组件之间的依赖程度。那么,什么是依赖?各种依赖对耦合度和松散度有多大影响?软件耦合可以发生在许多级别。必须区分生成时(编译时)依赖和运行时依赖。在分布环境中,为了确定系统的耦合程度,必须分析各个级别。下面我们就来具体看一下。

  • 数据虚拟化:数据整合问题的解决方案?

    数据整合是一个非常困难的问题,但是据专家称,一种相对新颖的信息管理方法可以帮助人们解决这个问题,即数据虚拟化。让我们来看看具体是如何解决的?

  • 四月最受欢迎文章TOP 5

    四月份SOA网站最受欢迎的文章有哪些?你了解服务和耦合的真正意义吗?“云”是否将标志着JVM的崛起?CIO选择开源SOA中间件行之有效吗?下面我们为您解密。