Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemModuleImpl.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemModuleImpl.java?rev=389638&view=auto ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemModuleImpl.java (added) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/assembly/impl/SystemModuleImpl.java Tue Mar 28 16:18:28 2006 @@ -0,0 +1,266 @@ +/** + * + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.tuscany.core.system.assembly.impl; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.tuscany.core.system.assembly.SystemModule; +import org.apache.tuscany.model.assembly.AssemblyFactory; +import org.apache.tuscany.model.assembly.AssemblyModelContext; +import org.apache.tuscany.model.assembly.AssemblyModelVisitor; +import org.apache.tuscany.model.assembly.Component; +import org.apache.tuscany.model.assembly.ComponentType; +import org.apache.tuscany.model.assembly.ConfiguredProperty; +import org.apache.tuscany.model.assembly.ConfiguredReference; +import org.apache.tuscany.model.assembly.ConfiguredService; +import org.apache.tuscany.model.assembly.EntryPoint; +import org.apache.tuscany.model.assembly.ExternalService; +import org.apache.tuscany.model.assembly.ModuleFragment; +import org.apache.tuscany.model.assembly.Multiplicity; +import org.apache.tuscany.model.assembly.OverrideOption; +import org.apache.tuscany.model.assembly.Reference; +import org.apache.tuscany.model.assembly.Service; +import org.apache.tuscany.model.assembly.ServiceContract; +import org.apache.tuscany.model.assembly.ServiceURI; +import org.apache.tuscany.model.assembly.Wire; +import org.apache.tuscany.model.assembly.impl.AggregateImpl; + +/** + * An implementation of Module. + */ +public class SystemModuleImpl extends AggregateImpl implements SystemModule { + + private List<ModuleFragment> moduleFragments = new ArrayList<ModuleFragment>(); + private Map<String, ModuleFragment> moduleFragmentsMap; + private ComponentType componentType; + private Object contextFactory; + + /** + * Constructor + */ + protected SystemModuleImpl() { + } + + /** + * @see org.apache.tuscany.model.assembly.ComponentImplementation#getComponentType() + */ + public ComponentType getComponentType() { + return componentType; + } + + /** + * @see org.apache.tuscany.model.assembly.ComponentImplementation#setComponentType(org.apache.tuscany.model.assembly.ComponentType) + */ + public void setComponentType(ComponentType componentType) { + checkNotFrozen(); + this.componentType=componentType; + } + + /** + * @see org.apache.tuscany.model.assembly.Module#getModuleFragments() + */ + public List<ModuleFragment> getModuleFragments() { + return moduleFragments; + } + + /** + * @see org.apache.tuscany.model.assembly.Module#getModuleFragment(java.lang.String) + */ + public ModuleFragment getModuleFragment(String name) { + checkInitialized(); + return moduleFragmentsMap.get(name); + } + + /** + * @see org.apache.tuscany.model.assembly.AssemblyModelObject#initialize(org.apache.tuscany.model.assembly.AssemblyModelContext) + */ + public void initialize(AssemblyModelContext modelContext) { + if (isInitialized()) + return; + + // Populate map of module fragments + moduleFragmentsMap = new HashMap<String, ModuleFragment>(); + for (ModuleFragment moduleFragment : moduleFragments) { + moduleFragmentsMap.put(moduleFragment.getName(), moduleFragment); + + // Add all WSDL imports, components, entry points and external services from the module fragments + getWSDLImports().addAll(moduleFragment.getWSDLImports()); + getComponents().addAll(moduleFragment.getComponents()); + getEntryPoints().addAll(moduleFragment.getEntryPoints()); + getExternalServices().addAll(moduleFragment.getExternalServices()); + + // Add all the wires from the module fragments + getWires().addAll(moduleFragment.getWires()); + + moduleFragment.initialize(modelContext); + } + + // Initialize the aggregate + super.initialize(modelContext); + + // Derive the component type from the entry points and external services in the module + // Also derive properties from the overridable properties of the components in the module + if (componentType==null) { + AssemblyFactory factory = modelContext.getAssemblyFactory(); + componentType = factory.createComponentType(); + for (EntryPoint entryPoint : getEntryPoints()) { + Service service = factory.createService(); + service.setName(entryPoint.getName()); + ServiceContract serviceContract = entryPoint.getConfiguredService().getService().getServiceContract(); + if (serviceContract != null) + service.setServiceContract(serviceContract); + componentType.getServices().add(service); + + ConfiguredReference configuredReference = entryPoint.getConfiguredReference(); + ServiceURI sourceURI = factory.createServiceURI(null, entryPoint, configuredReference); + for (String target : configuredReference.getTargets()) { + ServiceURI targetURI =factory.createServiceURI(null, target); + Wire wire=factory.createWire(); + wire.setSource(sourceURI); + wire.setTarget(targetURI); + getWires().add(wire); + } + } + for (ExternalService externalService : getExternalServices()) { + if (externalService.getOverrideOption()==null || externalService.getOverrideOption()==OverrideOption.NO) + continue; + Reference reference = factory.createReference(); + reference.setName(externalService.getName()); + ServiceContract serviceContract = externalService.getConfiguredService().getService().getServiceContract(); + if (serviceContract != null) + reference.setServiceContract(serviceContract); + componentType.getReferences().add(reference); + } + for (Component component : getComponents()) { + for (ConfiguredProperty configuredProperty : component.getConfiguredProperties()) { + if (configuredProperty.getOverrideOption()==null || configuredProperty.getOverrideOption()==OverrideOption.NO) + continue; + componentType.getProperties().add(configuredProperty.getProperty()); + } + + for (ConfiguredReference configuredReference : component.getConfiguredReferences().values()) { + // Create a wire + ServiceURI sourceURI =factory.createServiceURI(null, component, configuredReference); + for (String target : configuredReference.getTargets()) { + ServiceURI targetURI =factory.createServiceURI(null, target); + Wire wire=factory.createWire(); + wire.setSource(sourceURI); + wire.setTarget(targetURI); + getWires().add(wire); + } + } + } + } + componentType.initialize(modelContext); + + + // Wire the module parts + for (Wire wire : getWires()) { + + // Get the source reference + ServiceURI sourceURI=wire.getSource(); + ConfiguredReference configuredReference = null; + String partName = sourceURI.getPartName(); + String referenceName = sourceURI.getServiceName(); + if (referenceName != null) { + Component component = getComponent(partName); + if (component != null) { + configuredReference = component.getConfiguredReference(referenceName); + } + } else { + EntryPoint entryPoint = getEntryPoint(partName); + if (entryPoint != null) { + configuredReference = entryPoint.getConfiguredReference(); + } + } + if (configuredReference == null) { + throw new IllegalArgumentException("Cannot find wire source " + sourceURI.getAddress()); + } else { + + // Resolve the target service endpoint + ServiceURI targetURI = wire.getTarget(); + ConfiguredService configuredService = getConfiguredService(targetURI); + if (configuredService != null) { + + // Wire the reference to the target + Multiplicity multiplicity=configuredReference.getReference().getMultiplicity(); + if (multiplicity==Multiplicity.ZERO_N || multiplicity==Multiplicity.ONE_N) { + configuredReference.getTargetConfiguredServices().add(configuredService); + } else { + configuredReference.getTargetConfiguredServices().clear(); + configuredReference.getTargetConfiguredServices().add(configuredService); + } + } else { + throw new IllegalArgumentException("Cannot find service for " + targetURI.getAddress()); + } + } + } + } + + /** + * @see org.apache.tuscany.model.assembly.AssemblyModelObject#freeze() + */ + public void freeze() { + if (isFrozen()) + return; + super.freeze(); + + // Freeze component type and module fragments + if (componentType!=null) + componentType.freeze(); + moduleFragments=Collections.unmodifiableList(moduleFragments); + freeze(moduleFragments); + } + + /** + * @see org.apache.tuscany.model.assembly.ContextFactoryHolder#getContextFactory() + */ + public Object getContextFactory() { + return contextFactory; + } + + /** + * @see org.apache.tuscany.model.assembly.ContextFactoryHolder#setContextFactory(java.lang.Object) + */ + public void setContextFactory(Object configuration) { + checkNotFrozen(); + this.contextFactory = configuration; + } + + /** + * @see org.apache.tuscany.model.assembly.impl.AggregateImpl#accept(org.apache.tuscany.model.assembly.AssemblyModelVisitor) + */ + public boolean accept(AssemblyModelVisitor visitor) { + if (!super.accept(visitor)) + return false; + + if (componentType!=null) { + if (!componentType.accept(visitor)) + return false; + } + + if (!accept(moduleFragments, visitor)) + return false; + + return true; + } + +}
Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemContextFactoryBuilder.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemContextFactoryBuilder.java?rev=389638&r1=389637&r2=389638&view=diff ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemContextFactoryBuilder.java (original) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/builder/SystemContextFactoryBuilder.java Tue Mar 28 16:18:28 2006 @@ -52,6 +52,7 @@ import org.apache.tuscany.core.system.annotation.Autowire; import org.apache.tuscany.core.system.annotation.ParentContext; import org.apache.tuscany.core.system.assembly.SystemImplementation; +import org.apache.tuscany.core.system.assembly.SystemModule; import org.apache.tuscany.core.system.config.SystemContextFactory; import org.apache.tuscany.core.system.context.SystemAggregateContextImpl; import org.apache.tuscany.core.system.injection.AutowireObjectFactory; @@ -141,11 +142,13 @@ // of system module component context implClass = SystemAggregateContextImpl.class; scope = Scope.AGGREGATE; - + } else if (componentImplementation instanceof SystemModule){ + implClass = SystemAggregateContextImpl.class; + scope = Scope.AGGREGATE; } else { - // The component is an app module component, fix the implementation class to our implementation // of app module component context + //FIXME this should be extensible, i.e. the model should specify the impl class of the module implClass = AggregateContextImpl.class; scope = Scope.AGGREGATE; } Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemContextFactory.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemContextFactory.java?rev=389638&r1=389637&r2=389638&view=diff ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemContextFactory.java (original) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/config/SystemContextFactory.java Tue Mar 28 16:18:28 2006 @@ -20,13 +20,13 @@ import org.apache.tuscany.model.assembly.Scope; /** - * A <code>ContextFactory</code> that handles system component implementation types, which may be either simple, - * leaf types or an aggregates. + * A <code>ContextFactory</code> that handles system component implementation types, which may be either simple, leaf + * types or an aggregates. * <p> * For aggregate types, this factory delegates to an [EMAIL PROTECTED] org.apache.tuscany.core.builder.ObjectFactory} to create an - * instance of the aggregate implementation and perform injection of configuration and references. Once an aggregate instance is - * created, the factory will register the aggregate's children. This process may be done recursively in a lazy fashion, - * descending down an aggregate hierarchy as a child aggregate is instantiated. + * instance of the aggregate implementation and perform injection of configuration and references. Once an aggregate + * instance is created, the factory will register the aggregate's children. This process may be done recursively in a + * lazy fashion, descending down an aggregate hierarchy as a child aggregate is instantiated. * * @version $Rev$ $Date$ */ @@ -96,7 +96,11 @@ this.ctr = ctr; this.isAggregate = AggregateContext.class.isAssignableFrom(ctr.getDeclaringClass()); this.scope = scope; - stateless = (scope == Scope.INSTANCE); + if (isAggregate) { + scope = Scope.AGGREGATE; + } else { + stateless = (scope == Scope.INSTANCE); + } } // ---------------------------------- Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java?rev=389638&r1=389637&r2=389638&view=diff ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java (original) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemAggregateContextImpl.java Tue Mar 28 16:18:28 2006 @@ -51,9 +51,7 @@ import org.apache.tuscany.core.context.QualifiedName; import org.apache.tuscany.core.context.RuntimeEventListener; import org.apache.tuscany.core.context.ScopeContext; -import org.apache.tuscany.core.context.ScopeRuntimeException; import org.apache.tuscany.core.context.ScopeStrategy; -import org.apache.tuscany.core.context.SimpleComponentContext; import org.apache.tuscany.core.context.SystemAggregateContext; import org.apache.tuscany.core.context.TargetException; import org.apache.tuscany.core.context.impl.EventContextImpl; @@ -72,12 +70,15 @@ import org.apache.tuscany.model.assembly.Aggregate; import org.apache.tuscany.model.assembly.AggregatePart; import org.apache.tuscany.model.assembly.AssemblyModelObject; +import org.apache.tuscany.model.assembly.Binding; import org.apache.tuscany.model.assembly.Component; import org.apache.tuscany.model.assembly.EntryPoint; import org.apache.tuscany.model.assembly.Extensible; import org.apache.tuscany.model.assembly.ExternalService; import org.apache.tuscany.model.assembly.Module; +import org.apache.tuscany.model.assembly.ModuleComponent; import org.apache.tuscany.model.assembly.Scope; +import org.apache.tuscany.model.assembly.Service; import org.apache.tuscany.model.assembly.impl.AssemblyFactoryImpl; /** @@ -94,10 +95,6 @@ public static final int DEFAULT_WAIT = 1000 * 60; - // ---------------------------------- - // Fields - // ---------------------------------- - // The parent context, if one exists @ParentContext protected AggregateContext parentContext; @@ -223,10 +220,10 @@ for (ExternalService es : module.getExternalServices()) { registerAutowire(es); } - for (Map.Entry entries : configurationsByScope.entrySet()) { + for (Map.Entry<Scope, List<ContextFactory<InstanceContext>>> entries : configurationsByScope.entrySet()) { // register configurations with scope contexts ScopeContext scope = scopeContexts.get(entries.getKey()); - scope.registerFactorys((List<ContextFactory<InstanceContext>>) entries.getValue()); + scope.registerFactories(entries.getValue()); } for (ScopeContext scope : scopeContexts.values()) { // register scope contexts as a listeners for events in the aggregate context @@ -259,14 +256,10 @@ initialized = false; if (scopeContexts != null) { for (ScopeContext scope : scopeContexts.values()) { - try { - if (scope.getLifecycleState() == ScopeContext.RUNNING) { - scope.stop(); - } - } catch (ScopeRuntimeException e) { - // log.error("Error stopping scope container [" + scopeContainers[i].getName() + "]", e); + if (scope.getLifecycleState() == ScopeContext.RUNNING) { + scope.stop(); } - } + } } scopeContexts = null; scopeIndex.clear(); @@ -275,10 +268,6 @@ lifecycleState = STOPPED; } - // ---------------------------------- - // Methods - // ---------------------------------- - public void setModule(Module module) { assert (module != null) : "Module cannot be null"; name = module.getName(); @@ -415,7 +404,7 @@ SystemObjectContextFactory configuration = new SystemObjectContextFactory(componentName, instance); registerConfiguration(configuration); ScopeContext scope = scopeContexts.get(configuration.getScope()); - NameToScope mapping = new NameToScope(new QualifiedName(componentName), scope); + NameToScope mapping = new NameToScope(new QualifiedName(componentName), scope, false, false); autowireIndex.put(service, mapping); } @@ -475,9 +464,6 @@ } - /** - * @see org.apache.tuscany.core.context.AggregateContext#getAggregate() - */ public Aggregate getAggregate() { return module; } @@ -601,7 +587,7 @@ if (assemblyFactory != null) { return instanceInterface.cast(assemblyFactory); } else { - return instanceInterface.cast(autowireContext.resolveInstance(instanceInterface)); + return autowireContext.resolveInstance(instanceInterface); } } @@ -615,49 +601,76 @@ throw ae; } } - return null; + if (autowireContext != null) { + return autowireContext.resolveInstance(instanceInterface); + } else { + return null; + } } + public <T> T resolveExternalInstance(Class<T> instanceInterface) throws AutowireResolutionException { + NameToScope nts = autowireIndex.get(instanceInterface); + if (nts != null && nts.isVisible()) { + return instanceInterface.cast(nts.getScopeContext().getInstance(nts.getName())); + } else { + return null; + } + } + + @SuppressWarnings("unchecked") private void registerAutowire(Extensible model) throws ConfigurationException { if (lifecycleState == INITIALIZING || lifecycleState == INITIALIZED || lifecycleState == RUNNING) { if (model instanceof EntryPoint) { EntryPoint ep = (EntryPoint) model; - if (ep.getBindings() != null) { - if (ep.getBindings().get(0) instanceof SystemBinding) { - ScopeContext scope = scopeContexts.get(((ContextFactory) ep.getConfiguredReference().getContextFactory()) - .getScope()); - if (scope == null) { - ConfigurationException ce = new ConfigurationException("Scope not found for entry point"); - ce.setIdentifier(ep.getName()); - ce.addContextName(getName()); - throw ce; + for (Binding binding : ep.getBindings()) { + if (binding instanceof SystemBinding) { + Class interfaze = ep.getConfiguredService().getService().getServiceContract().getInterface(); + NameToScope nts = autowireIndex.get(interfaze); + if (nts == null || !nts.isEntryPoint()) { // handle special case where two entry points with + // same interface register: first wins + ScopeContext scope = scopeContexts.get(((ContextFactory) ep.getConfiguredReference() + .getContextFactory()).getScope()); + if (scope == null) { + ConfigurationException ce = new ConfigurationException("Scope not found for entry point"); + ce.setIdentifier(ep.getName()); + ce.addContextName(getName()); + throw ce; + } + // only register if an impl has not already been registered + NameToScope mapping = new NameToScope(new QualifiedName(ep.getName()), scope, true, true); + autowireIndex.put(interfaze, mapping); + } + } + } + } else if (model instanceof ModuleComponent) { + ModuleComponent component = (ModuleComponent) model; + for (EntryPoint ep : component.getModuleImplementation().getEntryPoints()) { + for (Binding binding : ep.getBindings()) { + if (binding instanceof SystemBinding) { + Class interfaze = ep.getConfiguredService().getService().getServiceContract().getInterface(); + if (autowireIndex.get(interfaze) == null) { + ScopeContext scope = scopeContexts.get(Scope.AGGREGATE); + // only register if an impl has not already been registered, ensuring it is not visible outside the containment + NameToScope mapping = new NameToScope(new QualifiedName(component.getName() + + QualifiedName.NAME_SEPARATOR + ep.getName()), scope, false, false); + autowireIndex.put(interfaze, mapping); + } } - NameToScope mapping = new NameToScope(new QualifiedName(ep.getName()), scope); - autowireIndex.put(ep.getConfiguredService().getService().getServiceContract().getInterface(), mapping); + } + } + } else if (model instanceof Component) { + Component component = (Component) model; + for (Service service : component.getComponentImplementation().getComponentType().getServices()) { + Class interfaze = service.getServiceContract().getInterface(); + if (autowireIndex.get(interfaze) == null) { + // only register if an impl has not already been registered + ScopeContext scopeCtx = scopeContexts.get(service.getServiceContract().getScope()); + NameToScope mapping = new NameToScope(new QualifiedName(component.getName()), scopeCtx, false, false); + autowireIndex.put(interfaze, mapping); } } } } - - // only autowire entry points with system bindings -// if (model instanceof EntryPoint) { -// EntryPoint ep = (EntryPoint) model; -// if (ep.getBindings() != null) { -// if (ep.getBindings().get(0) instanceof SystemBinding) { -// ScopeContext scope = scopeContexts.get(((ContextFactory) ep.getConfiguredReference().getContextFactory()) -// .getScope()); -// if (scope == null) { -// ConfigurationException ce = new ConfigurationException("Scope not found for entry point"); -// ce.setIdentifier(ep.getName()); -// ce.addContextName(getName()); -// throw ce; -// } -// NameToScope mapping = new NameToScope(new QualifiedName(ep.getName()), scope); -// autowireIndex.put(ep.getConfiguredService().getService().getServiceContract().getInterface(), mapping); -// } -// } -// } -// } } // ---------------------------------- @@ -706,24 +719,40 @@ /** * Maps a context name to a scope + * + * TODO this is a duplicate of aggregate context */ private class NameToScope { - private QualifiedName epName; + private QualifiedName qName; private ScopeContext scope; - public NameToScope(QualifiedName epName, ScopeContext scope) { - this.epName = epName; + private boolean visible; + + private boolean entryPoint; + + public NameToScope(QualifiedName name, ScopeContext scope, boolean visible, boolean entryPoint) { + this.qName = name; this.scope = scope; + this.visible = visible; + this.entryPoint = entryPoint; } public QualifiedName getName() { - return epName; + return qName; } public ScopeContext getScopeContext() { return scope; + } + + public boolean isVisible() { + return visible; + } + + public boolean isEntryPoint() { + return entryPoint; } } Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemComponentContext.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemComponentContext.java?rev=389638&r1=389637&r2=389638&view=diff ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemComponentContext.java (original) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/system/context/SystemComponentContext.java Tue Mar 28 16:18:28 2006 @@ -16,8 +16,6 @@ */ package org.apache.tuscany.core.system.context; -import java.util.Iterator; - import org.apache.tuscany.core.builder.ObjectFactory; import org.apache.tuscany.core.context.AbstractContext; import org.apache.tuscany.core.context.Context; @@ -27,7 +25,6 @@ import org.apache.tuscany.core.context.SimpleComponentContext; import org.apache.tuscany.core.context.TargetException; import org.apache.tuscany.core.injection.EventInvoker; -import org.apache.tuscany.core.injection.Injector; import org.apache.tuscany.core.injection.ObjectCallbackException; import org.apache.tuscany.core.injection.ObjectCreationException; Modified: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/invocation/mock/MockScopeContext.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/invocation/mock/MockScopeContext.java?rev=389638&r1=389637&r2=389638&view=diff ============================================================================== --- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/invocation/mock/MockScopeContext.java (original) +++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/invocation/mock/MockScopeContext.java Tue Mar 28 16:18:28 2006 @@ -97,7 +97,7 @@ } - public void registerFactorys(List<ContextFactory<InstanceContext>> configurations) { + public void registerFactories(List<ContextFactory<InstanceContext>> configurations) { } public void registerFactory(ContextFactory<InstanceContext> configuration) { Modified: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java?rev=389638&r1=389637&r2=389638&view=diff ============================================================================== --- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java (original) +++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/MockFactory.java Tue Mar 28 16:18:28 2006 @@ -30,11 +30,11 @@ import org.apache.tuscany.core.system.assembly.SystemAssemblyFactory; import org.apache.tuscany.core.system.assembly.SystemBinding; import org.apache.tuscany.core.system.assembly.SystemImplementation; +import org.apache.tuscany.core.system.assembly.SystemModule; import org.apache.tuscany.core.system.assembly.impl.SystemAssemblyFactoryImpl; import org.apache.tuscany.core.system.builder.SystemContextFactoryBuilder; import org.apache.tuscany.core.system.builder.SystemEntryPointBuilder; import org.apache.tuscany.core.system.builder.SystemExternalServiceBuilder; -import org.apache.tuscany.core.system.context.SystemAggregateContextImpl; import org.apache.tuscany.model.assembly.AggregatePart; import org.apache.tuscany.model.assembly.AssemblyModelContext; import org.apache.tuscany.model.assembly.Component; @@ -69,10 +69,11 @@ /** * Creates an aggregate component with the given name */ - public static Component createAggregateComponent(String name) { - Component sc = systemFactory.createModuleComponent(); - SystemImplementation impl = systemFactory.createSystemImplementation(); - impl.setImplementationClass(AggregateContextImpl.class); + public static ModuleComponent createAggregateComponent(String name) { + ModuleComponent sc = systemFactory.createModuleComponent(); + Module impl = systemFactory.createModule(); + impl.setName(name); + //impl.setImplementationClass(AggregateContextImpl.class); sc.setComponentImplementation(impl); Service s = systemFactory.createService(); JavaServiceContract ji = systemFactory.createJavaServiceContract(); @@ -88,10 +89,11 @@ /** * Creates an aggregate component with the given name */ - public static Component createSystemAggregateComponent(String name) { - Component sc = systemFactory.createModuleComponent(); - SystemImplementation impl = systemFactory.createSystemImplementation(); - impl.setImplementationClass(SystemAggregateContextImpl.class); + public static ModuleComponent createSystemAggregateComponent(String name) { + ModuleComponent sc = systemFactory.createModuleComponent(); + SystemModule impl = systemFactory.createSystemModule(); + impl.setName(name); + //impl.setImplementationClass(SystemAggregateContextImpl.class); sc.setComponentImplementation(impl); Service s = systemFactory.createService(); JavaServiceContract ji = systemFactory.createJavaServiceContract(); @@ -251,6 +253,10 @@ return module; } + public static <T> Component createSystemComponent(String name, Class<T> service, Class<? extends T> impl,Scope scope ){ + return systemFactory.createSystemComponent(name,service,impl,scope); + } + /** * Creates a test system module with source and target components wired together. * Added: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/AutowireSourceImpl.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/AutowireSourceImpl.java?rev=389638&view=auto ============================================================================== --- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/AutowireSourceImpl.java (added) +++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/mock/component/AutowireSourceImpl.java Tue Mar 28 16:18:28 2006 @@ -0,0 +1,64 @@ +/** + * + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.apache.tuscany.core.mock.component; + +import java.util.List; + +import org.apache.tuscany.core.system.annotation.Autowire; + +/** + * Mock system component implementation used in autowire tests + * + * @version $Rev$ $Date$ + */ +public class AutowireSourceImpl implements Source { + + @Autowire + private Target target; + + private List<Target> targets; + + private List<Target> targetsThroughField; + + public void setTarget(Target target) { + this.target = target; + } + + public Target getTarget() { + return target; + } + + public List<Target> getTargets() { + return targets; + } + + public void setTargets(List<Target> targets) { + this.targets = targets; + } + + public List<Target> getTargetsThroughField() { + return targetsThroughField; + } + + private Target[] targetsArray; + + public Target[] getArrayOfTargets() { + return targetsArray; + } + + public void setArrayOfTargets(Target[] targets) { + targetsArray = targets; + } + +} Modified: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AggregateNestingTestCase.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AggregateNestingTestCase.java?rev=389638&r1=389637&r2=389638&view=diff ============================================================================== --- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AggregateNestingTestCase.java (original) +++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AggregateNestingTestCase.java Tue Mar 28 16:18:28 2006 @@ -26,7 +26,7 @@ import org.apache.tuscany.model.assembly.Scope; /** - * Tests registering of arbirarily deep child aggregate contexts + * Tests registering arbirarily deep child aggregate contexts * * @version $Rev$ $Date$ */ Added: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AutowireTestCase.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AutowireTestCase.java?rev=389638&view=auto ============================================================================== --- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AutowireTestCase.java (added) +++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/system/context/AutowireTestCase.java Tue Mar 28 16:18:28 2006 @@ -0,0 +1,310 @@ +/** + * + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ + +package org.apache.tuscany.core.system.context; + +import junit.framework.TestCase; + +import org.apache.tuscany.core.context.AggregateContext; +import org.apache.tuscany.core.context.EventContext; +import org.apache.tuscany.core.context.SystemAggregateContext; +import org.apache.tuscany.core.mock.MockFactory; +import org.apache.tuscany.core.mock.component.AutowireSourceImpl; +import org.apache.tuscany.core.mock.component.Source; +import org.apache.tuscany.core.mock.component.Target; +import org.apache.tuscany.core.mock.component.TargetImpl; +import org.apache.tuscany.core.runtime.RuntimeContext; +import org.apache.tuscany.core.system.assembly.SystemAssemblyFactory; +import org.apache.tuscany.core.system.assembly.impl.SystemAssemblyFactoryImpl; +import org.apache.tuscany.model.assembly.AssemblyModelContext; +import org.apache.tuscany.model.assembly.Component; +import org.apache.tuscany.model.assembly.ConfiguredService; +import org.apache.tuscany.model.assembly.EntryPoint; +import org.apache.tuscany.model.assembly.Module; +import org.apache.tuscany.model.assembly.ModuleComponent; +import org.apache.tuscany.model.assembly.Scope; +import org.apache.tuscany.model.assembly.Service; +import org.apache.tuscany.model.assembly.impl.AssemblyModelContextImpl; + +/** + * Tests autowiring for serveral scenarios according to the following runtime scheme: + * + * <code> + * tuscany.runtime + * | + * + tuscany.system + * | | + * | + system1 + * | | | + * | | + system1a + * | | + * | + system2 + * | + * + tuscany.root + * | + * + app1 + * | + * + app1a + * | + * + app1b + * </code> + * + * @version $Rev$ $Date$ + */ +public class AutowireTestCase extends TestCase { + + private static SystemAssemblyFactory systemFactory = new SystemAssemblyFactoryImpl(); + + /** + * Covers the case where a component in app1a requests autowire, which is resolved by the runtime to a service + * exposed on an entry point in tuscany.system. The entry point is wired to an entry point on system1, which itself + * is wired to a component in system1 + */ + public void testScenario1() throws Exception { + RuntimeContext runtime = createScenario1Runtime(); + AggregateContext root = runtime.getRootContext(); + SystemAggregateContext system = runtime.getSystemContext(); + AggregateContext system1 = (AggregateContext) system.getContext("system1"); + system1.fireEvent(EventContext.MODULE_START, null); + Target target = (Target) system.getContext("target.system.ep").getInstance(null); + assertNotNull(target); + AggregateContext app1 = (AggregateContext) root.getContext("app1"); + app1.fireEvent(EventContext.MODULE_START, null); + AggregateContext app1a = (AggregateContext) app1.getContext("app1a"); + app1a.fireEvent(EventContext.MODULE_START, null); + app1a.fireEvent(EventContext.MODULE_STOP, null); + app1.fireEvent(EventContext.MODULE_STOP, null); + Source source = (Source) app1a.getContext("source").getInstance(null); + assertEquals(target, source.getTarget()); + source.getTarget().getString(); + runtime.stop(); + } + + /** + * Covers the case where a component in app1a requests autowire, which is resolved to service exposed as an entry + * point on app1b. The entry point is wired to a component in app1b. + */ + public void testScenario2() throws Exception { + RuntimeContext runtime = createScenario2Runtime(); + AggregateContext root = runtime.getRootContext(); + AggregateContext app1 = (AggregateContext) root.getContext("app1"); + app1.fireEvent(EventContext.MODULE_START, null); + AggregateContext app1b = (AggregateContext) app1.getContext("app1b"); + app1b.fireEvent(EventContext.MODULE_START, null); + AggregateContext app1a = (AggregateContext) app1.getContext("app1a"); + app1a.fireEvent(EventContext.MODULE_START, null); + Target target = (Target) app1b.getContext("target.ep").getInstance(null); + assertNotNull(target); + Source source = (Source) app1a.getContext("source").getInstance(null); + assertEquals(target, source.getTarget()); + source.getTarget().getString(); + runtime.stop(); + } + + /** + * Covers the case where a component in system1a requests autowire, which is resolved to an entry point exposed on + * system2. The entry point is wired to a component in system2. + */ + public void testScenario3() throws Exception { + RuntimeContext runtime = createScenario3Runtime(); + AggregateContext root = runtime.getRootContext(); + SystemAggregateContext system = runtime.getSystemContext(); + + AggregateContext system2 = (AggregateContext) system.getContext("system2"); + system2.fireEvent(EventContext.MODULE_START, null); + Target target = (Target) system2.getContext("target.ep").getInstance(null); + assertNotNull(target); + + AggregateContext system1 = (AggregateContext) system.getContext("system1"); + system1.fireEvent(EventContext.MODULE_START, null); + AggregateContext system1a = (AggregateContext) system1.getContext("system1a"); + system1a.fireEvent(EventContext.MODULE_START, null); + + Source source = (Source) system1a.getContext("source").getInstance(null); + assertEquals(target, source.getTarget()); + source.getTarget().getString(); + runtime.stop(); + } + + /** + * Covers the case where a component in system1a requests autowire, which is resolved to component in its parent, + * system1. + */ + public void testScenario4() throws Exception { + RuntimeContext runtime = createScenario4Runtime(); + AggregateContext root = runtime.getRootContext(); + SystemAggregateContext system = runtime.getSystemContext(); + AggregateContext system1 = (AggregateContext) system.getContext("system1"); + system1.fireEvent(EventContext.MODULE_START, null); + Target target = (Target) system1.getContext("target").getInstance(null); + assertNotNull(target); + AggregateContext system1a = (AggregateContext) system1.getContext("system1a"); + system1a.fireEvent(EventContext.MODULE_START, null); + + Source source = (Source) system1a.getContext("source").getInstance(null); + assertEquals(target, source.getTarget()); + source.getTarget().getString(); + runtime.stop(); + } + + /** + * Covers the case where a component in system1a requests autowire, which is resolved to component in the parent of + * its parent (grandparent), system. + */ + public void testScenario5() throws Exception { + RuntimeContext runtime = createScenario5Runtime(); + AggregateContext root = runtime.getRootContext(); + SystemAggregateContext system = runtime.getSystemContext(); + AggregateContext system1 = (AggregateContext) system.getContext("system1"); + system1.fireEvent(EventContext.MODULE_START, null); + Target target = (Target) system.getContext("target").getInstance(null); + assertNotNull(target); + AggregateContext system1a = (AggregateContext) system1.getContext("system1a"); + system1a.fireEvent(EventContext.MODULE_START, null); + + Source source = (Source) system1a.getContext("source").getInstance(null); + assertEquals(target, source.getTarget()); + source.getTarget().getString(); + runtime.stop(); + } + + private RuntimeContext createScenario1Runtime() throws Exception { + RuntimeContext runtime = MockFactory.createCoreRuntime(); + runtime.start(); + SystemAggregateContext system = runtime.getSystemContext(); + ModuleComponent system1Component = MockFactory.createSystemAggregateComponent("system1"); + ModuleComponent system1aComponent = MockFactory.createSystemAggregateComponent("system1a"); + system1Component.getModuleImplementation().getComponents().add(system1aComponent); + Component target = MockFactory.createSystemComponent("target", Target.class, TargetImpl.class, Scope.MODULE); + system1Component.getModuleImplementation().getComponents().add(target); + + EntryPoint ep = MockFactory.createEPSystemBinding("target.ep", Target.class, "target", target); + system1Component.getModuleImplementation().getEntryPoints().add(ep); + system.registerModelObject(system1Component); + EntryPoint systemEp = MockFactory.createEPSystemBinding("target.system.ep", Target.class, "ref"); + + systemEp.getBindings().add(systemFactory.createSystemBinding()); + Service service = systemFactory.createService(); + service.setName("system1/target.ep"); + ((ConfiguredService) systemEp.getConfiguredReference().getTargetConfiguredServices().get(0)).setService(service); + + system.registerModelObject(systemEp); + ModuleComponent app1Component = createAppModuleComponent("app1"); + ModuleComponent app1aComponent = createAppModuleComponent("app1a"); + Component source = MockFactory.createSystemComponent("source", Source.class, AutowireSourceImpl.class, Scope.MODULE); + app1aComponent.getModuleImplementation().getComponents().add(source); + app1Component.getModuleImplementation().getComponents().add(app1aComponent); + AggregateContext root = runtime.getRootContext(); + root.registerModelObject(app1Component); + system.fireEvent(EventContext.MODULE_START, null); + return runtime; + } + + private RuntimeContext createScenario2Runtime() throws Exception { + RuntimeContext runtime = MockFactory.createCoreRuntime(); + runtime.start(); + + ModuleComponent app1Component = createAppModuleComponent("app1"); + ModuleComponent app1aComponent = createAppModuleComponent("app1a"); + ModuleComponent app1bComponent = createAppModuleComponent("app1b"); + Component source = MockFactory.createSystemComponent("source", Source.class, AutowireSourceImpl.class, Scope.MODULE); + app1aComponent.getModuleImplementation().getComponents().add(source); + app1Component.getModuleImplementation().getComponents().add(app1aComponent); + app1Component.getModuleImplementation().getComponents().add(app1bComponent); + + Component target = MockFactory.createSystemComponent("target", Target.class, TargetImpl.class, Scope.MODULE); + app1bComponent.getModuleImplementation().getComponents().add(target); + + EntryPoint ep = MockFactory.createEPSystemBinding("target.ep", Target.class, "target", target); + ep.getBindings().add(systemFactory.createSystemBinding()); + Service service = systemFactory.createService(); + service.setName("target.ep"); + ((ConfiguredService) ep.getConfiguredReference().getTargetConfiguredServices().get(0)).setService(service); + app1bComponent.getModuleImplementation().getEntryPoints().add(ep); + + AggregateContext root = runtime.getRootContext(); + root.registerModelObject(app1Component); + return runtime; + } + + private RuntimeContext createScenario3Runtime() throws Exception { + RuntimeContext runtime = MockFactory.createCoreRuntime(); + runtime.start(); + SystemAggregateContext system = runtime.getSystemContext(); + ModuleComponent system1Component = MockFactory.createSystemAggregateComponent("system1"); + ModuleComponent system2Component = MockFactory.createSystemAggregateComponent("system2"); + ModuleComponent system1aComponent = MockFactory.createSystemAggregateComponent("system1a"); + system1Component.getModuleImplementation().getComponents().add(system1aComponent); + + Component target = MockFactory.createSystemComponent("target", Target.class, TargetImpl.class, Scope.MODULE); + system2Component.getModuleImplementation().getComponents().add(target); + EntryPoint ep = MockFactory.createEPSystemBinding("target.ep", Target.class, "target", target); + system2Component.getModuleImplementation().getEntryPoints().add(ep); + system.registerModelObject(system2Component); + + Component source = MockFactory.createSystemComponent("source", Source.class, AutowireSourceImpl.class, Scope.MODULE); + system1aComponent.getModuleImplementation().getComponents().add(source); + system.registerModelObject(system1Component); + system.fireEvent(EventContext.MODULE_START, null); + return runtime; + } + + private RuntimeContext createScenario4Runtime() throws Exception { + RuntimeContext runtime = MockFactory.createCoreRuntime(); + runtime.start(); + SystemAggregateContext system = runtime.getSystemContext(); + ModuleComponent system1Component = MockFactory.createSystemAggregateComponent("system1"); + ModuleComponent system1aComponent = MockFactory.createSystemAggregateComponent("system1a"); + system1Component.getModuleImplementation().getComponents().add(system1aComponent); + + Component target = MockFactory.createSystemComponent("target", Target.class, TargetImpl.class, Scope.MODULE); + system1Component.getModuleImplementation().getComponents().add(target); + + Component source = MockFactory.createSystemComponent("source", Source.class, AutowireSourceImpl.class, Scope.MODULE); + system1aComponent.getModuleImplementation().getComponents().add(source); + system.registerModelObject(system1Component); + system.fireEvent(EventContext.MODULE_START, null); + return runtime; + } + + private RuntimeContext createScenario5Runtime() throws Exception { + RuntimeContext runtime = MockFactory.createCoreRuntime(); + runtime.start(); + SystemAggregateContext system = runtime.getSystemContext(); + ModuleComponent system1Component = MockFactory.createSystemAggregateComponent("system1"); + ModuleComponent system1aComponent = MockFactory.createSystemAggregateComponent("system1a"); + system1Component.getModuleImplementation().getComponents().add(system1aComponent); + + Component target = MockFactory.createSystemComponent("target", Target.class, TargetImpl.class, Scope.MODULE); + system.registerModelObject(target); + + Component source = MockFactory.createSystemComponent("source", Source.class, AutowireSourceImpl.class, Scope.MODULE); + system1aComponent.getModuleImplementation().getComponents().add(source); + system.registerModelObject(system1Component); + system.fireEvent(EventContext.MODULE_START, null); + return runtime; + } + + private ModuleComponent createAppModuleComponent(String name) { + AssemblyModelContext assemblyContext = new AssemblyModelContextImpl(systemFactory, null, null); + ModuleComponent mc = systemFactory.createModuleComponent(); + mc.setName(name); + Module module = systemFactory.createModule(); + module.setName(name); + module.initialize(assemblyContext); + mc.setComponentImplementation(module); + return mc; + } + +}
