On 8/30/07, Simon Laws <[EMAIL PROTECTED]> wrote:
>
> We now have a number of domain implementations in Tuscany Java SCA
> including
>
> - The SCADomain interface
> - DefaultSCADomain
> - EmbeddedSCADomain
> - HotUpdatableSCADomain
> - DistributedDomain/Node
>
> Covering a number of scenarios
>
> - running a domain in a single node
> - running a domain across multiple nodes
> - Adding, removing, updating the contributions of a domain through the API
> and automatically
> - Activating/deactivating, starting/stopping deployable composites through
> the API
> - Starting, stopping components through the API
> - Locating service in the domain through the API
> etc.
>
> There are some scenarios that we don't cover at the moment
>
> - running multiple domains in a VM
> What else?
>
> I would like to propose that we rationalize these various implementations
> down to a more manageable number. I have a simple model in my mind of the
> building blocks we have to deal with.
>
> 1/ The node.
>    Is responsible for running segregated domains in a VM
>    Associated with zero or more domains.
> 2/ The domain.
>    Logically knows about all of the artifacts of a domain.
>    Associated with one or more (in the distributed case) nodes.
>    A local representation of the domain (the SCADomain object) provides
> the
> interface to wider domain
>
> There are some subtleties here about the timing of associating a domain
> with
> a node(s) but the simple case, which we implement at the moment,
> is if you start a domain, start a node, associate the two together and
> then
> add contributions. The contributed components run on the node with which
> the local domain object is associated (more complex node/component
> selection
> algorithms can be imagined but we don't do this at present).
>
> Here are some suggestions based on the interfaces from the list of
> existing
> domain classes above, of the kind of things we need to be able to do;
>
> Domain
>   Create/destroy the domain based on its URI
>     Act of creating a domain object with a globally unique URI means that
> it
> becomes part of that domain and can scope comonent invocations in
>     the context of that domain.
>     There should be a default hot update location if we want to maintain
> that feature.
>   Contribution management
>     Add/remove contributions
>       Resulting composites/components sit ready to be started
>   Composite Management
>     Start/stop  composite
>       Akin to adding a composite to the domain composite and activating it
>       Not sure how we identify a composite to be activated - by composite
> name? Currently it's done with a reference to the composite object
>     Do we need to expose separate activation operations?
>   Component Management
>     Start/stop component
>     Add.Remove listener
>       Not sure how the listener from the current interface is going to be
> used
>     getComponentInfo
>     There are some existng related component management interfaces here
> also
>   LocateService
>       public abstract <B, R extends CallableReference<B>> R cast(B target)
>       public abstract <B> B getService(Class<B> businessInterface, String
> serviceName);
>          service name -> component name / service name
>       public abstract <B> ServiceReference<B> getServiceReference(Class<B>
> businessInterface, String referenceName);
>
>   We also need the domain to provide some systematic interfaces to support
> distributed operation, for example,
>
>   ServiceDiscovery
>       register/find service endpoint
>
> Node
>   Create/destroy the node based on its URI
>   Add/remove an association with a domain
>   start/stop a nodes activity
>
> Currently we have an approach, with the EmbeddedSCADomain, where the class
> vends a series of management interfaces, contribution, model building etc.
> for performing actions on the domain. This is useful as it allows
> flexibility in how these management actions are implemented without
> changing
> all
> of the domain implementation. It would also be appropriate, in the future,
> to expose some of these interfaces as services to allow for remote
> management of the
> domain at a node.
>
> Would welcome thoughts about this generally. Also specifically do we need
> to
> maintain the detailed interfaces provided with EmbeddedSCADomain alongside
> this.


Just to add to this that the Geronimo integration [1] also does very similar
stuff to the HotUpdatableSCADomain (which is used by the webapp distro), and
that neither of those work properly anymore, see TUSCANY-1555. Actually i'm
not sure that the EmbeddedSCADomain works properly now either as it seems to
have fallen behind a bit of some of the changes.

Would be great to sort this out and have more of a proper SPI to bootstrap a
runtime, and i'd help it even if nothing else by getting the webapp distro
to work with it to help validate the interfaces work.

   ...ant

[1]
https://svn.apache.org/repos/asf/geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/EmbeddedRuntimeGBean.java

Reply via email to