diff options
Diffstat (limited to 'sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src')
29 files changed, 2006 insertions, 0 deletions
diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanAssemblyFactory.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanAssemblyFactory.java new file mode 100644 index 0000000000..5b04d9e363 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanAssemblyFactory.java @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring.assembly.impl; + +import org.apache.tuscany.sca.assembly.AbstractProperty; +import org.apache.tuscany.sca.assembly.AbstractReference; +import org.apache.tuscany.sca.assembly.AbstractService; +import org.apache.tuscany.sca.assembly.AssemblyFactory; +import org.apache.tuscany.sca.assembly.Callback; +import org.apache.tuscany.sca.assembly.Component; +import org.apache.tuscany.sca.assembly.ComponentProperty; +import org.apache.tuscany.sca.assembly.ComponentReference; +import org.apache.tuscany.sca.assembly.ComponentService; +import org.apache.tuscany.sca.assembly.ComponentType; +import org.apache.tuscany.sca.assembly.Composite; +import org.apache.tuscany.sca.assembly.CompositeReference; +import org.apache.tuscany.sca.assembly.CompositeService; +import org.apache.tuscany.sca.assembly.ConstrainingType; +import org.apache.tuscany.sca.assembly.DefaultAssemblyFactory; +import org.apache.tuscany.sca.assembly.Property; +import org.apache.tuscany.sca.assembly.Reference; +import org.apache.tuscany.sca.assembly.SCABinding; +import org.apache.tuscany.sca.assembly.Service; +import org.apache.tuscany.sca.assembly.Wire; +import org.apache.tuscany.sca.interfacedef.Operation; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; + +/** + * An alternate implementation of the SCA assembly model factory that creates SCA + * assembly model objects backed by Spring bean definitions. + * + * @version $Rev$ $Date$ + */ +public class BeanAssemblyFactory implements AssemblyFactory { + + private AssemblyFactory defaultFactory; + private BeanDefinitionRegistry beanRegistry; + + public BeanAssemblyFactory(AssemblyFactory defaultFactory, BeanDefinitionRegistry beanRegistry) { + this.defaultFactory = defaultFactory; + this.beanRegistry = beanRegistry; + } + + public BeanAssemblyFactory(BeanDefinitionRegistry beanRegistry) { + this(new DefaultAssemblyFactory(), beanRegistry); + } + + public AbstractProperty createAbstractProperty() { + return defaultFactory.createAbstractProperty(); + } + + public AbstractReference createAbstractReference() { + return defaultFactory.createAbstractReference(); + } + + public AbstractService createAbstractService() { + return defaultFactory.createAbstractService(); + } + + public Callback createCallback() { + return defaultFactory.createCallback(); + } + + public Component createComponent() { + return new BeanComponentImpl(beanRegistry); + } + + public ComponentProperty createComponentProperty() { + return defaultFactory.createComponentProperty(); + } + + public ComponentReference createComponentReference() { + return defaultFactory.createComponentReference(); + } + + public ComponentService createComponentService() { + return defaultFactory.createComponentService(); + } + + public ComponentType createComponentType() { + return defaultFactory.createComponentType(); + } + + public Composite createComposite() { + return defaultFactory.createComposite(); + } + + public CompositeReference createCompositeReference() { + return defaultFactory.createCompositeReference(); + } + + public CompositeService createCompositeService() { + return defaultFactory.createCompositeService(); + } + + public ConstrainingType createConstrainingType() { + return defaultFactory.createConstrainingType(); + } + + public Property createProperty() { + return defaultFactory.createProperty(); + } + + public Reference createReference() { + return defaultFactory.createReference(); + } + + public Service createService() { + return defaultFactory.createService(); + } + + public Wire createWire() { + return defaultFactory.createWire(); + } + + public Operation createOperation() { + return defaultFactory.createOperation(); + } +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanComponentImpl.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanComponentImpl.java new file mode 100644 index 0000000000..85c5e7ec43 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanComponentImpl.java @@ -0,0 +1,211 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring.assembly.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.tuscany.sca.assembly.Component; +import org.apache.tuscany.sca.assembly.ComponentProperty; +import org.apache.tuscany.sca.assembly.ComponentReference; +import org.apache.tuscany.sca.assembly.ComponentService; +import org.apache.tuscany.sca.assembly.ConstrainingType; +import org.apache.tuscany.sca.assembly.Implementation; +import org.apache.tuscany.sca.assembly.Visitor; +import org.apache.tuscany.sca.policy.Intent; +import org.apache.tuscany.sca.policy.PolicySet; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.support.ChildBeanDefinition; + +/** + * An implementation of the SCA assembly Component interface backed by a Spring + * Bean definition. + * + * @version $Rev$ $Date$ + */ +public class BeanComponentImpl extends ChildBeanDefinition implements Component, Cloneable { + private static final long serialVersionUID = 1L; + + private ConstrainingType constrainingType; + private Implementation implementation; + private String name; + private String uri; + private List<ComponentService> services = new ArrayList<ComponentService>(); + private List<Intent> requiredIntents = new ArrayList<Intent>(); + private List<PolicySet> policySets = new ArrayList<PolicySet>(); + private List<Object> extensions = new ArrayList<Object>(); + private boolean unresolved = false; + private BeanDefinitionRegistry beanRegistry; + + protected BeanComponentImpl(BeanDefinitionRegistry beanRegistry) { + super((String)""); + this.beanRegistry = beanRegistry; + } + + @Override + public Object clone() throws CloneNotSupportedException { + BeanComponentImpl clone = (BeanComponentImpl)super.clone(); + + clone.getProperties().clear(); + for (ComponentProperty property: getProperties()) { + clone.getProperties().add((ComponentProperty)property.clone()); + } + clone.getReferences().clear(); + for (ComponentReference reference: getReferences()) { + clone.getReferences().add((ComponentReference)reference.clone()); + } + clone.getServices().clear(); + for (ComponentService service: getServices()) { + clone.getServices().add((ComponentService)service.clone()); + } + return clone; + } + + public String getParentName() { + //TODO find a better name for bean definitions representing component types + return String.valueOf(System.identityHashCode(implementation)); + } + + public ConstrainingType getConstrainingType() { + return constrainingType; + } + + public Implementation getImplementation() { + return implementation; + } + + public String getURI() { + return uri; + } + + public void setURI(String uri) { + this.uri = uri; + + // Register this bean definition in the bean registry + this.beanRegistry.registerBeanDefinition(uri, this); + } + + public String getName() { + return name; + } + + //TODO use a better list implementation + private List<ComponentProperty> properties = new ArrayList<ComponentProperty>() { + private static final long serialVersionUID = 1L; + + // Add a property + public boolean add(ComponentProperty property) { + + // Add corresponding bean property value + getPropertyValues().addPropertyValue(property.getName(), property.getValue()); + + return super.add(property); + } + }; + + public List<ComponentProperty> getProperties() { + return properties; + } + + //TODO use a better list implementation + private List<ComponentReference> references = new ArrayList<ComponentReference>() { + private static final long serialVersionUID = 1L; + + // Add a reference + public boolean add(ComponentReference reference) { + + // Add corresponding bean property value + if (!reference.getName().startsWith("$self$.")) { + BeanReferenceImpl beanReference = new BeanReferenceImpl(reference); + getPropertyValues().addPropertyValue(reference.getName(), beanReference); + } + return super.add(reference); + } + }; + + public List<ComponentReference> getReferences() { + return references; + } + + public List<ComponentService> getServices() { + return services; + } + + public void setConstrainingType(ConstrainingType constrainingType) { + this.constrainingType = constrainingType; + } + + public void setImplementation(Implementation implementation) { + this.implementation = implementation; + } + + public void setName(String name) { + this.name = name; + } + + public List<Intent> getRequiredIntents() { + return requiredIntents; + } + + public List<PolicySet> getPolicySets() { + return policySets; + } + + public boolean isAutowire() { + return super.getAutowireMode() == AUTOWIRE_BY_TYPE; + } + + public void setAutowire(boolean autowire) { + super.setAutowireMode(autowire? AUTOWIRE_BY_TYPE:AUTOWIRE_NO); + } + + public List<Object> getExtensions() { + return extensions; + } + + public boolean isUnresolved() { + return unresolved; + } + + public void setUnresolved(boolean undefined) { + this.unresolved = undefined; + } + + public boolean accept(Visitor visitor) { + if (!visitor.visit(this)) { + return false; + } + for (ComponentProperty property : properties) { + if (!visitor.visit(property)) { + return false; + } + } + for (ComponentReference reference : references) { + if (!visitor.visit(reference)) { + return false; + } + } + for (ComponentService service : services) { + if (!visitor.visit(service)) { + return false; + } + } + return true; + } +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanReferenceImpl.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanReferenceImpl.java new file mode 100644 index 0000000000..bc139a3ef3 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/assembly/impl/BeanReferenceImpl.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring.assembly.impl; + +import org.apache.tuscany.sca.assembly.ComponentService; +import org.apache.tuscany.sca.assembly.Reference; +import org.apache.tuscany.sca.assembly.SCABinding; +import org.springframework.beans.factory.config.RuntimeBeanReference; + +/** + * An implementation of RuntimeBeanReference wrappering an SCA assembly Reference + * + * @version $Rev$ $Date$ + */ +public class BeanReferenceImpl extends RuntimeBeanReference { + private Reference reference; + + protected BeanReferenceImpl(Reference reference) { + super("temp"); + this.reference = reference; + } + + public String getBeanName() { + //TODO handle multiplicity + ComponentService componentService = reference.getTargets().get(0); + if (!componentService.isUnresolved()) { + SCABinding binding = componentService.getBinding(SCABinding.class); + return binding.getComponent().getURI(); + } else { + return null; + } + } + + public boolean equals(Object other) { + if (this != other) { + if (other instanceof RuntimeBeanReference) { + RuntimeBeanReference br = (RuntimeBeanReference) other; + return (getBeanName().equals(br.getBeanName()) && this.isToParent() == br.isToParent()); + } else + return false; + } else + return true; + } + + public int hashCode() { + return getBeanName().hashCode() * 29 + (this.isToParent() ? 1 : 0); + } + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/context/ModelResolverImpl.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/context/ModelResolverImpl.java new file mode 100644 index 0000000000..ba2d5045f2 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/context/ModelResolverImpl.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring.context; + +import java.lang.ref.WeakReference; +import java.util.HashMap; +import java.util.Map; + +import org.apache.tuscany.sca.contribution.resolver.ClassReference; +import org.apache.tuscany.sca.contribution.resolver.ModelResolver; + + +/** + * A default implementation of an artifact resolver, based on a map. + * + * @version $Rev$ $Date$ + */ +public class ModelResolverImpl implements ModelResolver { + private static final long serialVersionUID = -7826976465762296634L; + + private Map<Object, Object> map = new HashMap<Object, Object>(); + + private WeakReference<ClassLoader> classLoader; + + public ModelResolverImpl(ClassLoader classLoader) { + this.classLoader = new WeakReference<ClassLoader>(classLoader); + } + + public <T> T resolveModel(Class<T> modelClass, T unresolved) { + Object resolved = map.get(unresolved); + if (resolved != null) { + + // Return the resolved object + return modelClass.cast(resolved); + + } else if (unresolved instanceof ClassReference) { + + // Load a class on demand + ClassReference classReference = (ClassReference)unresolved; + Class clazz; + try { + clazz = Class.forName(classReference.getClassName(), true, classLoader.get()); + } catch (ClassNotFoundException e) { + + // Return the unresolved object + return unresolved; + } + + // Store a new ClassReference wrappering the loaded class + resolved = new ClassReference(clazz); + map.put(resolved, resolved); + + // Return the resolved ClassReference + return modelClass.cast(resolved); + + } else { + + // Return the unresolved object + return unresolved; + } + } + + public void addModel(Object resolved) { + map.put(resolved, resolved); + } + + public Object removeModel(Object resolved) { + return map.remove(resolved); + } + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/context/SCADomainContext.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/context/SCADomainContext.java new file mode 100644 index 0000000000..24bc719e6a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/context/SCADomainContext.java @@ -0,0 +1,195 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring.context; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLOutputFactory; + +import org.apache.tuscany.sca.assembly.AssemblyFactory; +import org.apache.tuscany.sca.assembly.Composite; +import org.apache.tuscany.sca.assembly.DefaultAssemblyFactory; +import org.apache.tuscany.sca.assembly.DefaultSCABindingFactory; +import org.apache.tuscany.sca.assembly.SCABindingFactory; +import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException; +import org.apache.tuscany.sca.assembly.builder.CompositeBuilderMonitor; +import org.apache.tuscany.sca.assembly.builder.Problem; +import org.apache.tuscany.sca.assembly.builder.impl.CompositeBuilderImpl; +import org.apache.tuscany.sca.assembly.xml.ComponentTypeProcessor; +import org.apache.tuscany.sca.assembly.xml.CompositeProcessor; +import org.apache.tuscany.sca.assembly.xml.ConstrainingTypeProcessor; +import org.apache.tuscany.sca.contribution.processor.DefaultStAXArtifactProcessorExtensionPoint; +import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor; +import org.apache.tuscany.sca.contribution.service.ContributionException; +import org.apache.tuscany.sca.core.spring.assembly.impl.BeanAssemblyFactory; +import org.apache.tuscany.sca.core.spring.implementation.java.impl.BeanJavaImplementationFactory; +import org.apache.tuscany.sca.implementation.java.JavaImplementationFactory; +import org.apache.tuscany.sca.implementation.java.introspect.DefaultJavaClassIntrospectorExtensionPoint; +import org.apache.tuscany.sca.implementation.java.introspect.ExtensibleJavaClassIntrospector; +import org.apache.tuscany.sca.implementation.java.introspect.JavaClassIntrospector; +import org.apache.tuscany.sca.implementation.java.introspect.JavaClassIntrospectorExtensionPoint; +import org.apache.tuscany.sca.implementation.java.introspect.JavaClassVisitor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.AllowsPassByReferenceProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.BaseJavaClassVisitor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.ConstructorProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.ContextProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.ConversationProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.DestroyProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.EagerInitProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.HeuristicPojoProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.InitProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.PolicyProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.PropertyProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.ReferenceProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.ResourceProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.ScopeProcessor; +import org.apache.tuscany.sca.implementation.java.introspect.impl.ServiceProcessor; +import org.apache.tuscany.sca.implementation.java.xml.JavaImplementationProcessor; +import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper; +import org.apache.tuscany.sca.interfacedef.impl.InterfaceContractMapperImpl; +import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory; +import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; +import org.apache.tuscany.sca.interfacedef.java.introspect.DefaultJavaInterfaceIntrospectorExtensionPoint; +import org.apache.tuscany.sca.interfacedef.java.introspect.ExtensibleJavaInterfaceIntrospector; +import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceIntrospector; +import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceIntrospectorExtensionPoint; +import org.apache.tuscany.sca.interfacedef.java.xml.JavaInterfaceProcessor; +import org.apache.tuscany.sca.policy.DefaultPolicyFactory; +import org.apache.tuscany.sca.policy.PolicyFactory; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; + +/** + * A mini test runtime that uses the SCA assembly model variant implementation + * backed by Spring bean definitions. + * + * @version $Rev$ $Date$ + */ +public class SCADomainContext { + + private DefaultListableBeanFactory beanFactory; + + public SCADomainContext(String... compositeFiles) { + + // Create Spring bean factory + beanFactory = new DefaultListableBeanFactory(); + + // Create SCA assembly and SCA Java factories + AssemblyFactory assemblyFactory = new BeanAssemblyFactory(new DefaultAssemblyFactory(), beanFactory); + SCABindingFactory scaBindingFactory = new DefaultSCABindingFactory(); + PolicyFactory policyFactory = new DefaultPolicyFactory(); + InterfaceContractMapper interfaceContractMapper = new InterfaceContractMapperImpl(); + JavaInterfaceFactory javaFactory = new DefaultJavaInterfaceFactory(); + JavaInterfaceIntrospectorExtensionPoint interfaceVisitors = new DefaultJavaInterfaceIntrospectorExtensionPoint(); + JavaImplementationFactory javaImplementationFactory = new BeanJavaImplementationFactory(beanFactory); + JavaClassIntrospectorExtensionPoint classVisitors = new DefaultJavaClassIntrospectorExtensionPoint(); + + JavaInterfaceIntrospector interfaceIntrospector = new ExtensibleJavaInterfaceIntrospector(javaFactory, interfaceVisitors); + + BaseJavaClassVisitor[] extensions = new BaseJavaClassVisitor[] { + new ConstructorProcessor(assemblyFactory), + new AllowsPassByReferenceProcessor(assemblyFactory), + new ContextProcessor(assemblyFactory), + new ConversationProcessor(assemblyFactory), + new DestroyProcessor(assemblyFactory), + new EagerInitProcessor(assemblyFactory), + new InitProcessor(assemblyFactory), + new PropertyProcessor(assemblyFactory), + new ReferenceProcessor(assemblyFactory, javaFactory, interfaceIntrospector), + new ResourceProcessor(assemblyFactory), + new ScopeProcessor(assemblyFactory), + new ServiceProcessor(assemblyFactory, javaFactory, interfaceIntrospector), + new HeuristicPojoProcessor(assemblyFactory, javaFactory, interfaceIntrospector), + new PolicyProcessor(assemblyFactory, policyFactory) + }; + for (JavaClassVisitor e : extensions) { + classVisitors.addClassVisitor(e); + } + JavaClassIntrospector classIntrospector = new ExtensibleJavaClassIntrospector(classVisitors); + + // Populate ArtifactProcessor registry + DefaultStAXArtifactProcessorExtensionPoint staxProcessors = new DefaultStAXArtifactProcessorExtensionPoint(); + ExtensibleStAXArtifactProcessor staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, XMLInputFactory.newInstance(), XMLOutputFactory.newInstance()); + CompositeProcessor compositeProcessor = new CompositeProcessor(assemblyFactory, policyFactory, + interfaceContractMapper, staxProcessor); + staxProcessors.addArtifactProcessor(compositeProcessor); + staxProcessors.addArtifactProcessor(new ComponentTypeProcessor(assemblyFactory, policyFactory, staxProcessor)); + staxProcessors.addArtifactProcessor(new ConstrainingTypeProcessor(assemblyFactory, policyFactory, staxProcessor)); + staxProcessors.addArtifactProcessor(new JavaInterfaceProcessor(javaFactory, interfaceIntrospector)); + staxProcessors.addArtifactProcessor(new JavaImplementationProcessor(assemblyFactory, policyFactory, javaImplementationFactory, classIntrospector)); + + // Create a resolver + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + ModelResolverImpl resolver = new ModelResolverImpl(classLoader); + + try { + + // Read the composite files + List<Composite> composites = new ArrayList<Composite>(); + for (String compositeFile: compositeFiles) { + InputStream is = classLoader.getResourceAsStream(compositeFile); + Composite composite = staxProcessor.read(is, Composite.class); + resolver.addModel(composite); + composites.add(composite); + } + + for (Composite composite: composites) { + + // Resolve the composite + compositeProcessor.resolve(composite, resolver); + } + + // Wire the top level component's composite + buildComposite(composites.get(0), assemblyFactory, scaBindingFactory, interfaceContractMapper); + + } catch (ContributionException e) { + throw new RuntimeException(e); + } catch (CompositeBuilderException e) { + throw new RuntimeException(e); + } + } + + private void buildComposite(Composite composite, AssemblyFactory assemblyFactory, + SCABindingFactory scaBindingFactory, InterfaceContractMapper interfaceContractMapper) throws CompositeBuilderException { + + CompositeBuilderMonitor monitor = new CompositeBuilderMonitor() { + + public void problem(Problem problem) { + // Uncommenting the following two lines can be useful to detect + // and troubleshoot SCA assembly XML composite configuration + // problems. + + System.out.println("Composite assembly problem: " + problem.getMessage()); + } + }; + + // Configure and wire the composite + CompositeBuilderImpl compositeUtil = new CompositeBuilderImpl(assemblyFactory, scaBindingFactory, interfaceContractMapper, monitor); + compositeUtil.build(composite); + + } + + public <B> B getService(Class<B> businessInterface, String serviceName) { + Object bean = beanFactory.getBean(serviceName); + return businessInterface.cast(bean); + } + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanBaseJavaImplementationImpl.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanBaseJavaImplementationImpl.java new file mode 100644 index 0000000000..8a88ba28d9 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanBaseJavaImplementationImpl.java @@ -0,0 +1,182 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring.implementation.java.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.tuscany.sca.assembly.ConstrainingType; +import org.apache.tuscany.sca.assembly.Property; +import org.apache.tuscany.sca.assembly.Reference; +import org.apache.tuscany.sca.assembly.Service; +import org.apache.tuscany.sca.implementation.java.BaseJavaImplementation; +import org.apache.tuscany.sca.policy.Intent; +import org.apache.tuscany.sca.policy.PolicySet; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.support.RootBeanDefinition; + +/** + * An implementation of the SCA assembly JavaImplementation interface backed by a Spring + * Bean definition. + * + * @version $Rev$ $Date$ + */ +public class BeanBaseJavaImplementationImpl extends RootBeanDefinition implements BaseJavaImplementation, Cloneable { + private static final long serialVersionUID = 1L; + + private List<Service> services = new ArrayList<Service>(); + private List<Intent> requiredIntents = new ArrayList<Intent>(); + private List<PolicySet> policySets = new ArrayList<PolicySet>(); + private ConstrainingType constrainingType; + private List<Object> extensions = new ArrayList<Object>(); + private boolean unresolved; + private BeanDefinitionRegistry beanRegistry; + private String uri; + + protected BeanBaseJavaImplementationImpl(BeanDefinitionRegistry beanRegistry) { + this.beanRegistry = beanRegistry; + + // Register this bean definition in the bean registry + //TODO find a better name for bean definitions representing component types + String name = String.valueOf(System.identityHashCode(this)); + this.beanRegistry.registerBeanDefinition(name, this); + } + + @Override + public Object clone() throws CloneNotSupportedException { + BeanBaseJavaImplementationImpl clone = (BeanBaseJavaImplementationImpl)super.clone(); + + clone.getServices().clear(); + for (Service service: getServices()) { + clone.getServices().add((Service)service.clone()); + } + clone.getReferences().clear(); + for (Reference reference: getReferences()) { + clone.getReferences().add((Reference)reference.clone()); + } + clone.getProperties().clear(); + for (Property property: getProperties()) { + clone.getProperties().add((Property)property.clone()); + } + return clone; + } + + public Class<?> getJavaClass() { + return super.getBeanClass(); + } + + public String getName() { + return super.getBeanClassName(); + } + + public void setJavaClass(Class<?> javaClass) { + super.setBeanClass(javaClass); + } + + public void setName(String className) { + super.setBeanClassName(className); + } + + public String getURI() { + return uri; + } + + public void setURI(String uri) { + this.uri = uri; + } + + public ConstrainingType getConstrainingType() { + return constrainingType; + } + + //TODO use a better list implementation + private List<Property> properties = new ArrayList<Property>() { + private static final long serialVersionUID = 1L; + + // Add a property + public boolean add(Property property) { + + // Add corresponding bean property value + getPropertyValues().addPropertyValue(property.getName(), property.getValue()); + + return super.add(property); + } + }; + + public List<Property> getProperties() { + return properties; + } + + //TODO use a better list implementation + private List<Reference> references = new ArrayList<Reference>() { + private static final long serialVersionUID = 1L; + + // Add a reference + public boolean add(Reference reference) { + + // Add corresponding bean property value + String target; + if (!reference.getTargets().isEmpty()) { + //TODO handle multiplicity + target = reference.getTargets().get(0).getName(); + int i = target.indexOf('/'); + if (i != -1) + target = target.substring(0, i); + } else { + target = null; + } + getPropertyValues().addPropertyValue(reference.getName(), target); + + return super.add(reference); + } + }; + + public List<Reference> getReferences() { + return references; + } + + public List<Service> getServices() { + return services; + } + + public void setConstrainingType(ConstrainingType constrainingType) { + this.constrainingType = constrainingType; + } + + public List<Object> getExtensions() { + return extensions; + } + + public boolean isUnresolved() { + return unresolved; + } + + public void setUnresolved(boolean unresolved) { + this.unresolved = unresolved; + } + + public List<Intent> getRequiredIntents() { + return requiredIntents; + } + + public List<PolicySet> getPolicySets() { + return policySets; + } + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaImplementationFactory.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaImplementationFactory.java new file mode 100644 index 0000000000..c9cd0f8892 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaImplementationFactory.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring.implementation.java.impl; + +import org.apache.tuscany.sca.implementation.java.JavaImplementation; +import org.apache.tuscany.sca.implementation.java.JavaImplementationFactory; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; + +/** + * An alternate implementation of the SCA Java assembly model factory that creates SCA + * Java assembly model objects backed by Spring bean definitions. + * + * @version $Rev$ $Date$ + */ +public class BeanJavaImplementationFactory implements JavaImplementationFactory { + + private BeanDefinitionRegistry beanRegistry; + + public BeanJavaImplementationFactory(BeanDefinitionRegistry beanRegistry) { + this.beanRegistry = beanRegistry; + } + + public JavaImplementation createJavaImplementation() { + return new BeanJavaImplementationImpl(beanRegistry); + } + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaImplementationImpl.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaImplementationImpl.java new file mode 100644 index 0000000000..5d787d2fd2 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaImplementationImpl.java @@ -0,0 +1,164 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring.implementation.java.impl; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Member; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.tuscany.sca.implementation.java.JavaImplementation; +import org.apache.tuscany.sca.implementation.java.impl.JavaConstructorImpl; +import org.apache.tuscany.sca.implementation.java.impl.JavaElementImpl; +import org.apache.tuscany.sca.implementation.java.impl.JavaResourceImpl; +import org.apache.tuscany.sca.implementation.java.impl.JavaScopeImpl; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; + +/** + * An implementation of the SCA assembly JavaImplementation interface backed by a Spring + * Bean definition. + * + * @version $$Rev$$ $$Date$$ + */ +public class BeanJavaImplementationImpl extends BeanBaseJavaImplementationImpl implements JavaImplementation { + private static final long serialVersionUID = 6792198458193774178L; + + private JavaConstructorImpl<?> constructorDefinition; + private Map<Constructor, JavaConstructorImpl> constructors = new HashMap<Constructor, JavaConstructorImpl>(); + private Method initMethod; + private Method destroyMethod; + private final Map<String, JavaResourceImpl> resources = new HashMap<String, JavaResourceImpl>(); + private final Map<String, JavaElementImpl> propertyMembers = new HashMap<String, JavaElementImpl>(); + private final Map<String, JavaElementImpl> referenceMembers = new HashMap<String, JavaElementImpl>(); + private final Map<String, JavaElementImpl> callbackMembers = new HashMap<String, JavaElementImpl>(); + private Member conversationIDMember; + private boolean eagerInit; + private boolean allowsPassByReference; + private List<Method> allowsPassByReferenceMethods = new ArrayList<Method>(); + private long maxAge = -1; + private long maxIdleTime = -1; + private JavaScopeImpl scope = JavaScopeImpl.STATELESS; + + protected BeanJavaImplementationImpl(BeanDefinitionRegistry beanRegistry) { + super(beanRegistry); + } + + public JavaConstructorImpl<?> getConstructor() { + return constructorDefinition; + } + + public void setConstructor(JavaConstructorImpl<?> definition) { + this.constructorDefinition = definition; + } + + public Method getInitMethod() { + return initMethod; + } + + public void setInitMethod(Method initMethod) { + this.initMethod = initMethod; + } + + public Method getDestroyMethod() { + return destroyMethod; + } + + public void setDestroyMethod(Method destroyMethod) { + this.destroyMethod = destroyMethod; + } + + public Map<String, JavaResourceImpl> getResources() { + return resources; + } + + public Member getConversationIDMember() { + return this.conversationIDMember; + } + + public void setConversationIDMember(Member conversationIDMember) { + this.conversationIDMember = conversationIDMember; + } + + public boolean isAllowsPassByReference() { + return allowsPassByReference; + } + + public void setAllowsPassByReference(boolean allowsPassByReference) { + this.allowsPassByReference = allowsPassByReference; + } + + public List<Method> getAllowsPassByReferenceMethods() { + return allowsPassByReferenceMethods; + } + + public boolean isAllowsPassByReference(Method method) { + return allowsPassByReference || allowsPassByReferenceMethods.contains(method); + } + + public Map<Constructor, JavaConstructorImpl> getConstructors() { + return constructors; + } + + public boolean isEagerInit() { + return eagerInit; + } + + public void setEagerInit(boolean eagerInit) { + this.eagerInit = eagerInit; + } + + public Map<String, JavaElementImpl> getCallbackMembers() { + return callbackMembers; + } + + public Map<String, JavaElementImpl> getPropertyMembers() { + return propertyMembers; + } + + public Map<String, JavaElementImpl> getReferenceMembers() { + return referenceMembers; + } + + public JavaScopeImpl getJavaScope() { + return scope; + } + + public void setJavaScope(JavaScopeImpl scope) { + this.scope = scope; + } + + public long getMaxAge() { + return maxAge; + } + + public void setMaxAge(long maxAge) { + this.maxAge = maxAge; + } + + public long getMaxIdleTime() { + return maxIdleTime; + } + + public void setMaxIdleTime(long maxIdleTime) { + this.maxIdleTime = maxIdleTime; + } +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaInterfaceContractImpl.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaInterfaceContractImpl.java new file mode 100644 index 0000000000..17a7e9084c --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaInterfaceContractImpl.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring.implementation.java.impl; + +import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceContractImpl; + +/** + * An implementation of a Java interface contract. + * + * @version $Rev$ $Date$ + */ +public class BeanJavaInterfaceContractImpl extends JavaInterfaceContractImpl { + + protected BeanJavaInterfaceContractImpl() { + } + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaInterfaceFactory.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaInterfaceFactory.java new file mode 100644 index 0000000000..6557d23f27 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaInterfaceFactory.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring.implementation.java.impl; + +import org.apache.tuscany.sca.interfacedef.java.JavaInterface; +import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract; +import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory; + +/** + * An alternate implementation of the SCA Java assembly model factory that creates SCA + * Java assembly model objects backed by Spring bean definitions. + * + * @version $Rev$ $Date$ + */ +public class BeanJavaInterfaceFactory implements JavaInterfaceFactory { + + public BeanJavaInterfaceFactory() { + } + + public JavaInterface createJavaInterface() { + return new BeanJavaInterfaceImpl(); + } + + public JavaInterfaceContract createJavaInterfaceContract() { + return new BeanJavaInterfaceContractImpl(); + } + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaInterfaceImpl.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaInterfaceImpl.java new file mode 100644 index 0000000000..3d2c4b3e4d --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/main/java/org/apache/tuscany/sca/core/spring/implementation/java/impl/BeanJavaInterfaceImpl.java @@ -0,0 +1,118 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring.implementation.java.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.tuscany.sca.interfacedef.Operation; +import org.apache.tuscany.sca.interfacedef.java.JavaInterface; +import org.apache.tuscany.sca.policy.Intent; + +/** + * An alternate implementation of the SCA Java assembly model JavaInterface + * interface. + * + * @version $Rev$ $Date$ + */ +public class BeanJavaInterfaceImpl implements JavaInterface { + + private String className; + private Class<?> javaClass; + private Class<?> callbackClass; + private boolean conversational; + private boolean remotable; + List<Intent> requiredIntents = new ArrayList<Intent>(); + private List<Object> extensions = new ArrayList<Object>(); + private List<Operation> operations = new ArrayList<Operation>(); + private boolean unresolved = false; + + protected BeanJavaInterfaceImpl() { + } + + public String getName() { + if (isUnresolved()) { + return className; + } + else { + return javaClass.getName(); + } + } + + public void setName(String className) { + if (!isUnresolved()) + throw new IllegalStateException(); + this.className = className; + } + + public Class<?> getJavaClass() { + return javaClass; + } + + public void setJavaClass(Class<?> javaClass) { + this.javaClass = javaClass; + } + + public Class<?> getCallbackClass() { + return callbackClass; + } + + public void setCallbackClass(Class<?> callbackClass) { + this.callbackClass = callbackClass; + } + + public boolean isConversational() { + return conversational; + } + + public boolean isRemotable() { + return remotable; + } + + public void setConversational(boolean conversational) { + this.conversational = conversational; + } + + public void setRemotable(boolean local) { + this.remotable = local; + } + + public List<Intent> getRequiredIntents() { + return requiredIntents; + } + + public List<Object> getExtensions() { + return extensions; + } + + public List<Operation> getOperations() { + return operations; + } + + public boolean isUnresolved() { + return unresolved; + } + + public void setUnresolved(boolean undefined) { + this.unresolved = undefined; + } + + public void setDefaultDataBinding(String dataBinding) { + } +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/AddService.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/AddService.java new file mode 100644 index 0000000000..4eeb30a9c2 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/AddService.java @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 calculator; + +public interface AddService { + + double add(double n1, double n2); + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/AddServiceImpl.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/AddServiceImpl.java new file mode 100644 index 0000000000..ea3e5341d5 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/AddServiceImpl.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 calculator; + +import org.osoa.sca.annotations.EagerInit; +import org.osoa.sca.annotations.Scope; + +/** + * An implementation of the Add service + */ +@Scope("COMPOSITE") +@EagerInit +public class AddServiceImpl implements AddService { + + public double add(double n1, double n2) { + return n1 + n2; + } + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/CalculatorClient.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/CalculatorClient.java new file mode 100644 index 0000000000..56e737e3ab --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/CalculatorClient.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 calculator; + +import org.apache.tuscany.sca.core.spring.context.SCADomainContext; + +/** + * This client program shows how to create an SCA runtime, start it, locate the + * Calculator service and invoke it. + */ +public class CalculatorClient { + public static void main(String[] args) throws Exception { + + SCADomainContext context = new SCADomainContext("org/apache/tuscany/core/spring/Calculator.composite"); + + CalculatorService calculatorService = context.getService(CalculatorService.class, "CalculatorServiceComponent"); + + // Calculate + System.out.println("3 + 2=" + calculatorService.add(3, 2)); + System.out.println("3 - 2=" + calculatorService.subtract(3, 2)); + System.out.println("3 * 2=" + calculatorService.multiply(3, 2)); + System.out.println("3 / 2=" + calculatorService.divide(3, 2)); + + } +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/CalculatorService.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/CalculatorService.java new file mode 100644 index 0000000000..c89043276e --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/CalculatorService.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 calculator; + +/** + * The Calculator service interface. + */ +public interface CalculatorService { + + double add(double n1, double n2); + + double subtract(double n1, double n2); + + double multiply(double n1, double n2); + + double divide(double n1, double n2); + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/CalculatorServiceImpl.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/CalculatorServiceImpl.java new file mode 100644 index 0000000000..11e8974657 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/CalculatorServiceImpl.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 calculator; + +import org.osoa.sca.annotations.Reference; +import org.osoa.sca.annotations.Scope; + +/** + * An implementation of the Calculator service. + */ +@Scope("COMPOSITE") +public class CalculatorServiceImpl implements CalculatorService { + + private AddService addService; + private SubtractService subtractService; + private MultiplyService multiplyService; + private DivideService divideService; + + @Reference + public void setAddService(AddService addService) { + this.addService = addService; + } + + @Reference + public void setSubtractService(SubtractService subtractService) { + this.subtractService = subtractService; + } + + @Reference + public void setDivideService(DivideService divideService) { + this.divideService = divideService; + } + + @Reference + public void setMultiplyService(MultiplyService multiplyService) { + this.multiplyService = multiplyService; + } + + public double add(double n1, double n2) { + return addService.add(n1, n2); + } + + public double subtract(double n1, double n2) { + return subtractService.subtract(n1, n2); + } + + public double multiply(double n1, double n2) { + return multiplyService.multiply(n1, n2); + } + + public double divide(double n1, double n2) { + return divideService.divide(n1, n2); + } + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/DivideService.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/DivideService.java new file mode 100644 index 0000000000..131c5a8014 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/DivideService.java @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 calculator; + +public interface DivideService { + + double divide(double n1, double n2); + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/DivideServiceImpl.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/DivideServiceImpl.java new file mode 100644 index 0000000000..9c7e96a668 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/DivideServiceImpl.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 calculator; + +import org.osoa.sca.annotations.Scope; + +/** + * An implementation of the Divide service. + */ +@Scope("COMPOSITE") +public class DivideServiceImpl implements DivideService { + + public double divide(double n1, double n2) { + return n1 / n2; + } + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/MultiplyService.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/MultiplyService.java new file mode 100644 index 0000000000..a917896aeb --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/MultiplyService.java @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 calculator; + +public interface MultiplyService { + + double multiply(double n1, double n2); + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/MultiplyServiceImpl.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/MultiplyServiceImpl.java new file mode 100644 index 0000000000..4892481203 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/MultiplyServiceImpl.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 calculator; + +import org.osoa.sca.annotations.Scope; + +/** + * An implementation of the Multiply service. + */ +@Scope("COMPOSITE") +public class MultiplyServiceImpl implements MultiplyService { + + public double multiply(double n1, double n2) { + return n1 * n2; + } + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/NestedCalculatorClient.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/NestedCalculatorClient.java new file mode 100644 index 0000000000..27430b7f5d --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/NestedCalculatorClient.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 calculator; + +import org.apache.tuscany.sca.core.spring.context.SCADomainContext; + +/** + * This client program shows how to create an SCA runtime, start it, locate the + * Calculator service and invoke it. + */ +public class NestedCalculatorClient { + public static void main(String[] args) throws Exception { + + SCADomainContext context = new SCADomainContext( + "org/apache/tuscany/core/spring/OuterCalculator.composite", + "org/apache/tuscany/core/spring/InnerCalculator.composite", + "org/apache/tuscany/core/spring/InnerOperations.composite"); + + CalculatorService calculatorService = context.getService(CalculatorService.class, "CalculatorServiceComponent/CalculatorServiceComponent"); + + // Calculate + System.out.println("3 + 2=" + calculatorService.add(3, 2)); + System.out.println("3 - 2=" + calculatorService.subtract(3, 2)); + System.out.println("3 * 2=" + calculatorService.multiply(3, 2)); + System.out.println("3 / 2=" + calculatorService.divide(3, 2)); + + } +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/SubtractService.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/SubtractService.java new file mode 100644 index 0000000000..e328f024ea --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/SubtractService.java @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 calculator; + +public interface SubtractService { + + double subtract(double n1, double n2); + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/SubtractServiceImpl.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/SubtractServiceImpl.java new file mode 100644 index 0000000000..ee1d7c3457 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/calculator/SubtractServiceImpl.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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 calculator; + +import org.osoa.sca.annotations.Scope; + +/** + * An implementation of the subtract service. + */ +@Scope("COMPOSITE") +public class SubtractServiceImpl implements SubtractService { + + public double subtract(double n1, double n2) { + return n1 - n2; + } + +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/org/apache/tuscany/sca/core/spring/CalculatorTestCase.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/org/apache/tuscany/sca/core/spring/CalculatorTestCase.java new file mode 100644 index 0000000000..97a44258a8 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/org/apache/tuscany/sca/core/spring/CalculatorTestCase.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring; + +import junit.framework.TestCase; + +import org.apache.tuscany.sca.core.spring.context.SCADomainContext; + +import calculator.CalculatorService; + +/** + * This shows how to test the Calculator service component. + */ +public class CalculatorTestCase extends TestCase { + + private SCADomainContext context; + private CalculatorService calculatorService; + + protected void setUp() throws Exception { + context = new SCADomainContext("org/apache/tuscany/sca/core/spring/Calculator.composite"); + + calculatorService = context.getService(CalculatorService.class, "CalculatorServiceComponent"); + } + + protected void tearDown() throws Exception { + context = null; + calculatorService = null; + } + + public void testCalculator() throws Exception { + // Calculate + assertEquals(calculatorService.add(3, 2), 5.0); + assertEquals(calculatorService.subtract(3, 2), 1.0); + assertEquals(calculatorService.multiply(3, 2), 6.0); + assertEquals(calculatorService.divide(3, 2), 1.5); + + } +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/org/apache/tuscany/sca/core/spring/NestedCalculatorTestCase.java b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/org/apache/tuscany/sca/core/spring/NestedCalculatorTestCase.java new file mode 100644 index 0000000000..5ef16a91d8 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/java/org/apache/tuscany/sca/core/spring/NestedCalculatorTestCase.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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.sca.core.spring; + +import junit.framework.TestCase; + +import org.apache.tuscany.sca.core.spring.context.SCADomainContext; + +import calculator.CalculatorService; + +/** + * This shows how to test the Calculator service component. + */ +public class NestedCalculatorTestCase extends TestCase { + + private SCADomainContext context; + private CalculatorService calculatorService; + + protected void setUp() throws Exception { + context = new SCADomainContext( + "org/apache/tuscany/sca/core/spring/OuterCalculator.composite", + "org/apache/tuscany/sca/core/spring/InnerCalculator.composite", + "org/apache/tuscany/sca/core/spring/InnerOperations.composite"); + + calculatorService = context.getService(CalculatorService.class, "CalculatorServiceComponent/InnerCalculatorServiceComponent"); + } + + protected void tearDown() throws Exception { + context = null; + calculatorService = null; + } + + public void testCalculator() throws Exception { + // Calculate + assertEquals(calculatorService.add(3, 2), 5.0); + assertEquals(calculatorService.subtract(3, 2), 1.0); + assertEquals(calculatorService.multiply(3, 2), 6.0); + assertEquals(calculatorService.divide(3, 2), 1.5); + + } +} diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/resources/org/apache/tuscany/sca/core/spring/Calculator.composite b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/resources/org/apache/tuscany/sca/core/spring/Calculator.composite new file mode 100644 index 0000000000..6d998ba035 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/resources/org/apache/tuscany/sca/core/spring/Calculator.composite @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. +--> +<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" + xmlns:calc="http://sample.calculator" + name="calc:TestBeanCalculator"> + + <service name="CalculatorService" promote="CalculatorServiceComponent"> + <interface.java interface="calculator.CalculatorService"/> + </service> + + <component name="CalculatorServiceComponent"> + <implementation.java class="calculator.CalculatorServiceImpl"/> + <reference name="addService" target="AddServiceComponent"/> + <reference name="subtractService" target="SubtractServiceComponent"/> + <reference name="multiplyService" target="MultiplyServiceComponent"/> + <reference name="divideService" target="DivideServiceComponent"/> + </component> + + <component name="AddServiceComponent"> + <implementation.java class="calculator.AddServiceImpl"/> + </component> + + <component name="SubtractServiceComponent"> + <implementation.java class="calculator.SubtractServiceImpl"/> + </component> + + <component name="MultiplyServiceComponent"> + <implementation.java class="calculator.MultiplyServiceImpl"/> + </component> + + <component name="DivideServiceComponent"> + <implementation.java class="calculator.DivideServiceImpl"/> + </component> + +</composite> diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/resources/org/apache/tuscany/sca/core/spring/InnerCalculator.composite b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/resources/org/apache/tuscany/sca/core/spring/InnerCalculator.composite new file mode 100644 index 0000000000..8b043f2b4f --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/resources/org/apache/tuscany/sca/core/spring/InnerCalculator.composite @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. +--> +<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" + xmlns:calc="http://calc" + targetNamespace="http://calc" + name="InnerCalculator"> + + <service name="CalculatorService" promote="InnerCalculatorServiceComponent"> + <interface.java interface="calculator.CalculatorService"/> + </service> + + <component name="InnerCalculatorServiceComponent"> + <implementation.java class="calculator.CalculatorServiceImpl"/> + <reference name="addService"/> + <reference name="subtractService"/> + <reference name="multiplyService"/> + <reference name="divideService"/> + </component> + + <reference name="addService" promote="InnerCalculatorServiceComponent/addService"/> + <reference name="subtractService" promote="InnerCalculatorServiceComponent/subtractService"/> + <reference name="multiplyService" promote="InnerCalculatorServiceComponent/multiplyService"/> + <reference name="divideService" promote="InnerCalculatorServiceComponent/divideService"/> + +</composite> diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/resources/org/apache/tuscany/sca/core/spring/InnerOperations.composite b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/resources/org/apache/tuscany/sca/core/spring/InnerOperations.composite new file mode 100644 index 0000000000..d7d1124050 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/resources/org/apache/tuscany/sca/core/spring/InnerOperations.composite @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. +--> +<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" + xmlns:calc="http://calc" + targetNamespace="http://calc" + name="InnerOperations"> + + <service name="AddService" promote="AddServiceComponent"> + <interface.java interface="calculator.AddService"/> + </service> + + <service name="SubtractService" promote="SubtractServiceComponent"> + <interface.java interface="calculator.SubtractService"/> + </service> + + <service name="MultiplyService" promote="MultiplyServiceComponent"> + <interface.java interface="calculator.MultiplyService"/> + </service> + + <service name="DivideService" promote="DivideServiceComponent"> + <interface.java interface="calculator.DivideService"/> + </service> + + <component name="AddServiceComponent"> + <implementation.java class="calculator.AddServiceImpl"/> + </component> + + <component name="SubtractServiceComponent"> + <implementation.java class="calculator.SubtractServiceImpl"/> + </component> + + <component name="MultiplyServiceComponent"> + <implementation.java class="calculator.MultiplyServiceImpl"/> + </component> + + <component name="DivideServiceComponent"> + <implementation.java class="calculator.DivideServiceImpl"/> + </component> + +</composite> diff --git a/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/resources/org/apache/tuscany/sca/core/spring/OuterCalculator.composite b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/resources/org/apache/tuscany/sca/core/spring/OuterCalculator.composite new file mode 100644 index 0000000000..c2b6cced36 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-0.90/modules/core-spring/src/test/resources/org/apache/tuscany/sca/core/spring/OuterCalculator.composite @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. +--> +<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" + xmlns:calc="http://calc" + targetNamespace="http://calc" + name="OuterCalculator"> + + <service name="CalculatorService" promote="CalculatorServiceComponent"> + <interface.java interface="calculator.CalculatorService"/> + </service> + + <component name="CalculatorServiceComponent"> + <implementation.composite name="calc:InnerCalculator"/> + <reference name="addService" target="OperationsServiceComponent/AddService"/> + <reference name="subtractService" target="OperationsServiceComponent/SubtractService"/> + <reference name="multiplyService" target="OperationsServiceComponent/MultiplyService"/> + <reference name="divideService" target="OperationsServiceComponent/DivideService"/> + </component> + + <component name="OperationsServiceComponent"> + <implementation.composite name="calc:InnerOperations"/> + </component> + +</composite> |