You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jb...@apache.org on 2007/01/05 04:06:17 UTC
svn commit: r492881 - in /incubator/tuscany/java/sca/kernel:
core/src/test/java/org/apache/tuscany/core/implementation/composite/AutowireTestCase.java
spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java
Author: jboynes
Date: Thu Jan 4 19:06:16 2007
New Revision: 492881
URL: http://svn.apache.org/viewvc?view=rev&rev=492881
Log:
allow autowire to resolve based on assignability rather than exact match
Modified:
incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/AutowireTestCase.java
incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java
Modified: incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/AutowireTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/AutowireTestCase.java?view=diff&rev=492881&r1=492880&r2=492881
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/AutowireTestCase.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/test/java/org/apache/tuscany/core/implementation/composite/AutowireTestCase.java Thu Jan 4 19:06:16 2007
@@ -59,6 +59,8 @@
parent.register(component);
InboundWire source = parent.resolveSystemAutowire(Source.class);
assertNotNull(source);
+ InboundWire sourceBase = parent.resolveSystemAutowire(SourceBase.class);
+ assertSame(source, sourceBase);
InboundWire source2 = parent.resolveSystemAutowire(Source2.class);
assertSame(source.getContainer(), source2.getContainer());
assertNull(parent.resolveSystemExternalAutowire(Source.class));
@@ -87,6 +89,8 @@
InboundWire source = parent.resolveAutowire(Source.class);
assertNotNull(source);
+ InboundWire sourceBase = parent.resolveAutowire(SourceBase.class);
+ assertSame(source, sourceBase);
InboundWire source2 = parent.resolveAutowire(Source2.class);
assertSame(source.getContainer(), source2.getContainer());
assertNull(parent.resolveExternalAutowire(Source.class));
@@ -118,6 +122,8 @@
InboundWire source = parent.resolveSystemExternalAutowire(Source.class);
assertSame(serviceBinding, source.getContainer());
+ InboundWire sourceBase = parent.resolveSystemExternalAutowire(SourceBase.class);
+ assertSame(source, sourceBase);
InboundWire source2 = parent.resolveSystemExternalAutowire(Source2.class);
assertNull(source2);
EasyMock.verify(serviceBinding);
@@ -148,6 +154,8 @@
InboundWire source = parent.resolveExternalAutowire(Source.class);
assertSame(serviceBinding, source.getContainer());
+ InboundWire sourceBase = parent.resolveExternalAutowire(SourceBase.class);
+ assertSame(source, sourceBase);
InboundWire source2 = parent.resolveExternalAutowire(Source2.class);
assertNull(source2);
EasyMock.verify(serviceBinding);
@@ -174,6 +182,8 @@
InboundWire source = parent.resolveSystemAutowire(Source.class);
assertNotNull(source);
+ InboundWire sourceBase = parent.resolveSystemAutowire(SourceBase.class);
+ assertSame(source, sourceBase);
EasyMock.verify(binding);
}
@@ -197,6 +207,8 @@
InboundWire source = parent.resolveAutowire(Source.class);
assertNotNull(source);
+ InboundWire sourceBase = parent.resolveAutowire(SourceBase.class);
+ assertSame(source, sourceBase);
EasyMock.verify(binding);
}
@@ -206,8 +218,10 @@
}
}
- public static interface Source {
+ public static interface SourceBase {
+ }
+ public static interface Source extends SourceBase {
}
public static interface Source2 {
Modified: incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java?view=diff&rev=492881&r1=492880&r2=492881
==============================================================================
--- incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java (original)
+++ incubator/tuscany/java/sca/kernel/spi/src/main/java/org/apache/tuscany/spi/extension/CompositeComponentExtension.java Thu Jan 4 19:06:16 2007
@@ -28,7 +28,6 @@
import org.w3c.dom.Document;
-import org.apache.tuscany.spi.CoreRuntimeException;
import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.builder.Connector;
import org.apache.tuscany.spi.builder.WiringException;
@@ -277,65 +276,63 @@
}
public InboundWire resolveAutowire(Class<?> instanceInterface) throws TargetResolutionException {
- InboundWire wire = autowireInternal.get(instanceInterface);
- if (wire != null) {
- SCAObject parent = wire.getContainer();
-
- if (parent instanceof AtomicComponent || parent instanceof ReferenceBinding
- || parent instanceof ServiceBinding) {
- return wire;
- } else {
- throw new IllegalTargetException("Autowire target must be a system type", parent.getName());
- }
- } else {
- // resolve to parent
- if (getParent() == null) {
- return null;
+ // FIXME JNB make this faster and thread safe
+ for (Map.Entry<Class, InboundWire> service : autowireInternal.entrySet()) {
+ if (instanceInterface.isAssignableFrom(service.getKey())) {
+ InboundWire wire = service.getValue();
+ SCAObject parent = wire.getContainer();
+
+ if (parent instanceof AtomicComponent
+ || parent instanceof ReferenceBinding
+ || parent instanceof ServiceBinding) {
+ return wire;
+ } else {
+ throw new IllegalTargetException("Autowire target must be a system type", parent.getName());
+ }
}
+ }
+ if (getParent() != null) {
return getParent().resolveAutowire(instanceInterface);
}
+ return null;
}
public InboundWire resolveSystemAutowire(Class<?> instanceInterface) throws TargetResolutionException {
- InboundWire wire = systemAutowireInternal.get(instanceInterface);
- if (wire != null) {
- return wire;
- } else {
- // resolve to parent
- if (getParent() != null) {
- return getParent().resolveSystemAutowire(instanceInterface);
- } else {
- return null;
- }
+ // FIXME JNB make this faster and thread safe
+ for (Map.Entry<Class, InboundWire> service : systemAutowireInternal.entrySet()) {
+ if (instanceInterface.isAssignableFrom(service.getKey())) {
+ return service.getValue(); }
+ }
+ if (getParent() != null) {
+ return getParent().resolveSystemAutowire(instanceInterface);
}
+ return null;
}
public InboundWire resolveExternalAutowire(Class<?> instanceInterface) throws TargetResolutionException {
- InboundWire wire = autowireExternal.get(instanceInterface);
- if (wire != null) {
- try {
- return wire;
- } catch (CoreRuntimeException e) {
- e.addContextName(getName());
- throw e;
+ // FIXME JNB make this faster and thread safe
+ for (Map.Entry<Class, InboundWire> service : autowireExternal.entrySet()) {
+ if (instanceInterface.isAssignableFrom(service.getKey())) {
+ return service.getValue();
}
- } else {
- return null;
}
+ if (getParent() != null) {
+ return getParent().resolveAutowire(instanceInterface);
+ }
+ return null;
}
public InboundWire resolveSystemExternalAutowire(Class<?> instanceInterface) throws TargetResolutionException {
- InboundWire wire = systemAutowireExternal.get(instanceInterface);
- if (wire != null) {
- try {
- return wire;
- } catch (CoreRuntimeException e) {
- e.addContextName(getName());
- throw e;
+ // FIXME JNB make this faster and thread safe
+ for (Map.Entry<Class, InboundWire> service : systemAutowireExternal.entrySet()) {
+ if (instanceInterface.isAssignableFrom(service.getKey())) {
+ return service.getValue();
}
- } else {
- return null;
}
+ if (getParent() != null) {
+ return getParent().resolveAutowire(instanceInterface);
+ }
+ return null;
}
public void prepare() throws PrepareException {
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org