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/08/29 07:03:22 UTC

svn commit: r437966 - in /incubator/tuscany/java/sca: containers/container.spring/ containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/ containers/container.spring/src/main/java/org/springframework/sca/ containers/contain...

Author: jmarino
Date: Mon Aug 28 22:03:21 2006
New Revision: 437966

URL: http://svn.apache.org/viewvc?rev=437966&view=rev
Log:
get references working with Spring; upgrade Spring to rc3; add reference capabilities to the test project

Added:
    incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingReference.java   (with props)
    incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestInvoker.java   (with props)
Modified:
    incubator/tuscany/java/sca/containers/container.spring/pom.xml
    incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeBuilder.java
    incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponent.java
    incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringImplementationLoader.java
    incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/springframework/sca/ScaPostProcessor.java
    incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/ReferenceInvocationTestCase.java
    incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/ServiceInvocationTestCase.java
    incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/integration/BootstrapTestCase.java
    incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/mock/TestBeanImpl.java
    incubator/tuscany/java/sca/containers/container.spring/src/test/resources/META-INF/sca/application-context.xml
    incubator/tuscany/java/sca/containers/container.spring/src/test/resources/META-INF/sca/default.scdl
    incubator/tuscany/java/sca/containers/container.spring/src/test/resources/test.xml
    incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java
    incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingBuilder.java

Modified: incubator/tuscany/java/sca/containers/container.spring/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/pom.xml?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/pom.xml (original)
+++ incubator/tuscany/java/sca/containers/container.spring/pom.xml Mon Aug 28 22:03:21 2006
@@ -41,7 +41,7 @@
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring</artifactId>
-            <version>2.0-rc2</version>
+            <version>2.0-rc3</version>
             <scope>compile</scope>
         </dependency>
 

Modified: incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeBuilder.java?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeBuilder.java (original)
+++ incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeBuilder.java Mon Aug 28 22:03:21 2006
@@ -23,6 +23,7 @@
 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.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.ComponentBuilderExtension;
 import org.apache.tuscany.spi.model.Binding;
@@ -31,8 +32,6 @@
 import org.apache.tuscany.spi.model.ComponentDefinition;
 import org.apache.tuscany.spi.model.CompositeComponentType;
 import org.apache.tuscany.spi.model.Property;
-import org.apache.tuscany.spi.model.ReferenceDefinition;
-import org.apache.tuscany.spi.model.ReferenceTarget;
 import org.apache.tuscany.spi.wire.InboundInvocationChain;
 import org.apache.tuscany.spi.wire.InboundWire;
 
@@ -46,14 +45,14 @@
  */
 public class SpringCompositeBuilder extends ComponentBuilderExtension<SpringImplementation> {
 
-
     public Component build(CompositeComponent<?> parent,
                            ComponentDefinition<SpringImplementation> componentDefinition,
                            DeploymentContext deploymentContext) throws BuilderConfigException {
         String name = componentDefinition.getName();
         SpringImplementation implementation = componentDefinition.getImplementation();
         AbstractApplicationContext applicationContext = implementation.getComponentType().getApplicationContext();
-        SpringCompositeComponent<?> component = new SpringCompositeComponent(name, applicationContext, parent, null);
+        SpringCompositeComponent<?> component = new SpringCompositeComponent(name, applicationContext, parent, null
+        );
         CompositeComponentType<BoundServiceDefinition<? extends Binding>,
             BoundReferenceDefinition<? extends Binding>,
             ? extends Property> componentType = implementation.getComponentType();
@@ -72,13 +71,11 @@
             }
             component.register(service);
         }
