You know thats sounding good to me :) I don't have the time now but i'll add some comments on Monday.
...ant On Fri, Jan 29, 2010 at 9:43 PM, Raymond Feng <[email protected]> wrote: > Hi, > > I would like summarize our story for Domain/Node so that we can be on the > same page moving forward. > > A) The key players and steps: > > 1) The JVM is started > > 2) Tuscany runtime classes are loaded by the JVM into the one or more class > spaces (within a class space, there is at most one class for a given class > name): > * One class space per JVM (such as Tomcat deep integration or standalone > Tuscany launcher) > * Multiple class spaces (such as Web applications that package the Tuscany > jars) > > 3) Tuscany runtime is bootstrapped and NodeFactory can be instantiated to > encapsulate the ExtensionPointRegistry which manages all the extension > points and extensions in Tuscany. > * In most cases, NodeFactory.getInstance() returns the shared NodeFactory > * You can also call NodeFactory.newInstance() to creates a new instance > > 4) TBD: The NodeFactory can be configured with a mapping between domainURIs > and registryURIs so that NodeFactory knows the registryURI for a given > domain. > * The initial mapping can be populated by the hosting environment (for > example, from an property file) > * A map can be added to NodeFactory to allow it to be configured > programmatically. > > 5) The NodeFactory can eagerly lookup the DomainRegistryFactory and > create/start EndpointRegistry without creating a Node. > * OSGi remote services needs to start to receive remote endpoints before any > node is created. > * SCAClientFactory implementation may need to connect to a domain when it is > created > > 6) An EndpointRegistry is created (or reused) by a DomainRegistryFactory. > The domainURI and domainRegistryURI are both passed in so that the > DomainRegistryFactory can multiplex multiple SCA domains over the same > physical transport. > * For example, both Tribes and Hazelcast allows us to get a map by name from > the same multicast group. The map name can be used to represent an SCA > domain. > * Zookeeper can have different roots to represent different SCA domains in > the same ZooKeeper server. > > 7) Nodes can be created from NodeFactory. If a Node doesn't configure with a > domainRegistryURI (If we agree that 4 is a better approach, we can remove > the need to configure domainRegistryURI at Node level), the EndpointRegistry > will be looked up by the domain URI. NodeFactory maintains a list of Nodes > (potentially by domain) > > B) NodeFactory/Node as API or SPI > > At this point, we try to not add other Tuscany modules in the node-api > module and use reflection APIs to discover and invoke NodeImpl. That creates > some difficulty for the code that wants to use NodeFactory/Node as a SPI. > The later case wants to access more information from NodeFactory/Node, for > example, our client factory could get all the Nodes from the NodeFactory and > list the contributions and composites (including the service endpoints). > > Do we want to introduce subinterfaces for NodeFactory/Node as SPIs or it's > OK to add more dependencies into node-api? Some examples could be: > > NodeFactory.getExtensionPointRegistry(); > NodeFactory.getNodes(); > NodeFactory.getNodes(String domainURI); > NodeFactory.getNode(String domainURI, String nodeURI); > Node.getEndpointRegistry(); > Node.getDeploymentComposite(); > > Thanks, > Raymond > --- > Raymond Feng > Apache Tuscany PMC Member: http://tuscany.apache.org > Co-author of Tuscany In Action (A book on Tuscany SCA): > http://tuscanyinaction.com/ > www.enjoyjava.com > http://twitter.com/raymondfeng > > >
