diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-05 18:38:10 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-05 18:38:10 +0000 |
commit | b76e4724a219f78dab6f096591cf363223f7ca95 (patch) | |
tree | e6938eab287083ce50f675231f78a915d1ea3bac /java | |
parent | cfd54b41d2ffb276de0b33e291934c9d1d380156 (diff) |
Further refactor the CompositeContext to be the place to hold information about the Node
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@821953 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
6 files changed, 58 insertions, 40 deletions
diff --git a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/CompositeContext.java b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/CompositeContext.java index ee5482f07f..942f3bca78 100644 --- a/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/CompositeContext.java +++ b/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/CompositeContext.java @@ -19,20 +19,17 @@ package org.apache.tuscany.sca.context; -import java.util.ArrayList; -import java.util.List; - -import org.apache.tuscany.sca.assembly.Component; -import org.apache.tuscany.sca.assembly.ComponentService; +import org.apache.tuscany.sca.assembly.Composite; import org.apache.tuscany.sca.assembly.Endpoint; import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.invocation.Message; import org.apache.tuscany.sca.runtime.EndpointRegistry; import org.apache.tuscany.sca.runtime.RuntimeComponent; import org.apache.tuscany.sca.runtime.RuntimeComponentContext; -import org.oasisopen.sca.ServiceRuntimeException; /** + * The context associated with the Node that provides access to ExtensionPointRegistry and EndpointRegistry + * * @version $Rev$ $Date$ */ public abstract class CompositeContext { @@ -46,7 +43,7 @@ public abstract class CompositeContext { if (to == null) { return null; } - RuntimeComponent component = (RuntimeComponent) message.getTo().getComponent(); + RuntimeComponent component = (RuntimeComponent)message.getTo().getComponent(); return component; } return null; @@ -65,40 +62,23 @@ public abstract class CompositeContext { } /** - * @param component + * Attach a component context to the component + * @param runtimeComponent */ - public static ComponentService getSingleService(Component component) { - ComponentService targetService; - List<ComponentService> services = component.getServices(); - List<ComponentService> regularServices = new ArrayList<ComponentService>(); - for (ComponentService service : services) { - if (service.isForCallback()) { - continue; - } - String name = service.getName(); - if (!name.startsWith("$") || name.startsWith("$dynamic$")) { - regularServices.add(service); - } - } - if (regularServices.size() == 0) { - throw new ServiceRuntimeException("No service is declared on component " + component.getURI()); - } - if (regularServices.size() != 1) { - throw new ServiceRuntimeException("More than one service is declared on component " + component.getURI() - + ". Service name is required to get the service."); - } - targetService = regularServices.get(0); - return targetService; - } + public abstract void bindComponent(RuntimeComponent runtimeComponent); - public abstract void configureComponentContext(RuntimeComponent runtimeComponent); - + /** + * Get the ExtensionPointRegistry for this node + * @return The ExtensionPointRegistry + */ public abstract ExtensionPointRegistry getExtensionPointRegistry(); /** * Get the EndpointRegistry - * @return + * @return The EndpointRegistry for this node */ public abstract EndpointRegistry getEndpointRegistry(); + + public abstract Composite getDomainComposite(); } diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java index 838ab8a2a0..de9b575926 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/CompositeActivatorImpl.java @@ -496,7 +496,7 @@ public class CompositeActivatorImpl implements CompositeActivator { return; } - compositeContext.configureComponentContext(runtimeComponent); + compositeContext.bindComponent(runtimeComponent); // Reference bindings aren't started until the wire is first used diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java index 13b0299554..b88c395f31 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ComponentContextImpl.java @@ -20,6 +20,7 @@ package org.apache.tuscany.sca.core.context.impl; import java.util.ArrayList; import java.util.Collection; +import java.util.List; import org.apache.tuscany.sca.assembly.AssemblyFactory; import org.apache.tuscany.sca.assembly.Binding; @@ -160,8 +161,36 @@ public class ComponentContextImpl implements RuntimeComponentContext { throw new ServiceRuntimeException("Property not found: " + propertyName); } + /** + * @param component + */ + public static ComponentService getSingleService(Component component) { + ComponentService targetService; + List<ComponentService> services = component.getServices(); + List<ComponentService> regularServices = new ArrayList<ComponentService>(); + for (ComponentService service : services) { + if (service.isForCallback()) { + continue; + } + String name = service.getName(); + if (!name.startsWith("$") || name.startsWith("$dynamic$")) { + regularServices.add(service); + } + } + if (regularServices.size() == 0) { + throw new ServiceRuntimeException("No service is declared on component " + component.getURI()); + } + if (regularServices.size() != 1) { + throw new ServiceRuntimeException("More than one service is declared on component " + component.getURI() + + ". Service name is required to get the service."); + } + targetService = regularServices.get(0); + return targetService; + } + + public <B> ServiceReference<B> createSelfReference(Class<B> businessInterface) { - ComponentService service = CompositeContext.getSingleService(component); + ComponentService service = getSingleService(component); try { return createSelfReference(businessInterface, service); } catch (Exception e) { diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java index a1fc91e824..2bf4199f92 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java @@ -380,7 +380,7 @@ public class ServiceReferenceImpl<B> implements ServiceReferenceExt<B> { fromXMLString(); this.component = (RuntimeComponent)endpointReference.getComponent(); - compositeContext.configureComponentContext(this.component); + compositeContext.bindComponent(this.component); this.reference = (RuntimeComponentReference)endpointReference.getReference(); this.reference.setComponent(this.component); diff --git a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/CompositeContextImpl.java b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/CompositeContextImpl.java index 4a3366e6fb..54acece3cc 100644 --- a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/CompositeContextImpl.java +++ b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/CompositeContextImpl.java @@ -19,6 +19,7 @@ package org.apache.tuscany.sca.node.impl; +import org.apache.tuscany.sca.assembly.Composite; import org.apache.tuscany.sca.context.ComponentContextFactory; import org.apache.tuscany.sca.context.CompositeContext; import org.apache.tuscany.sca.context.ContextFactoryExtensionPoint; @@ -34,12 +35,14 @@ public class CompositeContextImpl extends CompositeContext { private final ExtensionPointRegistry extensionPointRegistry; private final EndpointRegistry endpointRegistry; private final ComponentContextFactory componentContextFactory; + private final Composite domainComposite; - public CompositeContextImpl(ExtensionPointRegistry registry, EndpointRegistry endpointRegistry) { + public CompositeContextImpl(ExtensionPointRegistry registry, EndpointRegistry endpointRegistry, Composite domainComposite) { this.extensionPointRegistry = registry; this.endpointRegistry = endpointRegistry; ContextFactoryExtensionPoint contextFactories = registry.getExtensionPoint(ContextFactoryExtensionPoint.class); this.componentContextFactory = contextFactories.getFactory(ComponentContextFactory.class); + this.domainComposite = domainComposite; } public ExtensionPointRegistry getExtensionPointRegistry() { @@ -50,10 +53,14 @@ public class CompositeContextImpl extends CompositeContext { return endpointRegistry; } - public void configureComponentContext(RuntimeComponent runtimeComponent) { + public void bindComponent(RuntimeComponent runtimeComponent) { RuntimeComponentContext componentContext = (RuntimeComponentContext)componentContextFactory.createComponentContext(this, runtimeComponent); runtimeComponent.setComponentContext(componentContext); } + public Composite getDomainComposite() { + return domainComposite; + } + } diff --git a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java index 86c693729b..aabb1c6abc 100644 --- a/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java +++ b/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java @@ -115,10 +115,10 @@ public class NodeImpl implements Node, Client { // FIXME: Get the endpoint registry by the Node configuration EndpointRegistry endpointRegistry = utilities.getUtility(EndpointRegistry.class); - this.compositeContext = new CompositeContextImpl(manager.extensionPoints, endpointRegistry); this.compositeActivator = utilities.getUtility(CompositeActivator.class); try { domainComposite = manager.configureNode(configuration, contributions); + this.compositeContext = new CompositeContextImpl(manager.extensionPoints, endpointRegistry, domainComposite); // Activate the composite compositeActivator.activate(domainComposite); @@ -189,6 +189,8 @@ public class NodeImpl implements Node, Client { manager.extensionPoints.getExtensionPoint(UtilityExtensionPoint.class).removeUtility(compositeActivator); this.compositeActivator = null; this.proxyFactory = null; + this.domainComposite = null; + this.compositeContext = null; ThreadMessageContext.removeMessageContext(); |