-        for (ReferenceTarget target : componentDefinition.getReferenceTargets().values()) {
-            ReferenceDefinition referenceDefinition = componentType.getReferences().get(target.getReferenceName());
-            if (referenceDefinition instanceof BoundReferenceDefinition) {
-                // call back into builder registry to handle building of references
-                component.register(builderRegistry.build(parent, (BoundReferenceDefinition<? extends Binding>)
-                    referenceDefinition, deploymentContext));
-            }
+        for (BoundReferenceDefinition<?> referenceDefinition : componentType.getReferences().values()) {
+            // call back into builder registry to handle building of references
+            Reference<?> reference = (Reference)builderRegistry.build(parent, referenceDefinition, deploymentContext);
+            connector.connect(reference);
+            component.register(reference);
         }
         return component;
     }

Modified: incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponent.java?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponent.java (original)
+++ incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringCompositeComponent.java Mon Aug 28 22:03:21 2006
@@ -32,6 +32,7 @@
 import org.apache.tuscany.spi.component.Service;
 import org.apache.tuscany.spi.extension.CompositeComponentExtension;
 import org.apache.tuscany.spi.wire.TargetInvoker;
+import org.apache.tuscany.spi.builder.Connector;
 
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.BeanFactory;
@@ -66,10 +67,13 @@
     public SpringCompositeComponent(String name,
                                     AbstractApplicationContext springContext,
                                     CompositeComponent parent,
-                                    Map<String, Document> propertyValues) {
+                                    Map<String, Document> propertyValues
+    ) {
         super(name, parent, propertyValues);
         SCAApplicationContext scaApplicationContext = new SCAApplicationContext();
         springContext.setParent(scaApplicationContext);
+        // REVIEW we need to refresh to pick up the parent but this is not optimal
+        springContext.refresh();
         this.springContext = springContext;
         // Spring wires itself
         this.selfWiring = true;
@@ -106,32 +110,28 @@
     private class SCAApplicationContext implements ApplicationContext {
 
         public Object getBean(String name) throws BeansException {
-            SCAObject context = (SCAObject) children.get(name); // keep cast due to compiler error
-            if (context == null) {
-                throw new NoSuchBeanDefinitionException("SCA service not found [" + name + "]");
-            }
-            return context.getServiceInstance();
+            return getBean(name, null);
         }
 
         @SuppressWarnings("unchecked")
         public Object getBean(String name, Class requiredType) throws BeansException {
-            SCAObject context = (SCAObject) children.get(name);   // keep cast due to compiler error
-            if (context == null) {
+            SCAObject object = (SCAObject) children.get(name);   // keep cast due to compiler error
+            if (object == null) {
                 throw new NoSuchBeanDefinitionException("SCA service not found [" + name + "]");
             }
             Class<?> type;
-            if (context instanceof Reference) {
-                type = ((Reference) context).getInterface();
-            } else if (context instanceof Service) {
-                type = ((Service) context).getInterface();
+            if (object instanceof Reference) {
+                type = ((Reference) object).getInterface();
+            } else if (object instanceof Service) {
+                type = ((Service) object).getInterface();
             } else {
-                throw new AssertionError("Illegal context type [" + name + "]");
+                throw new AssertionError("Illegal object type [" + name + "]");
             }
             if (requiredType != null && requiredType.isAssignableFrom(type)) {
                 // need null check since Spring may pass in a null
                 throw new BeanNotOfRequiredTypeException(name, requiredType, type);
             }
-            return context.getServiceInstance();
+            return object.getServiceInstance();
         }
 
         public boolean containsBean(String name) {

Modified: incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringImplementationLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringImplementationLoader.java?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringImplementationLoader.java (original)
+++ incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/apache/tuscany/container/spring/impl/SpringImplementationLoader.java Mon Aug 28 22:03:21 2006
@@ -50,7 +50,6 @@
 import javax.xml.stream.XMLStreamReader;
 
 import static org.osoa.sca.Version.XML_NAMESPACE_1_0;
-import org.osoa.sca.annotations.Constructor;
 
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.component.CompositeComponent;
@@ -59,6 +58,7 @@
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.loader.MissingResourceException;
+import org.apache.tuscany.spi.model.BoundReferenceDefinition;
 import org.apache.tuscany.spi.model.BoundServiceDefinition;
 import org.apache.tuscany.spi.services.info.RuntimeInfo;
 
@@ -123,7 +123,9 @@
                         }
                         implementation.getComponentType().getServices().put(service.getName(), service);
                     } else if (REFERENCE_ELEMENT.equals(qname)) {
-                        throw new UnsupportedOperationException();
+                        BoundReferenceDefinition reference =
+                            (BoundReferenceDefinition) registry.load(parent, reader, deploymentContext);
+                        implementation.getComponentType().getReferences().put(reference.getName(), reference);
                     }
                     break;
                 case END_ELEMENT:

Modified: incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/springframework/sca/ScaPostProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/springframework/sca/ScaPostProcessor.java?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/springframework/sca/ScaPostProcessor.java (original)
+++ incubator/tuscany/java/sca/containers/container.spring/src/main/java/org/springframework/sca/ScaPostProcessor.java Mon Aug 28 22:03:21 2006
@@ -16,6 +16,8 @@
 
 package org.springframework.sca;
 
+import java.beans.PropertyDescriptor;
+
 import org.springframework.aop.framework.ProxyFactory;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.PropertyValues;
@@ -87,6 +89,11 @@
             //
         }
         return true;
+    }
+
+    public PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean,
+                                                    String beanName) throws BeansException {
+        return pvs;
     }
 
     public PropertyValues postProcessPropertyValues(PropertyValues propertyValues, Object object, String string)

