You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2006/12/30 22:42:28 UTC
svn commit: r491325 [2/6] - in /incubator/tuscany/java/sca:
kernel/core/src/main/java/org/apache/tuscany/core/binding/
kernel/core/src/main/java/org/apache/tuscany/core/binding/local/
kernel/core/src/main/java/org/apache/tuscany/core/builder/ kernel/co...
Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ServiceImpl.java?view=auto&rev=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ServiceImpl.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ServiceImpl.java Sat Dec 30 13:42:22 2006
@@ -0,0 +1,99 @@
+/*
+ * 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.core.implementation.composite;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.net.URI;
+
+import org.apache.tuscany.spi.component.AbstractSCAObject;
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.ServiceBinding;
+import org.apache.tuscany.spi.model.Scope;
+import org.apache.tuscany.spi.model.ServiceContract;
+
+/**
+ * The default implementation of a {@link Service}
+ *
+ * @version $Rev$ $Date$
+ */
+public class ServiceImpl extends AbstractSCAObject implements Service {
+ private ServiceContract<?> serviceContract;
+ private List<ServiceBinding> bindings = new ArrayList<ServiceBinding>();
+ private boolean system;
+ private URI targetUri;
+
+ public ServiceImpl(String name, CompositeComponent parent, ServiceContract<?> contract) {
+ this(name, parent, contract, null, false);
+ }
+
+ public ServiceImpl(String name,
+ CompositeComponent parent,
+ ServiceContract<?> contract,
+ URI targetUri,
+ boolean system
+ ) {
+ super(name, parent);
+ this.serviceContract = contract;
+ this.system = system;
+ this.targetUri = targetUri;
+ }
+
+ public Scope getScope() {
+ return Scope.SYSTEM;
+ }
+
+ public ServiceContract<?> getServiceContract() {
+ return serviceContract;
+ }
+
+ public URI getTargetUri() {
+ return targetUri;
+ }
+
+ public List<ServiceBinding> getServiceBindings() {
+ return Collections.unmodifiableList(bindings);
+ }
+
+ public void addServiceBinding(ServiceBinding binding) {
+ binding.setService(this);
+ bindings.add(binding);
+ }
+
+ public void start() {
+ super.start();
+ for (ServiceBinding binding : bindings) {
+ binding.start();
+ }
+ }
+
+ public void stop() {
+ super.stop();
+ for (ServiceBinding binding : bindings) {
+ binding.stop();
+ }
+ }
+
+ @Override
+ public boolean isSystem() {
+ return system;
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ServiceImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/composite/ServiceImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java Sat Dec 30 13:42:22 2006
@@ -25,7 +25,7 @@
import org.apache.tuscany.spi.builder.MissingWireTargetException;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.component.Reference;
-import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.ServiceBinding;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.extension.BindingBuilderExtension;
import org.apache.tuscany.spi.model.BoundReferenceDefinition;
@@ -33,27 +33,28 @@
import org.apache.tuscany.spi.model.ServiceContract;
import org.apache.tuscany.core.implementation.system.component.SystemReferenceImpl;
-import org.apache.tuscany.core.implementation.system.component.SystemServiceImpl;
+import org.apache.tuscany.core.implementation.system.component.SystemServiceBindingImpl;
import org.apache.tuscany.core.implementation.system.model.SystemBindingDefinition;
/**
- * Creates services and references confgured with the system binding
+ * Creates serviceBindings and references confgured with the system binding
*
* @version $$Rev$$ $$Date$$
*/
public class SystemBindingBuilder extends BindingBuilderExtension<SystemBindingDefinition>
implements BindingBuilder<SystemBindingDefinition> {
- public Service build(CompositeComponent parent,
- BoundServiceDefinition<SystemBindingDefinition> definition,
- DeploymentContext deploymentContext) throws BuilderException {
+ public ServiceBinding build(CompositeComponent parent,
+ BoundServiceDefinition definition,
+ SystemBindingDefinition bindingDefinition,
+ DeploymentContext deploymentContext) throws BuilderException {
URI uri = definition.getTarget();
if (uri == null) {
throw new MissingWireTargetException("Target URI not specified", definition.getName());
}
ServiceContract<?> contract = definition.getServiceContract();
- return new SystemServiceImpl(definition.getName(), parent, contract);
+ return new SystemServiceBindingImpl(definition.getName(), parent, contract);
}
public Reference build(CompositeComponent parent,
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemCompositeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemCompositeBuilder.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemCompositeBuilder.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemCompositeBuilder.java Sat Dec 30 13:42:22 2006
@@ -22,16 +22,15 @@
import java.util.List;
import org.apache.tuscany.spi.builder.BuilderException;
+import org.apache.tuscany.spi.builder.BuilderInstantiationException;
import org.apache.tuscany.spi.builder.BuilderRegistry;
import org.apache.tuscany.spi.builder.Connector;
-import org.apache.tuscany.spi.builder.BuilderInstantiationException;
import org.apache.tuscany.spi.component.Component;
import org.apache.tuscany.spi.component.ComponentRegistrationException;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.component.SCAObject;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.extension.ComponentBuilderExtension;
-import org.apache.tuscany.spi.model.BindingDefinition;
import org.apache.tuscany.spi.model.BoundServiceDefinition;
import org.apache.tuscany.spi.model.ComponentDefinition;
import org.apache.tuscany.spi.model.CompositeComponentType;
@@ -61,17 +60,15 @@
DeploymentContext deploymentContext) throws BuilderException {
SystemCompositeImplementation impl = componentDefinition.getImplementation();
CompositeComponentType<?, ?, ?> componentType = impl.getComponentType();
- // create lists of all components and services in this composite
+ // create lists of all components and serviceBindings in this composite
List<ComponentDefinition<? extends Implementation<?>>> allComponents =
new ArrayList<ComponentDefinition<? extends Implementation<?>>>();
allComponents.addAll(componentType.getComponents().values());
- List<BoundServiceDefinition<? extends BindingDefinition>> allBoundServices =
- new ArrayList<BoundServiceDefinition<? extends BindingDefinition>>();
+ List<BoundServiceDefinition> allBoundServices = new ArrayList<BoundServiceDefinition>();
for (ServiceDefinition serviceDefinition : componentType.getServices().values()) {
if (serviceDefinition instanceof BoundServiceDefinition) {
- BoundServiceDefinition<? extends BindingDefinition> boundService =
- (BoundServiceDefinition<? extends BindingDefinition>) serviceDefinition;
+ BoundServiceDefinition boundService = (BoundServiceDefinition) serviceDefinition;
allBoundServices.add(boundService);
}
}
@@ -96,7 +93,7 @@
}
}
- for (BoundServiceDefinition<? extends BindingDefinition> serviceDefinition : allBoundServices) {
+ for (BoundServiceDefinition serviceDefinition : allBoundServices) {
SCAObject object;
try {
object = builderRegistry.build(component, serviceDefinition, deploymentContext);
Copied: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceBindingImpl.java (from r490460, incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceImpl.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceBindingImpl.java?view=diff&rev=491325&p1=incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceImpl.java&r1=490460&p2=incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceBindingImpl.java&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceBindingImpl.java Sat Dec 30 13:42:22 2006
@@ -22,6 +22,8 @@
import org.apache.tuscany.spi.component.AbstractSCAObject;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.ServiceBinding;
+import org.apache.tuscany.spi.component.TargetInvokerCreationException;
import org.apache.tuscany.spi.model.Operation;
import org.apache.tuscany.spi.model.Scope;
import org.apache.tuscany.spi.model.ServiceContract;
@@ -30,21 +32,34 @@
import org.apache.tuscany.spi.wire.TargetInvoker;
/**
- * Default implementation for services configured with the system binding
+ * Runtime artifact for the system binding
*
* @version $$Rev$$ $$Date$$
*/
-public class SystemServiceImpl extends AbstractSCAObject implements Service {
+public class SystemServiceBindingImpl extends AbstractSCAObject implements ServiceBinding {
+ protected Service service;
protected InboundWire inboundWire;
protected OutboundWire outboundWire;
protected ServiceContract<?> serviceContract;
- public SystemServiceImpl(String name, CompositeComponent parent, ServiceContract<?> serviceContract)
+ public SystemServiceBindingImpl(String name, CompositeComponent parent, ServiceContract<?> serviceContract)
throws CoreRuntimeException {
super(name, parent);
this.serviceContract = serviceContract;
}
+ public void setService(Service service) {
+ this.service = service;
+ }
+
+ public ServiceContract<?> getServiceContract() {
+ return serviceContract;
+ }
+
+ public void setServiceContract(ServiceContract<?> serviceContract) {
+ this.serviceContract = serviceContract;
+ }
+
public Scope getScope() {
return Scope.SYSTEM;
}
@@ -65,6 +80,11 @@
this.outboundWire = wire;
}
+ public TargetInvoker createTargetInvoker(ServiceContract contract, Operation operation)
+ throws TargetInvokerCreationException {
+ throw new UnsupportedOperationException();
+ }
+
public TargetInvoker createCallbackTargetInvoker(ServiceContract contract, Operation operation) {
throw new UnsupportedOperationException();
}
@@ -77,7 +97,8 @@
throw new UnsupportedOperationException();
}
+ @Override
public boolean isSystem() {
- return true;
+ return service != null && service.isSystem();
}
}
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceBindingImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemServiceBindingImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemSingletonAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemSingletonAtomicComponent.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemSingletonAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/system/component/SystemSingletonAtomicComponent.java Sat Dec 30 13:42:22 2006
@@ -22,6 +22,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Collection;
import org.apache.tuscany.spi.ObjectCreationException;
import org.apache.tuscany.spi.component.AtomicComponent;
@@ -116,8 +117,8 @@
inboundWires.put(wire.getServiceName(), wire);
}
- public Map<String, InboundWire> getInboundWires() {
- return inboundWires;
+ public Collection<InboundWire> getInboundWires() {
+ return Collections.unmodifiableCollection(inboundWires.values());
}
public InboundWire getInboundWire(String serviceName) {
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/launcher/CompositeContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/launcher/CompositeContextImpl.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/launcher/CompositeContextImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/launcher/CompositeContextImpl.java Sat Dec 30 13:42:22 2006
@@ -30,10 +30,17 @@
import org.apache.tuscany.spi.component.Reference;
import org.apache.tuscany.spi.component.SCAObject;
import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.ServiceBinding;
import org.apache.tuscany.spi.wire.InboundWire;
+import org.apache.tuscany.spi.wire.Wire;
import org.apache.tuscany.spi.wire.WireService;
+/**
+ * Default implementation of the {@link org.osoa.sca.CompositeContext}
+ *
+ * @version $Rev$ $Date$
+ */
public class CompositeContextImpl extends SCA implements CompositeContext {
protected final CompositeComponent composite;
protected final WireService wireService;
@@ -51,24 +58,12 @@
setCompositeContext(null);
}
- public ServiceReference createServiceReferenceForSession(Object arg0) {
- return null;
- }
-
- public ServiceReference createServiceReferenceForSession(Object arg0, String arg1) {
- return null;
- }
-
public String getCompositeName() {
- return null;
+ return composite.getName();
}
public String getCompositeURI() {
- return null;
- }
-
- public RequestContext getRequestContext() {
- return null;
+ throw new UnsupportedOperationException();
}
public <T> T locateService(Class<T> serviceInterface, String serviceName) throws ServiceRuntimeException {
@@ -89,8 +84,28 @@
return wireService.createProxy(serviceInterface, wire);
}
+ public ServiceReference createServiceReferenceForSession(Object arg0) {
+ throw new UnsupportedOperationException();
+ }
+
+ public ServiceReference createServiceReferenceForSession(Object arg0, String arg1) {
+ throw new UnsupportedOperationException();
+ }
+
+ public RequestContext getRequestContext() {
+ throw new UnsupportedOperationException();
+ }
+
+ public ServiceReference newSession(String arg0) {
+ throw new UnsupportedOperationException();
+ }
+
+ public ServiceReference newSession(String arg0, Object arg1) {
+ throw new UnsupportedOperationException();
+ }
+
private InboundWire getInboundWire(SCAObject child, String name, String serviceName) {
- InboundWire wire;
+ InboundWire wire = null;
if (child instanceof AtomicComponent) {
wire = ((AtomicComponent) child).getInboundWire(name);
if (wire == null) {
@@ -98,7 +113,16 @@
throw new ServiceRuntimeException("Service not found [" + qName + "]");
}
} else if (child instanceof Service) {
- wire = ((Service) child).getInboundWire();
+ Service service = (Service) child;
+ for (ServiceBinding binding : service.getServiceBindings()) {
+ if (Wire.LOCAL_BINDING.equals(binding.getInboundWire().getBindingType())) {
+ wire = binding.getInboundWire();
+ break;
+ }
+ }
+ if (wire == null) {
+ throw new ServiceRuntimeException("Local binding for service not found [" + name + "]");
+ }
} else if (child instanceof Reference) {
wire = ((Reference) child).getInboundWire();
} else if (child == null) {
@@ -107,14 +131,6 @@
throw new ServiceRuntimeException("Invalid service type [" + child.getClass().getName() + "]");
}
return wire;
- }
-
- public ServiceReference newSession(String arg0) {
- return null;
- }
-
- public ServiceReference newSession(String arg0, Object arg1) {
- return null;
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentLoader.java Sat Dec 30 13:42:22 2006
@@ -53,9 +53,11 @@
import org.apache.tuscany.spi.loader.UndefinedPropertyException;
import org.apache.tuscany.spi.loader.UndefinedReferenceException;
import org.apache.tuscany.spi.loader.UnrecognizedElementException;
+import org.apache.tuscany.spi.model.BoundServiceDefinition;
import org.apache.tuscany.spi.model.ComponentDefinition;
import org.apache.tuscany.spi.model.ComponentType;
import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.core.binding.local.LocalBindingDefinition;
import org.apache.tuscany.spi.model.ModelObject;
import org.apache.tuscany.spi.model.OverrideOptions;
import org.apache.tuscany.spi.model.Property;
@@ -83,7 +85,7 @@
private PropertyObjectFactory propertyFactory;
- @Constructor({"registry", "propertyFactory"})
+ @Constructor
public ComponentLoader(@Autowire LoaderRegistry registry, @Autowire PropertyObjectFactory propertyFactory) {
super(registry);
this.propertyFactory = propertyFactory;
@@ -152,6 +154,18 @@
}
}
+ for (ServiceDefinition serviceDefinition : type.getServices().values()) {
+ if (serviceDefinition instanceof BoundServiceDefinition) {
+ BoundServiceDefinition bsd = (BoundServiceDefinition) serviceDefinition;
+ if (bsd.getBindings().isEmpty()) {
+ if (bsd.getBindings().isEmpty()) {
+ // TODO implement a more advanced option that allows the runtime to
+ // choose a binding
+ bsd.addBinding(new LocalBindingDefinition());
+ }
+ }
+ }
+ }
validate(componentDefinition);
return componentDefinition;
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ComponentTypeElementLoader.java Sat Dec 30 13:42:22 2006
@@ -45,7 +45,7 @@
public class ComponentTypeElementLoader extends LoaderExtension<ComponentType> {
public static final QName COMPONENT_TYPE = new QName(XML_NAMESPACE_1_0, "componentType");
- @Constructor({"registry"})
+ @Constructor
public ComponentTypeElementLoader(@Autowire LoaderRegistry registry) {
super(registry);
}
@@ -72,7 +72,7 @@
while (true) {
switch (reader.next()) {
case START_ELEMENT:
- ModelObject o = registry.load(parent, null, reader, deploymentContext);
+ ModelObject o = registry.load(parent, componentType, reader, deploymentContext);
if (o instanceof ServiceDefinition) {
componentType.add((ServiceDefinition) o);
} else if (o instanceof ReferenceDefinition) {
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/LoaderRegistryImpl.java Sat Dec 30 13:42:22 2006
@@ -39,6 +39,7 @@
import org.apache.tuscany.spi.loader.LoaderRegistry;
import org.apache.tuscany.spi.loader.StAXElementLoader;
import org.apache.tuscany.spi.loader.UnrecognizedElementException;
+import org.apache.tuscany.spi.loader.UnrecognizedComponentTypeException;
import org.apache.tuscany.spi.model.Implementation;
import org.apache.tuscany.spi.model.ModelObject;
@@ -163,7 +164,7 @@
Class<I> key = (Class<I>) implementation.getClass();
ComponentTypeLoader<I> loader = (ComponentTypeLoader<I>) componentTypeLoaders.get(key);
if (loader == null) {
- throw new UnsupportedOperationException();
+ throw new UnrecognizedComponentTypeException(key);
}
loader.load(parent, implementation, deploymentContext);
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ReferenceLoader.java Sat Dec 30 13:42:22 2006
@@ -48,7 +48,7 @@
public class ReferenceLoader extends LoaderExtension<ReferenceDefinition> {
public static final QName REFERENCE = new QName(XML_NAMESPACE_1_0, "reference");
- @Constructor({"registry"})
+ @Constructor
public ReferenceLoader(@Autowire LoaderRegistry registry) {
super(registry);
}
@@ -84,7 +84,8 @@
referenceDefinition.setMultiplicity(multiplicity);
return referenceDefinition;
} else {
- BoundReferenceDefinition<BindingDefinition> referenceDefinition = new BoundReferenceDefinition<BindingDefinition>();
+ BoundReferenceDefinition<BindingDefinition> referenceDefinition =
+ new BoundReferenceDefinition<BindingDefinition>();
referenceDefinition.setName(name);
referenceDefinition.setServiceContract(serviceContract);
referenceDefinition.setMultiplicity(multiplicity);
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/loader/ServiceLoader.java Sat Dec 30 13:42:22 2006
@@ -20,6 +20,8 @@
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
import javax.xml.namespace.QName;
import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
@@ -36,9 +38,11 @@
import org.apache.tuscany.spi.loader.InvalidReferenceException;
import org.apache.tuscany.spi.loader.LoaderException;
import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.UnrecognizedElementException;
import org.apache.tuscany.spi.model.BindingDefinition;
-import org.apache.tuscany.spi.model.BindlessServiceDefinition;
import org.apache.tuscany.spi.model.BoundServiceDefinition;
+import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.CompositeComponentType;
import org.apache.tuscany.spi.model.ModelObject;
import org.apache.tuscany.spi.model.ServiceContract;
import org.apache.tuscany.spi.model.ServiceDefinition;
@@ -52,7 +56,7 @@
private static final QName SERVICE = new QName(XML_NAMESPACE_1_0, "service");
private static final QName REFERENCE = new QName(XML_NAMESPACE_1_0, "reference");
- @Constructor({"registry"})
+ @Constructor
public ServiceLoader(@Autowire LoaderRegistry registry) {
super(registry);
}
@@ -68,7 +72,7 @@
assert SERVICE.equals(reader.getName());
String name = reader.getAttributeValue(null, "name");
String target = null;
- BindingDefinition binding = null;
+ List<BindingDefinition> bindings = new ArrayList<BindingDefinition>();
ServiceContract serviceContract = null;
while (true) {
int i = reader.next();
@@ -79,42 +83,33 @@
String text = reader.getElementText();
target = text != null ? text.trim() : null;
} else {
-
ModelObject o = registry.load(parent, null, reader, deploymentContext);
if (o instanceof ServiceContract) {
serviceContract = (ServiceContract) o;
} else if (o instanceof BindingDefinition) {
- binding = (BindingDefinition) o;
+ bindings.add((BindingDefinition) o);
+ } else {
+ throw new UnrecognizedElementException(reader.getName());
}
}
break;
case END_ELEMENT:
if (SERVICE.equals(reader.getName())) {
- if (binding != null) {
- URI targetURI = null;
- if (target != null) {
- try {
- targetURI = new URI(target);
- } catch (URISyntaxException e) {
- throw new InvalidReferenceException(target, name);
- }
- }
-
+ if (object instanceof ComponentType && !(object instanceof CompositeComponentType)) {
+ // the load is being done for an atomic component type
// FIXME need a way to specify "remotable" on a service
- return new BoundServiceDefinition<BindingDefinition>(name, serviceContract, false, binding,
- targetURI);
- } else if (target != null) {
- URI targetURI;
+ return new ServiceDefinition(name, serviceContract, false);
+ }
+ URI targetURI = null;
+ if (target != null) {
try {
targetURI = new URI(target);
} catch (URISyntaxException e) {
throw new InvalidReferenceException(target, name);
}
- return new BindlessServiceDefinition(name, serviceContract, false, targetURI);
- } else {
- // FIXME need a way to specify "remotable" on a service
- return new ServiceDefinition(name, serviceContract, false);
}
+ // FIXME need a way to specify "remotable" on a service
+ return new BoundServiceDefinition(name, serviceContract, bindings, false, targetURI);
}
break;
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/InboundWireImpl.java Sat Dec 30 13:42:22 2006
@@ -20,6 +20,7 @@
import java.util.HashMap;
import java.util.Map;
+import javax.xml.namespace.QName;
import org.apache.tuscany.spi.component.AtomicComponent;
import org.apache.tuscany.spi.component.SCAObject;
@@ -38,6 +39,7 @@
* @version $Rev$ $Date$
*/
public class InboundWireImpl implements InboundWire {
+ private QName bindingType = LOCAL_BINDING;
private String serviceName;
private ServiceContract serviceContract;
private OutboundWire targetWire;
@@ -47,6 +49,14 @@
new HashMap<Object, Map<Operation<?>, OutboundInvocationChain>>();
private SCAObject container;
private AtomicComponent targetComponent;
+
+ public QName getBindingType() {
+ return bindingType;
+ }
+
+ public void setBindingType(QName bindingType) {
+ this.bindingType = bindingType;
+ }
public Object getTargetService() throws TargetResolutionException {
// JFM fixme hack
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/OutboundWireImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/OutboundWireImpl.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/OutboundWireImpl.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/OutboundWireImpl.java Sat Dec 30 13:42:22 2006
@@ -21,6 +21,8 @@
import java.util.HashMap;
import java.util.Map;
+import javax.xml.namespace.QName;
+
import org.apache.tuscany.spi.QualifiedName;
import org.apache.tuscany.spi.component.SCAObject;
import org.apache.tuscany.spi.component.TargetResolutionException;
@@ -38,6 +40,7 @@
* @version $Rev$ $Date$
*/
public class OutboundWireImpl implements OutboundWire {
+ private QName bindingType = LOCAL_BINDING;
private ServiceContract serviceContract;
private Class<?>[] callbackInterfaces;
private Map<Operation<?>, OutboundInvocationChain> chains = new HashMap<Operation<?>, OutboundInvocationChain>();
@@ -48,6 +51,14 @@
private InboundWire targetWire;
private SCAObject container;
private boolean autowire;
+
+ public QName getBindingType() {
+ return bindingType;
+ }
+
+ public void setBindingType(QName bindingType) {
+ this.bindingType = bindingType;
+ }
public Object getTargetService() throws TargetResolutionException {
assert targetWire != null;
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/WireServiceExtension.java Sat Dec 30 13:42:22 2006
@@ -20,34 +20,30 @@
import java.util.Map;
-import org.apache.tuscany.spi.component.WorkContext;
+import org.apache.tuscany.spi.QualifiedName;
import org.apache.tuscany.spi.component.Component;
import org.apache.tuscany.spi.component.CompositeComponent;
-import org.apache.tuscany.spi.component.Service;
import org.apache.tuscany.spi.component.Reference;
-import org.apache.tuscany.spi.model.Operation;
-import org.apache.tuscany.spi.model.ServiceContract;
-import org.apache.tuscany.spi.model.ReferenceTarget;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
-import org.apache.tuscany.spi.model.ServiceDefinition;
-import org.apache.tuscany.spi.model.BindlessServiceDefinition;
+import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.ServiceBinding;
+import org.apache.tuscany.spi.component.WorkContext;
import org.apache.tuscany.spi.model.ComponentDefinition;
-import org.apache.tuscany.spi.model.Implementation;
import org.apache.tuscany.spi.model.ComponentType;
import org.apache.tuscany.spi.model.CompositeComponentType;
-import org.apache.tuscany.spi.model.BoundServiceDefinition;
-import org.apache.tuscany.spi.model.BindingDefinition;
+import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.ReferenceDefinition;
+import org.apache.tuscany.spi.model.ReferenceTarget;
+import org.apache.tuscany.spi.model.ServiceContract;
+import org.apache.tuscany.spi.model.ServiceDefinition;
import org.apache.tuscany.spi.policy.PolicyBuilderRegistry;
-import org.apache.tuscany.spi.wire.WireService;
+import org.apache.tuscany.spi.wire.InboundInvocationChain;
+import org.apache.tuscany.spi.wire.InboundWire;
import org.apache.tuscany.spi.wire.IncompatibleServiceContractException;
import org.apache.tuscany.spi.wire.OutboundInvocationChain;
-import org.apache.tuscany.spi.wire.InboundInvocationChain;
import org.apache.tuscany.spi.wire.OutboundWire;
-import org.apache.tuscany.spi.wire.InboundWire;
-import org.apache.tuscany.spi.QualifiedName;
+import org.apache.tuscany.spi.wire.WireService;
-import org.apache.tuscany.core.implementation.system.model.SystemBindingDefinition;
-import org.apache.tuscany.core.implementation.composite.CompositeService;
import org.apache.tuscany.core.implementation.composite.CompositeReference;
/**
@@ -114,12 +110,7 @@
for (Operation<?> operation : contract.getOperations().values()) {
InboundInvocationChain chain = createInboundChain(operation);
// TODO handle policy
- //TODO statement below could be cleaner
- if (service instanceof BindlessServiceDefinition) {
- chain.addInterceptor(new SynchronousBridgingInterceptor());
- } else {
- chain.addInterceptor(new InvokerInterceptor());
- }
+ chain.addInterceptor(new InvokerInterceptor());
wire.addInvocationChain(operation, chain);
}
if (contract.getCallbackName() != null) {
@@ -132,28 +123,24 @@
Implementation<?> implementation = definition.getImplementation();
ComponentType<?, ?, ?> componentType = implementation.getComponentType();
for (ServiceDefinition service : componentType.getServices().values()) {
- InboundWire inboundWire = createWire(service);
- inboundWire.setContainer(component);
if (componentType instanceof CompositeComponentType<?, ?, ?>) {
// If this is the case, then it means that component has already been returned
// by CompositeBuilder and thus its children, in particular composite services,
// have been registered
CompositeComponent compositeComponent = (CompositeComponent) component;
- if (service instanceof BoundServiceDefinition) {
- BindingDefinition binding = ((BoundServiceDefinition) service).getBinding();
- if (binding instanceof SystemBindingDefinition) {
- continue;
- }
+ Service serviceChild;
+ if (component.isSystem()) {
+ // FIXME JFM test
+ serviceChild = (Service) compositeComponent.getSystemChild(service.getName());
+ } else {
+ serviceChild = (Service) compositeComponent.getChild(service.getName());
}
- Service serviceChild = (Service) compositeComponent.getChild(service.getName());
assert serviceChild != null;
- if (serviceChild instanceof CompositeService) {
- serviceChild.setInboundWire(inboundWire);
- // Notice that now the more immediate container of the wire is the composite service
- inboundWire.setContainer(serviceChild);
- }
+ } else {
+ InboundWire wire = createWire(service);
+ wire.setContainer(component);
+ component.addInboundWire(wire);
}
- component.addInboundWire(inboundWire);
}
for (ReferenceTarget referenceTarget : definition.getReferenceTargets().values()) {
@@ -212,32 +199,34 @@
reference.setOutboundWire(outboundWire);
}
- public void createWires(Service service, String targetName, ServiceContract<?> contract) {
+ public void createWires(ServiceBinding serviceBinding, String targetName, ServiceContract<?> contract) {
InboundWire inboundWire = new InboundWireImpl();
- // [rfeng] Check if the Reference has the binding contract
- ServiceContract<?> bindingContract = service.getBindingServiceContract();
+ // [rfeng] Check if the Reference has the serviceBinding contract
+ ServiceContract<?> bindingContract = serviceBinding.getBindingServiceContract();
if (bindingContract == null) {
bindingContract = contract;
}
inboundWire.setServiceContract(bindingContract);
- inboundWire.setContainer(service);
+ inboundWire.setContainer(serviceBinding);
for (Operation<?> operation : bindingContract.getOperations().values()) {
InboundInvocationChain inboundChain = createInboundChain(operation);
+ // TODO JFM remove need for this
+ inboundChain.addInterceptor(new SynchronousBridgingInterceptor());
inboundWire.addInvocationChain(operation, inboundChain);
}
OutboundWire outboundWire = new OutboundWireImpl();
outboundWire.setServiceContract(contract);
outboundWire.setTargetName(new QualifiedName(targetName));
- outboundWire.setContainer(service);
+ outboundWire.setContainer(serviceBinding);
for (Operation<?> operation : contract.getOperations().values()) {
OutboundInvocationChain outboundChain = createOutboundChain(operation);
outboundWire.addInvocationChain(operation, outboundChain);
}
- // Add target callback chain to outbound wire, applicable to both bound and bindless services
+ // Add target callback chain to outbound wire
if (contract.getCallbackName() != null) {
outboundWire.setCallbackInterface(contract.getCallbackClass());
for (Operation<?> operation : contract.getCallbackOperations().values()) {
@@ -248,13 +237,8 @@
outboundWire.addTargetCallbackInvocationChain(operation, callbackTargetChain);
}
}
-
- // Not clear in any case why this is done here and at the parent composite level as well
- // But for a composite service, make sure that the inbound wire comes from the parent
- if (!(service instanceof CompositeService)) {
- service.setInboundWire(inboundWire);
- }
- service.setOutboundWire(outboundWire);
+ serviceBinding.setInboundWire(inboundWire);
+ serviceBinding.setOutboundWire(outboundWire);
}
/**
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKCallbackInvocationHandler.java Sat Dec 30 13:42:22 2006
@@ -132,6 +132,6 @@
if (owner == null) {
throw new ReactivationException("Current atomic component not set on work context");
}
- wire = owner.getInboundWires().get(serviceName);
+ wire = owner.getInboundWire(serviceName);
}
}
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandler.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/wire/jdk/JDKInboundInvocationHandler.java Sat Dec 30 13:42:22 2006
@@ -143,7 +143,7 @@
if (owner == null) {
throw new ReactivationException("Current atomic component not set on work context");
}
- InboundWire wire = owner.getInboundWires().get(serviceName);
+ InboundWire wire = owner.getInboundWire(serviceName);
init(interfaze, wire);
}
@@ -161,7 +161,6 @@
* the chain master
*/
private class ChainHolder {
-
InboundInvocationChain chain;
TargetInvoker cachedInvoker;
Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/AbstractCompositeTargetInvokerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/AbstractCompositeTargetInvokerTestCase.java?view=auto&rev=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/AbstractCompositeTargetInvokerTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/AbstractCompositeTargetInvokerTestCase.java Sat Dec 30 13:42:22 2006
@@ -0,0 +1,77 @@
+/*
+ * 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.core.binding.local;
+
+import org.apache.tuscany.spi.wire.Interceptor;
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.MessageImpl;
+import org.apache.tuscany.spi.wire.OutboundInvocationChain;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+
+import junit.framework.TestCase;
+import org.easymock.EasyMock;
+import org.easymock.IAnswer;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class AbstractCompositeTargetInvokerTestCase extends TestCase {
+
+ public void testInvokerWithInterceptor() throws Throwable {
+ AbstractCompositeTargetInvoker invoker = new MockTargetInvoker();
+ Interceptor interceptor = EasyMock.createMock(Interceptor.class);
+ interceptor.invoke(EasyMock.isA(Message.class));
+ EasyMock.expectLastCall().andStubAnswer(new IAnswer<Object>() {
+ public Object answer() throws Throwable {
+ Message msg = (Message) EasyMock.getCurrentArguments()[0];
+ if (msg.getTargetInvoker() == null) {
+ fail("Target invoker not set");
+ }
+ return null;
+ }
+ });
+ EasyMock.replay(interceptor);
+ OutboundInvocationChain chain = EasyMock.createMock(OutboundInvocationChain.class);
+ EasyMock.expect(chain.getHeadInterceptor()).andReturn(interceptor);
+ EasyMock.replay(chain);
+ invoker.invoke(chain, EasyMock.createNiceMock(TargetInvoker.class), new MessageImpl());
+ EasyMock.verify(chain);
+ EasyMock.verify(interceptor);
+ }
+
+ public void testShortCircuitInvoke() throws Throwable {
+ AbstractCompositeTargetInvoker invoker = new MockTargetInvoker();
+ TargetInvoker targetInvoker = EasyMock.createMock(TargetInvoker.class);
+ EasyMock.expect(targetInvoker.invoke(EasyMock.isA(Message.class))).andReturn(new MessageImpl());
+ EasyMock.replay(targetInvoker);
+ OutboundInvocationChain chain = EasyMock.createMock(OutboundInvocationChain.class);
+ EasyMock.expect(chain.getHeadInterceptor()).andReturn(null);
+ EasyMock.replay(chain);
+ invoker.invoke(chain, targetInvoker, new MessageImpl());
+ EasyMock.verify(chain);
+ EasyMock.verify(targetInvoker);
+ }
+
+ private class MockTargetInvoker extends AbstractCompositeTargetInvoker {
+ public Message invoke(Message msg) throws InvocationRuntimeException {
+ return null;
+ }
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/AbstractCompositeTargetInvokerTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/AbstractCompositeTargetInvokerTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java?view=auto&rev=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java Sat Dec 30 13:42:22 2006
@@ -0,0 +1,38 @@
+/*
+ * 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.core.binding.local;
+
+import org.apache.tuscany.spi.component.ServiceBinding;
+import org.apache.tuscany.spi.model.BoundServiceDefinition;
+
+import junit.framework.TestCase;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class LocalBindingBuilderTestCase extends TestCase {
+
+ public void testBuild() throws Exception {
+ LocalBindingBuilder builder = new LocalBindingBuilder();
+ BoundServiceDefinition def = new BoundServiceDefinition();
+ def.setName("foo");
+ ServiceBinding binding = builder.build(null, def, null, null);
+ assertEquals(LocalServiceBinding.class, binding.getClass());
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingBuilderTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingLoaderTestCase.java?view=auto&rev=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingLoaderTestCase.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingLoaderTestCase.java Sat Dec 30 13:42:22 2006
@@ -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 org.apache.tuscany.core.binding.local;
+
+import org.apache.tuscany.spi.model.ModelObject;
+
+import junit.framework.TestCase;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class LocalBindingLoaderTestCase extends TestCase {
+
+ public void testLoader() throws Exception {
+ LocalBindingLoader loader = new LocalBindingLoader();
+ ModelObject o = loader.load(null, null, null, null);
+ assertEquals(LocalBindingDefinition.class, o.getClass());
+ }
+}
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingLoaderTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/binding/local/LocalBindingLoaderTestCase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java?view=diff&rev=491325&r1=491324&r2=491325
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/builder/BuilderRegistryTestCase.java Sat Dec 30 13:42:22 2006
@@ -18,14 +18,26 @@
*/
package org.apache.tuscany.core.builder;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.tuscany.spi.builder.BindingBuilder;
import org.apache.tuscany.spi.builder.BuilderConfigException;
import org.apache.tuscany.spi.builder.ComponentBuilder;
import org.apache.tuscany.spi.component.Component;
import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.component.Service;
+import org.apache.tuscany.spi.component.ServiceBinding;
import org.apache.tuscany.spi.deployer.DeploymentContext;
+import org.apache.tuscany.spi.model.BindingDefinition;
+import org.apache.tuscany.spi.model.BoundServiceDefinition;
import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.ComponentType;
import org.apache.tuscany.spi.model.CompositeComponentType;
import org.apache.tuscany.spi.model.CompositeImplementation;
+import org.apache.tuscany.spi.model.Implementation;
+import org.apache.tuscany.spi.model.ServiceContract;
import org.apache.tuscany.spi.wire.WireService;
import junit.framework.TestCase;
@@ -38,38 +50,93 @@
public class BuilderRegistryTestCase extends TestCase {
private DeploymentContext deploymentContext;
private BuilderRegistryImpl registry;
+ private CompositeComponent parent;
- public void testRegistrationWithoutGenerics() throws Exception {
- RawBuilder builder = new RawBuilder();
+ public void testRegistration() throws Exception {
+ MockBuilder builder = new MockBuilder();
registry.register(CompositeImplementation.class, builder);
CompositeImplementation implementation = new CompositeImplementation();
ComponentDefinition<CompositeImplementation> componentDefinition =
new ComponentDefinition<CompositeImplementation>(implementation);
componentDefinition.getImplementation().setComponentType(new CompositeComponentType());
- registry.build(null, componentDefinition, deploymentContext);
+ registry.build(parent, componentDefinition, deploymentContext);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public void testBindingBuilderDispatch() throws Exception {
+ WireService wireService = EasyMock.createMock(WireService.class);
+ wireService.createWires(EasyMock.isA(ServiceBinding.class),
+ EasyMock.isA(String.class),
+ (ServiceContract) EasyMock.isNull());
+ EasyMock.expectLastCall().times(2);
+ EasyMock.replay(wireService);
+ registry.setWireService(wireService);
+ ServiceBinding binding = EasyMock.createNiceMock(ServiceBinding.class);
+ EasyMock.replay(binding);
+ BindingBuilder<MockBindingDefinition> builder = EasyMock.createMock(BindingBuilder.class);
+ EasyMock.expect(builder.build(EasyMock.isA(CompositeComponent.class),
+ EasyMock.isA(BoundServiceDefinition.class),
+ EasyMock.isA(MockBindingDefinition.class),
+ EasyMock.isA(DeploymentContext.class))).andReturn(binding).times(2);
+ EasyMock.replay(builder);
+ registry.register(MockBindingDefinition.class, builder);
+ List<BindingDefinition> bindingDefs = new ArrayList<BindingDefinition>();
+ bindingDefs.add(new MockBindingDefinition());
+ bindingDefs.add(new MockBindingDefinition());
+ BoundServiceDefinition definition = new BoundServiceDefinition("foo", null, bindingDefs, false, new URI("foo"));
+ Service service = registry.build(parent, definition, deploymentContext);
+ assertEquals(2, service.getServiceBindings().size());
+ EasyMock.verify(wireService);
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public void testComponentImplementationDispatch() throws Exception {
+ WireService wireService = EasyMock.createMock(WireService.class);
+ wireService.createWires(EasyMock.isA(Component.class),
+ EasyMock.isA(ComponentDefinition.class));
+ EasyMock.replay(wireService);
+ registry.setWireService(wireService);
+
+ Component component = EasyMock.createNiceMock(Component.class);
+ EasyMock.replay(component);
+ ComponentBuilder<FooImplementation> builder = EasyMock.createMock(ComponentBuilder.class);
+ EasyMock.expect(builder.build(EasyMock.isA(CompositeComponent.class),
+ EasyMock.isA(ComponentDefinition.class),
+ EasyMock.isA(DeploymentContext.class))).andReturn(component);
+ EasyMock.replay(builder);
+ registry.register(FooImplementation.class, builder);
+
+ FooImplementation impl = new FooImplementation();
+ impl.setComponentType(new ComponentType());
+ ComponentDefinition<FooImplementation> definition = new ComponentDefinition<FooImplementation>("foo", impl);
+ Component ret = registry.build(parent, definition, deploymentContext);
+ assertNotNull(ret);
+ EasyMock.verify(wireService);
}
protected void setUp() throws Exception {
super.setUp();
registry = new BuilderRegistryImpl();
- WireService service = EasyMock.createNiceMock(WireService.class);
- registry.setWireService(service);
deploymentContext = new RootDeploymentContext(null, null, null, null);
+ parent = EasyMock.createNiceMock(CompositeComponent.class);
+ EasyMock.replay(parent);
}
- public static class GenerifiedBuilder implements ComponentBuilder<CompositeImplementation> {
- public Component build(CompositeComponent parent,
- ComponentDefinition<CompositeImplementation> componentDefinition,
- DeploymentContext deploymentContext) {
- return null;
- }
- }
-
- public static class RawBuilder implements ComponentBuilder<CompositeImplementation> {
+ private class MockBuilder implements ComponentBuilder<CompositeImplementation> {
public Component build(CompositeComponent parent,
ComponentDefinition componentDefinition,
DeploymentContext deploymentContext) throws BuilderConfigException {
return null;
}
}
+
+ private class MockBindingDefinition extends BindingDefinition {
+
+ }
+
+ private class FooImplementation extends Implementation<ComponentType> {
+
+ }
+
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org