Tuscany Wiki > Home > SCA Java Project > Multiple bindings and reference multiplicity
Added by Raymond Feng, last edited by Raymond Feng on Jul 14, 2007  (view change)

Reference/Service Wiring Cases: 

Component Reference Component Service Effective Wire Normalized/Resolved Component Reference
<component name="C1">
            <reference name="R1" target="C2/S1">
                    <binding.sca/>
                    <binding.y/>
            </reference>
</component>
<component name="C2">
            <service name="S1">
                        <binding.sca/>
            </service>
</component>
C1/R1 -- binding.sca --> C2/S1
<reference name="R1"> 
        <binding.sca uri="C2/S1"/>
</reference>
  <component name="C2">
            <service name="S1">
                        <binding.y/>
            </service>
</component>
C1/R1 -- binding.y --> C2/S1 <reference name="R1"> 
        <binding.y uri="C2/S1"/>
</reference>
  <component name="C2">
            <service name="S1">
                        <binding.x/>
            </service>
</component>
Invalid (no matching binding) Invalid
<component name="C1">
            <reference name="R1" target="C2/S1 C3/S1">
                    <binding.sca/>
                    <binding.y/>
            </reference>
</component>
<component name="C2">
            <service name="S1">
                        <binding.sca/>
            </service>
</component>
<component name="C3">
            <service name="S1">
                        <binding.y/>
            </service>
</component>
Two wires:
1.     C1/R1-->C2/S1 (binding.sca)
2.     C1/R1-->C3/S1 (binding.y)
<reference name="R1">  
        <binding.sca uri="C2/S1"/> 
        <binding.y uri="C3/S1"/>
</reference>
<reference name="R1" multiplicity="1..1">
            <binding.x uri="http://a"/>
            <binding.y uri="http://b"/>
</reference>
  Is this valid to have more than bindings with explicit URIs
for a reference with multiplity 0..1 or 1..1?
Invalid
<reference name="R1" multiplicity="1..N">
            <binding.x uri="http://a"/>
            <binding.y uri="http://b"/>
</reference>
  Are there two wires?
C1/R1-->http://a (binding.x)
C1/R1-->http://b (binding.y)
Are the following references equivalent
if the multiplicity is 1..N or 0..N?
<reference name="R1" target="C2/S1 C3/S1">           
<binding.sca/>
</reference>
<reference name="R1">
            <binding.sca uri="C2/S1"/>
            <binding.sca uri="C3/S1"/>
</reference>
<reference name="R1">
            <binding.x uri="http://a"/>
            <binding.y uri="http://b"/>
</reference>

Reference Promotion Cases: (The inner component reference is promoted by a composite which is in turn configured by the outer component reference)

Inner Component Reference Composite Reference Outer Component Reference Effective Wire Normalized/Resolved Component Reference
Multiplicity = 1..1
<component name="C1">
    <reference name="R1" target="C2/S1">
    </reference>
</component>
<reference name="R1" promote="C1/R1">
<binding.x>
</reference>
<reference name="R1">
</reference>
C1/R1-->C2/S1 (binding.x)
<reference name="R1">  
        <binding.x uri="C2/S1"/> 
</reference>
Multiplicity = 1..1
<component name="C1">
    <reference name="R1" target="C2/S1">
    </reference></component>
<reference name="R1" promote="C1/R1">
        <binding.x>
</reference>
<reference name="R1" target="C3/S1">
</reference>
Is it valid to override the target?
Invalid (violates the multiplicity)
Multiplicity = 1..N
<component name="C1">
    <reference name="R1" target="C2/S1">
    </reference>
</component>
<reference name="R1" promote="C1/R1">
        <binding.x uri="http://a">
</reference>
<reference name="R1">
</reference>
C1/R1-->C2/S1 (binding.sca)
C1/R1-->http://a (binding.x)
(Spec line 1071: Component services and component references can be
promoted to composite services and references and also be wired internally
within the composite at the same time. For a reference, this only makes
sense if the reference supports a multiplicity greater than 1.)
<reference name="R1">  
        <binding.sca uri="C2/S1"/> 
        <binding.x uri=http://a/>
</reference>
Multiplicity = 1..N
<component name="C1">
    <reference name="R1" target="C2/S1">
    </reference></component>
<reference name="R1" promote="C1/R1">
</reference>
<reference name="R1" target="C3/S1">
</reference>
C1/R1-->C2/S1 (binding.sca)
C1/R1-->C3/S1 (binding.sca)?
<reference name="R1">  
        <binding.sca uri="C2/S1"/> 
        <binding.sca uri="C3/S1"/>
</reference>