SCA概念与应用实践(7.SCA装配模型--7.6服务service & 7.7引用reference)

来源:互联网 发布:php与或非逻辑符号 编辑:程序博客网 时间:2024/06/11 11:28

7.6.        服务(Service

Service有两种,component上的servicecomposite上的service(最上层compositeservice也可称为applicationservice)。属性上只有一个差别,就是compositeservice有一个属性promote,他是表示这个属性是由哪个component的哪个service提升来的。查看Restaurant2.compositecomposite service的定义

  <sca:service name="RestaurantService" promote="RestaurantServiceComponent/RestaurantService"/>

通过promote,我们知道这个serviceRestaurantServiceComponentRestaurantService提升来的,实际是由RestaurantServiceComponent提供服务的实现。

Eclipse SCA tools composite service的属性

7_6_1

7_6_1

Promote2提供一个下拉列表来选择service

Service上要添加interface,这个前面介绍过了。Service上还要添加binding,这个后面节说明。

Policy setsrequires也是后面介绍。

 

7.7.        引用(Reference

Reference同样有component上的reference,和composite上的reference。属性上差别在于component上的referenceautowirecomposite上的没有。Compositereferencepromote

7.7.1.       Component reference

打开Restaurant2.composite,可以看到reference的定义。

<sca:component name="RestaurantServiceComponent">

    <sca:implementation.java class="restaurant2.lib.RestaurantServiceImpl"/>

    <sca:reference name="menuService"/>

    <sca:reference name="billService"/>

    <sca:service name="RestaurantService">

      <sca:interface.wsdl interface="http://api.restaurant2/#wsdl.interface(RestaurantService)"/>

      <sca:binding.ws uri="http://localhost:8085/RestaurantService"/>

    </sca:service>

  </sca:component>

    这里定义的很简单,我们在diagram上看一下他的属性。

 

7_7_1

7_7_1

Name:必填

Autowire:自动连接,这个在后面说明

Policy sets requires也在后面说明

Multiplicity,这个reference可以被wire的次数。0..1就是可以被wire01次。这个是下拉列表,还可以选1..1, 0..n, 1..n

Target一个或多个serviceURI,依赖于multiplicty的值

Target2 是用来选择service的,不是reference的属性

WireByImpl。默认值是false,在实现里动态地连线wirereferenceservice。如果设为“true”,表示这个reference wireservice由实现代码在“运行时(runtime)”里设置(比如,通过某种方式由代码获得一个endpoint reference,然后使用程序接口来设置它为当前referencetarget)。如果值为”true”,那么reference不用被wire

Tuscany1.x没有对WireByImpl这个属性提供支持。

 

7.7.2.       Composite reference

它一个属性就是promote,表示这个composite reference是由哪个component reference提升来的。Promote可能包含多个值,因为多个component reference可以提升到同一个composite reference。这个必须满足以下三个条件:

(1)       componentreferenceinterface是相同,或者,如果compositereference声明了一个interface,那么所有的componentreference必须与该interface兼容

(2)       componentreferencemultiplicity兼容

3   componentreference上声明的intents必须兼容 这种情况下,应用于composite reference上的intents是所有被promotecomponentreferenceintents的合集。如果有任何intents冲突,则不可以。

如果指定了interface,那么该interface必须与被promotecomponent referenceinterface 相同,或者前者是后者的超集。

multiplicity属性的值必须与component referencemultiplicity的值相同或进行更进一步的限制。比如component referencemultiplicity 1..n,那么composite referencemultiplicity可以为1..1, 或者1..n, 不能是0..n

 

原创粉丝点击