Author: rfeng
Date: Fri Apr 13 10:49:14 2007
New Revision: 528566
URL: http://svn.apache.org/viewvc?view=rev&rev=528566
Log:
Add the logic to deal with promoted component reference and bring up the
echo-binding sample
Modified:
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/core/deployer/DeployerImpl.java
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoAtomicComponent.java
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoConfiguration.java
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/Operation.java
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/impl/OperationImpl.java
incubator/tuscany/java/sca/samples/echo-binding/src/main/java/org/apache/tuscany/binding/echo/EchoBuilder.java
incubator/tuscany/java/sca/samples/echo-binding/src/main/java/org/apache/tuscany/binding/echo/EchoReference.java
incubator/tuscany/java/sca/samples/echo-binding/src/test/java/org/apache/tuscany/binding/echo/EchoBindingTestCase.java
incubator/tuscany/java/sca/samples/echo-binding/src/test/resources/EchoBinding.composite
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=528566&r1=528565&r2=528566
==============================================================================
---
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
Fri Apr 13 10:49:14 2007
@@ -191,44 +191,74 @@
for (ComponentReference ref : definition.getReferences()) {
List<Wire> wires = new ArrayList<Wire>();
String refName = ref.getName();
- org.apache.tuscany.assembly.Reference refDefinition =
getReference(definition.getImplementation(), refName);
+ org.apache.tuscany.assembly.Reference refDefinition =
ref.getReference();
assert refDefinition != null;
- List<ComponentService> services = ref.getTargets();
- for (ComponentService service : services) {
- org.apache.tuscany.assembly.Component targetCompoent =
service.getBinding(SCABinding.class)
- .getComponent();
- 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)) {
- // a non-required reference, just skip
- continue;
+ List<CompositeReference> promoted = ref.promotedAs();
+ if (!promoted.isEmpty()) {
+ // TODO: Assume a component reference can only be
promoted by at
+ // most one composite reference
+ CompositeReference compositeReference = promoted.get(0);
+ Reference target = (Reference)getSCAObject(models,
compositeReference);
+ // FIXME: Assume we only have one binding
+ ReferenceBinding binding =
target.getReferenceBindings().get(0);
+ URI targetUri = binding.getTargetUri();
+ InterfaceContract contract =
binding.getBindingInterfaceContract();
+ if (contract == null) {
+ contract = refDefinition.getInterfaceContract();
}
- if (target == null) {
- throw new ComponentNotFoundException("Target not
found", targetUri);
- }
- URI sourceURI = URI.create(source.getUri() + "#" +
refName);
+ QName type = binding.getBindingType();
+ URI sourceUri = URI.create(source.getUri() + "#" +
refName);
Wire wire;
try {
- wire = createWire(sourceURI, targetUri,
refDefinition.getInterfaceContract(), service.getService()
- .getInterfaceContract(), Wire.LOCAL_BINDING);
+ wire = createWire(sourceUri, targetUri,
refDefinition.getInterfaceContract(), contract, type);
} catch (IncompatibleInterfaceContractException e1) {
- throw new IncompatibleInterfacesException(sourceURI,
targetUri, e1);
+ throw new IllegalStateException(e1);
}
+ binding.setWire(wire);
try {
- attachInvokers(refName, wire, source, target);
+ attachInvokers(targetUri.getFragment(), wire,
binding, binding);
} catch (TargetInvokerCreationException e) {
- throw new WireCreationException("Error creating
invoker", sourceURI, targetUri, e);
+ throw new WireCreationException("Error creating
invoker", sourceUri, targetUri, e);
}
+ wires.add(wire);
+ } else {
+ List<ComponentService> services = ref.getTargets();
+ for (ComponentService service : services) {
+ org.apache.tuscany.assembly.Component targetCompoent
= service.getBinding(SCABinding.class)
+ .getComponent();
+ 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)) {
+ // a non-required reference, just skip
+ continue;
+ }
+ if (target == null) {
+ throw new ComponentNotFoundException("Target not
found", targetUri);
+ }
+ URI sourceURI = URI.create(source.getUri() + "#" +
refName);
+ Wire wire;
+ try {
+ wire = createWire(sourceURI, targetUri,
refDefinition.getInterfaceContract(), service
+ .getService().getInterfaceContract(),
Wire.LOCAL_BINDING);
+ } catch (IncompatibleInterfaceContractException e1) {
+ throw new
IncompatibleInterfacesException(sourceURI, targetUri, e1);
+ }
+ try {
+ attachInvokers(refName, wire, source, target);
+ } 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()) {
- target.attachCallbackWire(wire);
+ optimize(source, target, wire);
+ wires.add(wire);
+ if (!wire.getCallbackInvocationChains().isEmpty()) {
+ target.attachCallbackWire(wire);
+ }
}
}
if (wires.size() > 1) {
Modified:
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoAtomicComponent.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoAtomicComponent.java?view=diff&rev=528566&r1=528565&r2=528566
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoAtomicComponent.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoAtomicComponent.java
Fri Apr 13 10:49:14 2007
@@ -198,14 +198,18 @@
}
JavaElement element = entry.getValue();
ObjectFactory<?> factory = new
CallbackWireObjectFactory(element.getType(), proxyService, wires);
- configuration.getInjectionSites().add(element);
+ if (!(element.getAnchor() instanceof Constructor)) {
+ configuration.getInjectionSites().add(element);
+ }
configuration.setObjectFactory(element, factory);
}
}
for (Reference ref :
configuration.getDefinition().getReferences()) {
JavaElement element =
configuration.getDefinition().getReferenceMembers().get(ref.getName());
if (element != null) {
- configuration.getInjectionSites().add(element);
+ if (!(element.getAnchor() instanceof Constructor)) {
+ configuration.getInjectionSites().add(element);
+ }
List<Wire> wireList = wires.get(ref.getName());
if (ref.getMultiplicity() == Multiplicity.ONE_N ||
ref.getMultiplicity() == Multiplicity.ZERO_N) {
List<ObjectFactory<?>> factories = new
ArrayList<ObjectFactory<?>>();
@@ -380,7 +384,6 @@
return null;
}
-
protected abstract <B> ObjectFactory<B> createWireFactory(Class<B>
interfaze, Wire wire);
/**
Modified:
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoConfiguration.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoConfiguration.java?view=diff&rev=528566&r1=528565&r2=528566
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoConfiguration.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/implementation/java/context/PojoConfiguration.java
Fri Apr 13 10:49:14 2007
@@ -21,6 +21,7 @@
import java.lang.annotation.ElementType;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
+import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.net.URI;
import java.util.ArrayList;
@@ -161,10 +162,13 @@
Object obj = factories.get(element);
if (obj instanceof ObjectFactory) {
ObjectFactory<?> factory = (ObjectFactory<?>)obj;
+ Member member = (Member)element.getAnchor();
if (element.getElementType() == ElementType.FIELD) {
- injectors[i++] = new
FieldInjector<T>((Field)element.getAnchor(), factory);
- } else if (element.getElementType() ==
ElementType.PARAMETER && element.getAnchor() instanceof Method) {
- injectors[i++] = new
MethodInjector<T>((Method)element.getAnchor(), factory);
+ injectors[i++] = new FieldInjector<T>((Field)member,
factory);
+ } else if (element.getElementType() ==
ElementType.PARAMETER && member instanceof Method) {
+ injectors[i++] = new
MethodInjector<T>((Method)member, factory);
+ } else if (member instanceof Constructor) {
+ // Ignore
} else {
throw new AssertionError(String.valueOf(element));
}
Modified:
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/Operation.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/Operation.java?view=diff&rev=528566&r1=528565&r2=528566
==============================================================================
---
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/Operation.java
(original)
+++
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/Operation.java
Fri Apr 13 10:49:14 2007
@@ -149,4 +149,16 @@
* @param wrapperStyle the wrapperStyle to set
*/
void setWrapperStyle(boolean wrapperStyle);
+
+ /**
+ * Get the databinding for the operation
+ * @return
+ */
+ String getDataBinding();
+
+ /**
+ * Set the databinding for the operation
+ * @param dataBinding
+ */
+ void setDataBinding(String dataBinding);
}
Modified:
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/impl/OperationImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/impl/OperationImpl.java?view=diff&rev=528566&r1=528565&r2=528566
==============================================================================
---
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/impl/OperationImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/impl/OperationImpl.java
Fri Apr 13 10:49:14 2007
@@ -43,6 +43,7 @@
private boolean nonBlocking;
private boolean wrapperStyle;
private WrapperInfo wrapper;
+ private String dataBinding;
/**
* @param name
@@ -270,6 +271,14 @@
*/
public void setWrapperStyle(boolean wrapperStyle) {
this.wrapperStyle = wrapperStyle;
+ }
+
+ public String getDataBinding() {
+ return dataBinding;
+ }
+
+ public void setDataBinding(String dataBinding) {
+ this.dataBinding = dataBinding;
}
}
Modified:
incubator/tuscany/java/sca/samples/echo-binding/src/main/java/org/apache/tuscany/binding/echo/EchoBuilder.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/echo-binding/src/main/java/org/apache/tuscany/binding/echo/EchoBuilder.java?view=diff&rev=528566&r1=528565&r2=528566
==============================================================================
---
incubator/tuscany/java/sca/samples/echo-binding/src/main/java/org/apache/tuscany/binding/echo/EchoBuilder.java
(original)
+++
incubator/tuscany/java/sca/samples/echo-binding/src/main/java/org/apache/tuscany/binding/echo/EchoBuilder.java
Fri Apr 13 10:49:14 2007
@@ -36,15 +36,15 @@
public ServiceBinding build(CompositeService serviceDefinition,
EchoBinding bindingDefinition,
DeploymentContext context) throws
BuilderException {
- return new EchoService(URI.create("#" +
serviceDefinition.getName()));
+ return new EchoService(URI.create(context.getComponentId() + "#"
+ serviceDefinition.getName()));
}
@Override
public ReferenceBinding build(CompositeReference referenceDefinition,
EchoBinding bindingDefinition,
DeploymentContext context) throws
BuilderException {
- URI targetURI = bindingDefinition.getURI() != null?
URI.create(bindingDefinition.getURI()) : null;
- return new EchoReference(URI.create("#" +
referenceDefinition.getName()), targetURI);
+ URI targetURI = bindingDefinition.getURI() != null ?
URI.create(bindingDefinition.getURI()) : null;
+ return new EchoReference(URI.create(context.getComponentId() +
"#" + referenceDefinition.getName()), targetURI);
}
@Override
Modified:
incubator/tuscany/java/sca/samples/echo-binding/src/main/java/org/apache/tuscany/binding/echo/EchoReference.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/echo-binding/src/main/java/org/apache/tuscany/binding/echo/EchoReference.java?view=diff&rev=528566&r1=528565&r2=528566
==============================================================================
---
incubator/tuscany/java/sca/samples/echo-binding/src/main/java/org/apache/tuscany/binding/echo/EchoReference.java
(original)
+++
incubator/tuscany/java/sca/samples/echo-binding/src/main/java/org/apache/tuscany/binding/echo/EchoReference.java
Fri Apr 13 10:49:14 2007
@@ -22,8 +22,6 @@
import javax.xml.namespace.QName;
-import org.apache.tuscany.core.binding.local.LocalCallbackTargetInvoker;
-import org.apache.tuscany.core.binding.local.LocalTargetInvoker;
import org.apache.tuscany.interfacedef.Operation;
import org.apache.tuscany.spi.component.TargetInvokerCreationException;
import org.apache.tuscany.spi.extension.ReferenceBindingExtension;
Modified:
incubator/tuscany/java/sca/samples/echo-binding/src/test/java/org/apache/tuscany/binding/echo/EchoBindingTestCase.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/echo-binding/src/test/java/org/apache/tuscany/binding/echo/EchoBindingTestCase.java?view=diff&rev=528566&r1=528565&r2=528566
==============================================================================
---
incubator/tuscany/java/sca/samples/echo-binding/src/test/java/org/apache/tuscany/binding/echo/EchoBindingTestCase.java
(original)
+++
incubator/tuscany/java/sca/samples/echo-binding/src/test/java/org/apache/tuscany/binding/echo/EchoBindingTestCase.java
Fri Apr 13 10:49:14 2007
@@ -33,7 +33,7 @@
protected void setUp() throws Exception {
SCARuntime.start("EchoBinding.composite");
- ComponentContext context =
SCARuntime.getComponentContext("ClientComponent");
+ ComponentContext context =
SCARuntime.getComponentContext("Client");
ServiceReference<Client> service =
context.createSelfReference(Client.class);
client = service.getService();
}
Modified:
incubator/tuscany/java/sca/samples/echo-binding/src/test/resources/EchoBinding.composite
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/samples/echo-binding/src/test/resources/EchoBinding.composite?view=diff&rev=528566&r1=528565&r2=528566
==============================================================================
---
incubator/tuscany/java/sca/samples/echo-binding/src/test/resources/EchoBinding.composite
(original)
+++
incubator/tuscany/java/sca/samples/echo-binding/src/test/resources/EchoBinding.composite
Fri Apr 13 10:49:14 2007
@@ -24,7 +24,7 @@
<service name="ClientService" promote="Client">
<interface.java
interface="org.apache.tuscany.binding.echo.Client"/>
- <binding.echo/>
+ <binding.echo uri="echo://tmp" />
</service>
<component name="Client">
@@ -33,7 +33,7 @@
<reference name="EchoReference" promote="Client/echoReference">
<interface.java interface="org.apache.tuscany.binding.echo.Echo"/>
- <binding.echo/>
+ <binding.echo uri="echo://tmp" />
</reference>
</composite>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]