[snip]
Simon Laws wrote:
Ok, I've taken the next step here and have a distributed runtime example
running in my sandbox. A sample calculator application [1] showing the
disitributed runtime in action and a module containing the changes I had to
make to the runtime to get this to work [2]. The changes are actually
trivial but getting them in the appropriate place was a bit of a challenge.

Looking at the sample first I have, for the purposes of this example, chosen to extend the SCDL model with extra attributes to indicate which runtime a
component will run in.

<component name="CalculatorServiceComponent" runtimeId="sca://mydomain/A">

This information could have been conveyed in many other ways so alternative
suggestions are welcome.

This is a pretty nice starting point.

I would suggest to try to separate the topology description information from the logical SCA domain composition:
- what runtimes are available
- for each runtime:
- the (logical) addresses at which it can be reached for each SCA binding type
   - the components allocated to that runtime

Here are two suggestions for doing this:

A topology.config file, something like that:

runtimeA:
 binding.ws: http://localhost:8080/acbd
 binding.sca: http://localhost:1234
 binding.jsonrpc: http://localhost:8085/jsonxyz
 components: CalculatorServiceComponent, AddServiceComponent

runtimeB:
 binding.ws: http:myotherhost:6060/tuvw
 binding.sca: http://myotherhost:5678
components: MultiplyServiceComponent, SubtractServiceComponent, DivideServiceComponent

or a topology.xml file, where we would actually describe the SCA runtimes, their configuration and how they are assembled on a network using an SCA assembly:

topology.xml
<composite>
 <component name="runtimeA>
   <service>
     <binding.ws uri="http://localhost:8080/acbd"/>
     <binding.jsonrpc uri="http://localhost:8085/jsonxyz"/>
     <binding.sca uri="http://localhost:1234"/>
   </service>
   <implementation.container>
     <component name="CalculatorServiceComponent"/>
     <component name="AddServiceComponent"/>
  </implementation.container>
 </component>

 <component name="runtimeB">
   <service>
     <binding.ws uri="http://myotherhost:6060/tuvw"/>
     <binding.sca uri="http://myotherhost:5678"/>
   </service>
   <implementation.container>
     <component name="MultiplyServiceComponent"/>
     <component name="SubtractServiceComponent"/>
     <component name="DivideServiceComponent"/>
  </implementation.container>
 </component>
</composite>

What I find interesting with that second form - apart from the fact that the user won't have to learn another configuration language if he already knows SCA - is that we could use the <binding.*> configurations in that topology file to host default configuration for the bindings described in the SCA domain.

Then the notation that you're proposing with the runtime ID inlined in the SCA domain logical assembly could be supported as well, but as a progressive/shortcut option for want to inline the runtime allocation in their SCA domain composite. However, we would have the capability, in our underlying configuration model and runtime implementation to completely separate the logical SCA domain composition and the topology description, which are really two different dimensions of the configuration of a service network.

Thoughts?


[1]
http://svn.apache.org/repos/asf/incubator/tuscany/sandbox/slaws/calculator-distributed/ [2] http://svn.apache.org/repos/asf/incubator/tuscany/sandbox/slaws/disitributed-changes/

[3] http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg18242.html


--
Jean-Sebastien


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to