You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/04/13 07:35:15 UTC
svn commit: r528361 - in /incubator/tuscany/java/sca/modules:
core-spi/src/main/java/org/apache/tuscany/spi/component/
core-spi/src/main/java/org/apache/tuscany/spi/extension/
core/src/main/java/org/apache/tuscany/core/deployer/
Author: rfeng
Date: Thu Apr 12 22:35:14 2007
New Revision: 528361
URL: http://svn.apache.org/viewvc?view=rev&rev=528361
Log:
Add connect for composite service and composite reference
Modified:
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ReferenceBinding.java
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ServiceBinding.java
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/extension/ReferenceBindingExtension.java
incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/extension/ServiceBindingExtension.java
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ReferenceBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ReferenceBinding.java?view=diff&rev=528361&r1=528360&r2=528361
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ReferenceBinding.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ReferenceBinding.java Thu Apr 12 22:35:14 2007
@@ -22,7 +22,7 @@
import javax.xml.namespace.QName;
-import org.apache.tuscany.assembly.Contract;
+import org.apache.tuscany.interfacedef.InterfaceContract;
import org.apache.tuscany.spi.wire.Wire;
/**
@@ -55,7 +55,7 @@
*
* @return the service contract for the binding
*/
- Contract getBindingServiceContract();
+ InterfaceContract getBindingInterfaceContract();
/**
* Returns the target URI for the binding
Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ServiceBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ServiceBinding.java?view=diff&rev=528361&r1=528360&r2=528361
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ServiceBinding.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/component/ServiceBinding.java Thu Apr 12 22:35:14 2007
@@ -20,7 +20,7 @@
import javax.xml.namespace.QName;
-import org.apache.tuscany.assembly.Contract;
+import org.apache.tuscany.interfacedef.InterfaceContract;
import org.apache.tuscany.spi.wire.Wire;
/**
@@ -43,7 +43,7 @@
*
* @return the ServiceContract for the binding
*/
- Contract getBindingServiceContract();
+ InterfaceContract getBindingInterfaceContract();
Wire getWire();
Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/extension/ReferenceBindingExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/extension/ReferenceBindingExtension.java?view=diff&rev=528361&r1=528360&r2=528361
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/extension/ReferenceBindingExtension.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/extension/ReferenceBindingExtension.java Thu Apr 12 22:35:14 2007
@@ -20,7 +20,7 @@
import java.net.URI;
-import org.apache.tuscany.assembly.Contract;
+import org.apache.tuscany.interfacedef.InterfaceContract;
import org.apache.tuscany.spi.component.AbstractSCAObject;
import org.apache.tuscany.spi.component.ReferenceBinding;
import org.apache.tuscany.spi.wire.Wire;
@@ -33,7 +33,7 @@
*/
public abstract class ReferenceBindingExtension extends AbstractSCAObject implements ReferenceBinding {
protected Wire wire;
- protected Contract bindingServiceContract;
+ protected InterfaceContract bindingServiceContract;
protected URI targetUri;
public ReferenceBindingExtension(URI name, URI targetUri) {
@@ -41,7 +41,7 @@
this.targetUri = targetUri;
}
- public Contract getBindingServiceContract() {
+ public InterfaceContract getBindingInterfaceContract() {
return bindingServiceContract;
}
Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/extension/ServiceBindingExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/extension/ServiceBindingExtension.java?view=diff&rev=528361&r1=528360&r2=528361
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/extension/ServiceBindingExtension.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/spi/extension/ServiceBindingExtension.java Thu Apr 12 22:35:14 2007
@@ -21,6 +21,7 @@
import java.net.URI;
import org.apache.tuscany.assembly.Contract;
+import org.apache.tuscany.interfacedef.InterfaceContract;
import org.apache.tuscany.interfacedef.Operation;
import org.apache.tuscany.spi.CoreRuntimeException;
import org.apache.tuscany.spi.component.AbstractSCAObject;
@@ -36,7 +37,7 @@
* @Deprecated
*/
public abstract class ServiceBindingExtension extends AbstractSCAObject implements ServiceBinding {
- protected Contract bindingServiceContract;
+ protected InterfaceContract bindingServiceContract;
protected Wire wire;
public ServiceBindingExtension(URI name) throws CoreRuntimeException {
@@ -48,7 +49,7 @@
throw new UnsupportedOperationException();
}
- public Contract getBindingServiceContract() {
+ public InterfaceContract getBindingInterfaceContract() {
return bindingServiceContract;
}
Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java?view=diff&rev=528361&r1=528360&r2=528361
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java Thu Apr 12 22:35:14 2007
@@ -30,6 +30,8 @@
import org.apache.tuscany.assembly.ComponentReference;
import org.apache.tuscany.assembly.ComponentService;
import org.apache.tuscany.assembly.Composite;
+import org.apache.tuscany.assembly.CompositeReference;
+import org.apache.tuscany.assembly.CompositeService;
import org.apache.tuscany.assembly.Implementation;
import org.apache.tuscany.assembly.Multiplicity;
import org.apache.tuscany.assembly.SCABinding;
@@ -57,17 +59,22 @@
import org.apache.tuscany.spi.component.Component;
import org.apache.tuscany.spi.component.ComponentManager;
import org.apache.tuscany.spi.component.Invocable;
+import org.apache.tuscany.spi.component.Reference;
+import org.apache.tuscany.spi.component.ReferenceBinding;
import org.apache.tuscany.spi.component.RegistrationException;
import org.apache.tuscany.spi.component.SCAObject;
import org.apache.tuscany.spi.component.ScopeContainer;
import org.apache.tuscany.spi.component.ScopeRegistry;
+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.deployer.Deployer;
import org.apache.tuscany.spi.deployer.DeploymentContext;
import org.apache.tuscany.spi.resolver.ResolutionException;
+import org.apache.tuscany.spi.util.UriHelper;
import org.apache.tuscany.spi.wire.InvocationChain;
import org.apache.tuscany.spi.wire.Wire;
-import org.osoa.sca.annotations.Reference;
+import org.apache.tuscany.spi.wire.WirePostProcessorRegistry;
/**
* Default implementation of Deployer.
@@ -80,6 +87,7 @@
private ComponentManager componentManager;
private ScopeRegistry scopeRegistry;
private InterfaceContractMapper mapper = new DefaultInterfaceContractMapper();
+ private WirePostProcessorRegistry postProcessorRegistry;
public DeployerImpl(XMLInputFactory xmlFactory, Builder builder, ComponentManager componentManager) {
this.xmlFactory = xmlFactory;
@@ -91,17 +99,14 @@
xmlFactory = XMLInputFactory.newInstance("javax.xml.stream.XMLInputFactory", getClass().getClassLoader());
}
- @Reference
public void setBuilder(BuilderRegistry builder) {
this.builder = builder;
}
- @Reference
public void setComponentManager(ComponentManager componentManager) {
this.componentManager = componentManager;
}
- @Reference
public void setScopeRegistry(ScopeRegistry scopeRegistry) {
this.scopeRegistry = scopeRegistry;
}
@@ -121,17 +126,33 @@
// build runtime artifacts
build(componentDef, deploymentContext);
+ Map<SCAObject, Object> models = ((BuilderRegistryImpl)builder).getModels();
+ for (Map.Entry<SCAObject, Object> entry : models.entrySet()) {
+ Object model = entry.getValue();
+ if (model instanceof org.apache.tuscany.assembly.Component) {
+ connect(models, (Component)entry.getKey(), (org.apache.tuscany.assembly.Component)model);
+ } else if (model instanceof CompositeReference) {
+ // FIXME lresende: not sure why there is no
+ // "compositeReferences" here
+ try {
+ connect(models, (Reference)entry.getKey(), (CompositeReference)model);
+ } catch (IncompatibleInterfaceContractException e) {
+ throw new IllegalStateException(e);
+ }
+ } else if (model instanceof CompositeService) {
+ // FIXME lresende: not sure why there is no
+ // "compositeReferences" here
+ try {
+ connect(models, (Service)entry.getKey(), (CompositeService)model);
+ } catch (IncompatibleInterfaceContractException e) {
+ throw new IllegalStateException(e);
+ }
+ }
+ }
+
Collection<Component> components = deploymentContext.getComponents().values();
for (Component toRegister : components) {
try {
- Map<SCAObject, Object> models = ((BuilderRegistryImpl)builder).getModels();
- Object model = models.get(toRegister);
- if (model instanceof org.apache.tuscany.assembly.Component) {
- connect(models, (org.apache.tuscany.assembly.Component)model);
- }else if(model instanceof org.apache.tuscany.assembly.CompositeReference){
- //FIXME lresende: not sure why there is no "compositeReferences" here
- connect(models, (org.apache.tuscany.assembly.CompositeReference)model);
- }
componentManager.register(toRegister);
} catch (RegistrationException e) {
throw new BuilderInstantiationException("Error registering component", e);
@@ -162,11 +183,13 @@
return null;
}
- public void connect(Map<SCAObject, Object> models, org.apache.tuscany.assembly.Component definition)
- throws WiringException {
- Component source = getComponent(models, definition);
- if (source == null) {
- throw new ComponentNotFoundException("Source not found", URI.create(definition.getName()));
+ public void connect(Map<SCAObject, Object> models,
+ Component source,
+ org.apache.tuscany.assembly.Component definition) throws WiringException {
+
+ if (definition.getImplementation() instanceof Composite) {
+ // FIXME: Should we connect recusively?
+ return;
}
for (ComponentReference ref : definition.getReferences()) {
@@ -178,7 +201,7 @@
for (ComponentService service : services) {
org.apache.tuscany.assembly.Component targetCompoent = service.getBinding(SCABinding.class)
.getComponent();
- Component target = getComponent(models, targetCompoent);
+ Component target = (Component)getSCAObject(models, targetCompoent);
URI targetUri = URI.create(target.getUri() + "#" + service.getName());
if (target == null && (refDefinition.getMultiplicity() == Multiplicity.ZERO_ONE || refDefinition
.getMultiplicity() == Multiplicity.ZERO_N)) {
@@ -201,10 +224,11 @@
} catch (TargetInvokerCreationException e) {
throw new WireCreationException("Error creating invoker", sourceURI, targetUri, e);
}
- /*
- * if (postProcessorRegistry != null) {
- * postProcessorRegistry.process(wire); }
- */
+
+ if (postProcessorRegistry != null) {
+ postProcessorRegistry.process(wire);
+ }
+
optimize(source, target, wire);
wires.add(wire);
if (!wire.getCallbackInvocationChains().isEmpty()) {
@@ -222,31 +246,82 @@
}
}
- //FIXME lresende : make it work with references
- public void connect(Map<SCAObject, Object> models, org.apache.tuscany.assembly.CompositeReference reference) throws WiringException {
- Component source = getComponent(models, reference);
- if (source == null) {
- throw new ComponentNotFoundException("Source not found", URI.create(reference.getName()));
- }
-
- }
-
- private Component getComponent(Map<SCAObject, Object> models, org.apache.tuscany.assembly.Component definition) {
- Component source = null;
- for (Map.Entry<SCAObject, Object> e : models.entrySet()) {
- if (e.getValue() == definition) {
- source = (Component)e.getKey();
+ protected void connect(Map<SCAObject, Object> models, Service service, CompositeService definition)
+ throws WiringException, IncompatibleInterfaceContractException {
+ SCABinding scaBinding = definition.getPromotedService().getBinding(SCABinding.class);
+ org.apache.tuscany.assembly.Component targetComponent = scaBinding.getComponent();
+
+ Component target = null;
+ for (Map.Entry<SCAObject, Object> entry : models.entrySet()) {
+ if (entry.getValue() == targetComponent) {
+ target = (Component)entry.getKey();
+ break;
+ }
+ }
+ if (target == null) {
+ throw new ComponentNotFoundException("Target not found", URI.create(targetComponent.getName()));
+ }
+ URI sourceURI = service.getUri();
+ URI targetURI = URI.create(target.getUri() + "#" + definition.getPromotedService().getName());
+ // TODO if no binding, do local
+ for (ServiceBinding binding : service.getServiceBindings()) {
+ Wire wire = createWire(sourceURI, targetURI, definition.getInterfaceContract(), definition
+ .getPromotedService().getService().getInterfaceContract(), binding.getBindingType());
+ binding.setWire(wire);
+ if (postProcessorRegistry != null) {
+ postProcessorRegistry.process(wire);
+ }
+ try {
+ attachInvokers(definition.getPromotedService().getName(), wire, binding, target);
+ } catch (TargetInvokerCreationException e) {
+ throw new WireCreationException("Error creating invoker", sourceURI, targetURI, e);
+ }
+ }
+ }
+
+ protected void connect(Map<SCAObject, Object> models,
+ org.apache.tuscany.spi.component.Reference reference,
+ CompositeReference definition) throws WiringException,
+ IncompatibleInterfaceContractException {
+ URI sourceUri = reference.getUri();
+ for (ReferenceBinding binding : reference.getReferenceBindings()) {
+ // create wire
+ if (Wire.LOCAL_BINDING.equals(binding.getBindingType())) {
+ URI targetUri = binding.getTargetUri();
+ InterfaceContract contract = binding.getBindingInterfaceContract();
+ QName type = binding.getBindingType();
+ Wire wire = createWire(sourceUri, targetUri, definition.getInterfaceContract(), contract, type);
+ binding.setWire(wire);
+ // wire local bindings to their targets
+ Component target = componentManager.getComponent(UriHelper.getDefragmentedName(targetUri));
+ if (target == null) {
+ throw new ComponentNotFoundException("Target not found", sourceUri);
+ }
+ try {
+ attachInvokers(targetUri.getFragment(), wire, binding, target);
+ } catch (TargetInvokerCreationException e) {
+ throw new WireCreationException("Error creating invoker", sourceUri, targetUri, e);
+ }
+ } else {
+ InterfaceContract bindingContract = binding.getBindingInterfaceContract();
+ if (bindingContract == null) {
+ bindingContract = definition.getInterfaceContract();
+ }
+ Wire wire = createWire(sourceUri, null, definition.getInterfaceContract(), bindingContract, binding
+ .getBindingType());
+ if (postProcessorRegistry != null) {
+ postProcessorRegistry.process(wire);
+ }
+ binding.setWire(wire);
}
}
- return source;
}
- //FIXME: lresende make working with references
- private Component getComponent(Map<SCAObject, Object> models, org.apache.tuscany.assembly.Reference reference) {
- Component source = null;
+ private SCAObject getSCAObject(Map<SCAObject, Object> models, Object model) {
+ SCAObject source = null;
for (Map.Entry<SCAObject, Object> e : models.entrySet()) {
- if (e.getValue() == reference) {
- source = (Component)e.getKey();
+ if (e.getValue() == model) {
+ source = e.getKey();
}
}
return source;
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org