Modified: incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/ReferenceInvocationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/ReferenceInvocationTestCase.java?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/ReferenceInvocationTestCase.java (original)
+++ incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/ReferenceInvocationTestCase.java Mon Aug 28 22:03:21 2006
@@ -56,7 +56,9 @@
 
     private AbstractApplicationContext createSpringContext() {
         StaticApplicationContext beanFactory = new StaticApplicationContext();
-        BeanDefinition definition = new RootBeanDefinition(TestBeanImpl.class);
+        RootBeanDefinition definition = new RootBeanDefinition(TestBeanImpl.class);
+        //REVIEW we need to figure out how to handle eager init components
+        definition.setLazyInit(true);
         RuntimeBeanReference ref = new RuntimeBeanReference("bar");
         PropertyValue val = new PropertyValue("bean", ref);
         definition.getPropertyValues().addPropertyValue(val);

Modified: incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/ServiceInvocationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/ServiceInvocationTestCase.java?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/ServiceInvocationTestCase.java (original)
+++ incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/impl/ServiceInvocationTestCase.java Mon Aug 28 22:03:21 2006
@@ -42,7 +42,8 @@
 public class ServiceInvocationTestCase extends TestCase {
 
     public void testInvocation() {
-        SpringCompositeComponent<?> context = new SpringCompositeComponent("parent", createSpringContext(), null, null);
+        SpringCompositeComponent<?> context = new SpringCompositeComponent("parent", createSpringContext(), null, null
+        );
         InboundWire<TestBean> inboundWire = ArtifactFactory.createInboundWire("fooService", TestBean.class);
         OutboundWire<TestBean> outboundWire = ArtifactFactory.createOutboundWire("fooService", TestBean.class);
         ArtifactFactory.terminateWire(outboundWire);
@@ -63,7 +64,8 @@
 
     private AbstractApplicationContext createSpringContext() {
         StaticApplicationContext beanFactory = new StaticApplicationContext();
-        BeanDefinition definition = new RootBeanDefinition(TestBeanImpl.class);
+        RootBeanDefinition definition = new RootBeanDefinition(TestBeanImpl.class);
+        definition.setLazyInit(true);
         beanFactory.registerBeanDefinition("foo", definition);
         return beanFactory;
     }

Modified: incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/integration/BootstrapTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/integration/BootstrapTestCase.java?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/integration/BootstrapTestCase.java (original)
+++ incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/integration/BootstrapTestCase.java Mon Aug 28 22:03:21 2006
@@ -26,6 +26,7 @@
         Service service = (Service) comp.getChild("fooService");
         TestBean bean = (TestBean) service.getServiceInstance();
         bean.echo("foo");
+        bean.getBean().echo("foo");
     }
 
     protected void setUp() throws Exception {

Modified: incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/mock/TestBeanImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/mock/TestBeanImpl.java?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/mock/TestBeanImpl.java (original)
+++ incubator/tuscany/java/sca/containers/container.spring/src/test/java/org/apache/tuscany/container/spring/mock/TestBeanImpl.java Mon Aug 28 22:03:21 2006
@@ -25,6 +25,10 @@
 
     private TestBean bean;
 
+    public TestBeanImpl() {
+        System.out.println("");
+    }
+
     public String echo(String msg) {
         return msg;
     }

Modified: incubator/tuscany/java/sca/containers/container.spring/src/test/resources/META-INF/sca/application-context.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/test/resources/META-INF/sca/application-context.xml?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/src/test/resources/META-INF/sca/application-context.xml (original)
+++ incubator/tuscany/java/sca/containers/container.spring/src/test/resources/META-INF/sca/application-context.xml Mon Aug 28 22:03:21 2006
@@ -6,7 +6,9 @@
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/sca http://www.springframework.org/schema/sca/SpringSCA.xsd">
 
-    <bean id="testBean" class="org.apache.tuscany.container.spring.mock.TestBeanImpl">
+    <bean id="testBean" class="org.apache.tuscany.container.spring.mock.TestBeanImpl" lazy-init="true">
+        <property name="bean" ref="testReference"/>
     </bean>
+    <!-- <sca:reference name="testReference" type="org.apache.tuscany.container.spring.mock.TestReference"/> -->
 
 </beans>

Modified: incubator/tuscany/java/sca/containers/container.spring/src/test/resources/META-INF/sca/default.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/test/resources/META-INF/sca/default.scdl?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/src/test/resources/META-INF/sca/default.scdl (original)
+++ incubator/tuscany/java/sca/containers/container.spring/src/test/resources/META-INF/sca/default.scdl Mon Aug 28 22:03:21 2006
@@ -24,6 +24,10 @@
                 <interface.java class="org.apache.tuscany.container.spring.mock.TestBean"/>
                 <reference>testBean</reference>
             </service>
+            <reference name="testReference">
+                <interface.java class="org.apache.tuscany.container.spring.mock.TestBean"/>
+                <binding.test/>
+            </reference>
         </implementation.spring>
     </component>
 

Modified: incubator/tuscany/java/sca/containers/container.spring/src/test/resources/test.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/containers/container.spring/src/test/resources/test.xml?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/containers/container.spring/src/test/resources/test.xml (original)
+++ incubator/tuscany/java/sca/containers/container.spring/src/test/resources/test.xml Mon Aug 28 22:03:21 2006
@@ -6,7 +6,6 @@
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/sca http://www.springframework.org/schema/sca/SpringSCA.xsd">
 
-    <bean id="testBean" class="org.apache.tuscany.container.spring.mock.TestBeanImpl">
-    </bean>
+    <bean id="testBean" class="org.apache.tuscany.container.spring.mock.TestBeanImpl"/>
 
 </beans>

Modified: incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java (original)
+++ incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/extension/ComponentBuilderExtension.java Mon Aug 28 22:03:21 2006
@@ -24,6 +24,7 @@
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.builder.BuilderRegistry;
 import org.apache.tuscany.spi.builder.ComponentBuilder;
+import org.apache.tuscany.spi.builder.Connector;
 import org.apache.tuscany.spi.component.ScopeRegistry;
 import org.apache.tuscany.spi.component.WorkContext;
 import org.apache.tuscany.spi.model.Implementation;
@@ -46,6 +47,7 @@
     protected WorkScheduler workScheduler;
     protected WorkContext workContext;
     protected PolicyBuilderRegistry policyBuilderRegistry;
+    protected Connector connector;
 
     @Autowire
     public void setBuilderRegistry(BuilderRegistry registry) {
@@ -75,6 +77,11 @@
     @Autowire
     public void setPolicyBuilderRegistry(PolicyBuilderRegistry registry) {
         policyBuilderRegistry = registry;
+    }
+
+    @Autowire
+    public void setConnector(Connector connector) {
+        this.connector = connector;
     }
 
     @Init(eager = true)

Modified: incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingBuilder.java?rev=437966&r1=437965&r2=437966&view=diff
==============================================================================
--- incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingBuilder.java (original)
+++ incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingBuilder.java Mon Aug 28 22:03:21 2006
@@ -23,6 +23,7 @@
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.BindingBuilderExtension;
 import org.apache.tuscany.spi.model.BoundServiceDefinition;
+import org.apache.tuscany.spi.model.BoundReferenceDefinition;
 
 /**
  * @version $Rev$ $Date$
@@ -35,6 +36,15 @@
                            DeploymentContext context) {
         Class<?> interfaze = definition.getServiceContract().getInterfaceClass();
         return new TestBindingService(definition.getName(), interfaze, parent, wireService);
+    }
+
+    @SuppressWarnings("unchecked")
+    public SCAObject build(CompositeComponent parent,
+                               BoundReferenceDefinition<TestBinding> definition,
+                               DeploymentContext context) {
+        Class<?> interfaze = definition.getServiceContract().getInterfaceClass();
+        String name = definition.getName();
+        return new TestBindingReference(name, interfaze, parent, wireService);
     }
 
     protected Class<TestBinding> getBindingType() {

Added: incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingReference.java?rev=437966&view=auto
==============================================================================
--- incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingReference.java (added)
+++ incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingReference.java Mon Aug 28 22:03:21 2006
@@ -0,0 +1,22 @@
+package org.apache.tuscany.test.binding;
+
+import java.lang.reflect.Method;
+
+import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.extension.ReferenceExtension;
+import org.apache.tuscany.spi.wire.TargetInvoker;
+import org.apache.tuscany.spi.wire.WireService;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class TestBindingReference<T> extends ReferenceExtension<T> {
+
+    public TestBindingReference(String name, Class<T> interfaze, CompositeComponent parent, WireService wireService) {
+        super(name, interfaze, parent, wireService);
+    }
+
+    public TargetInvoker createTargetInvoker(Method operation) {
+        return new TestInvoker();
+    }
+}

Propchange: incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingReference.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestBindingReference.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestInvoker.java?rev=437966&view=auto
==============================================================================
--- incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestInvoker.java (added)
+++ incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestInvoker.java Mon Aug 28 22:03:21 2006
@@ -0,0 +1,48 @@
+package org.apache.tuscany.test.binding;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.tuscany.spi.wire.TargetInvoker;
+import org.apache.tuscany.spi.wire.Message;
+import org.apache.tuscany.spi.wire.InvocationRuntimeException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class TestInvoker implements TargetInvoker {
+
+    private boolean cacheable;
+
+    public boolean isCacheable() {
+        return cacheable;
+    }
+
+    public void setCacheable(boolean cacheable) {
+        this.cacheable = cacheable;
+    }
+
+    public boolean isOptimizable() {
+        return isCacheable();
+    }
+
+    public Object invokeTarget(final Object payload) throws InvocationTargetException {
+        // echo back the result, a real binding would invoke some API for flowing the request
+        return ((Object[])payload)[0];
+    }
+
+    public Message invoke(Message msg) throws InvocationRuntimeException {
+        try {
+            Object resp = invokeTarget(msg.getBody());
+            msg.setBody(resp);
+        } catch (InvocationTargetException e) {
+            msg.setBody(e.getCause());
+        } catch (Throwable e) {
+            msg.setBody(e);
+        }
+        return msg;
+    }
+
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
+    }
+}

Propchange: incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestInvoker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/test/src/main/java/org/apache/tuscany/test/binding/TestInvoker.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org