Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

Early Binding

With the workspace in Tuscany all the information is available to resolve all the references with targets in the domain. An input set of composites such as:

No Format
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
           targetNamespace="http://primary"
           xmlns:primary="http://primary"
           xmlns:dependent="http://dependent"
           name="CalculatorA">
           
    <include name="dependent:CalculatorB"/>

    <component name="CalculatorServiceComponentA">
		<implementation.java class="calculator.CalculatorServiceImpl"/>
        <service name="CalculatorService">
            <binding.sca/>
        </service>		
        <reference name="addService" target="AddServiceComponentA AddServiceComponentB">
          <binding.sca/>
          <binding.ws/>
        </reference>
        <reference name="subtractService" target="SubtractServiceComponentB" />
        <reference name="multiplyService" target="MultiplyServiceComponentA" />     
        <reference name="divideService" target="DivideServiceComponentA" />
    </component>  

    <component name="AddServiceComponentA">
        <implementation.java class="calculator.AddServiceImpl" />
        <service name="AddService">
            <binding.sca/>
        </service>
    </component>
    
    <component name="MultiplyServiceComponentA">
        <implementation.java class="calculator.MultiplyServiceImpl" />
    </component>    
    
    <component name="DivideServiceComponentA">
        <implementation.java class="calculator.DivideServiceImpl" />
    </component>

</composite>
No Format
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
           targetNamespace="http://dependent"
           xmlns:dependent="http://dependent"
           name="CalculatorB">
               
    <component name="AddServiceComponentB">
        <implementation.java class="calculator.AddServiceImpl" />
        <service name="AddService">
            <binding.ws uri="http://L3AW203:8085/AddServiceComponentB"/>
        </service>
    </component>
    
    <component name="SubtractServiceComponentB">
        <implementation.java class="calculator.SubtractServiceImpl" />
    </component>    
    
</composite>

Will result in the following resolved composite (which is actually invalid as it defines both reference targets and binding URIs on the same reference - They just happen to be consistent in this case)

No Format
<?xml version='1.0' encoding='UTF-8'?>
<composite targetNamespace="http://primary" name="CalculatorA"
	xmlns="http://www.osoa.org/xmlns/sca/1.0">
	<component name="CalculatorServiceComponentA"
		uri="CalculatorServiceComponentA">
		<implementation.java class="calculator.CalculatorServiceImpl" />
		<service name="CalculatorService">
			<interface.java interface="calculator.CalculatorService" />
			<binding.sca name="CalculatorService"
				uri="/CalculatorServiceComponentA" />
			<callback />
		</service>
		<reference name="addService"
			target="AddServiceComponentA AddServiceComponentB">
			<interface.java interface="calculator.AddService" />
			<binding.sca
				name="addService#AddServiceComponentA/AddService"
				uri="/AddServiceComponentA" />
			<binding.ws
				name="addService#AddServiceComponentB/AddService"
				uri="http://L3AW203:8085/AddServiceComponentB" />
			<callback />
		</reference>
		<reference name="subtractService"
			target="SubtractServiceComponentB">
			<interface.java interface="calculator.SubtractService" />
			<binding.sca
				name="subtractService#SubtractServiceComponentB/SubtractService"
				uri="/SubtractServiceComponentB" />
			<callback />
		</reference>
		<reference name="multiplyService"
			target="MultiplyServiceComponentA">
			<interface.java interface="calculator.MultiplyService" />
			<binding.sca
				name="multiplyService#MultiplyServiceComponentA/MultiplyServiceImpl"
				uri="/MultiplyServiceComponentA" />
			<callback />
		</reference>
		<reference name="divideService"
			target="DivideServiceComponentA">
			<interface.java interface="calculator.DivideService" />
			<binding.sca
				name="divideService#DivideServiceComponentA/DivideServiceImpl"
				uri="/DivideServiceComponentA" />
			<callback />
		</reference>
	</component>
	<component name="AddServiceComponentA" uri="AddServiceComponentA">
		<implementation.java class="calculator.AddServiceImpl" />
		<service name="AddService">
			<interface.java interface="calculator.AddService" />
			<binding.sca name="AddService" uri="/AddServiceComponentA" />
			<callback />
		</service>
	</component>
	<component name="MultiplyServiceComponentA"
		uri="MultiplyServiceComponentA">
		<implementation.java class="calculator.MultiplyServiceImpl" />
		<service name="MultiplyServiceImpl">
			<interface.java interface="calculator.MultiplyServiceImpl" />
			<binding.sca name="MultiplyServiceImpl"
				uri="/MultiplyServiceComponentA" />
			<callback />
		</service>
	</component>
	<component name="DivideServiceComponentA"
		uri="DivideServiceComponentA">
		<implementation.java class="calculator.DivideServiceImpl" />
		<service name="DivideServiceImpl">
			<interface.java interface="calculator.DivideServiceImpl" />
			<binding.sca name="DivideServiceImpl"
				uri="/DivideServiceComponentA" />
			<callback />
		</service>
	</component>
	<component name="AddServiceComponentB" uri="AddServiceComponentB">
		<implementation.java class="calculator.AddServiceImpl" />
		<service name="AddService">
			<interface.java interface="calculator.AddService" />
			<binding.ws name="AddService"
				uri="http://L3AW203:8085/AddServiceComponentB" />
			<callback />
		</service>
	</component>
	<component name="SubtractServiceComponentB"
		uri="SubtractServiceComponentB">
		<implementation.java class="calculator.SubtractServiceImpl" />
		<service name="SubtractService">
			<interface.java interface="calculator.SubtractService" />
			<binding.sca name="SubtractService"
				uri="/SubtractServiceComponentB" />
			<callback />
		</service>
	</component>
</composite>

Late Binding

In the late binding case reference endpoints are not know until runt time. Hence a reference/target can remain unresolved until this point.