You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ri...@apache.org on 2006/08/31 20:36:51 UTC

svn commit: r439003 - in /incubator/tuscany/java/sca: bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/ core/src/main/java/org/apache/tuscany/core/implementation/processor/ core/src/main/java/org/apache/tuscany/core/implementation/...

Author: rineholt
Date: Thu Aug 31 11:36:50 2006
New Revision: 439003

URL: http://svn.apache.org/viewvc?rev=439003&view=rev
Log:
Support optional autowire
http://www.mail-archive.com/tuscany-dev%40ws.apache.org/msg07237.html

Modified:
    incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceImpl.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessor.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java
    incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowire.java
    incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowireTestCase.java
    incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/annotation/Autowire.java

Modified: incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java (original)
+++ incubator/tuscany/java/sca/bindings/binding.axis2/src/main/java/org/apache/tuscany/binding/axis2/Axis2BindingBuilder.java Thu Aug 31 11:36:50 2006
@@ -48,7 +48,7 @@
         initAxis();
     }
 
-    @Autowire()
+    @Autowire(required=false)
     public void setServletHost(ServletHost servletHost) {
         this.servletHost = servletHost;
     }

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceImpl.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceImpl.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ImplementationProcessorServiceImpl.java Thu Aug 31 11:36:50 2006
@@ -196,6 +196,9 @@
                     + (pos + 1));
         }
         reference.setName(name);
+        
+        reference.setRequired(autowireAnnot.required());
+        
         ServiceContract<?> contract = new JavaServiceContract();
         contract.setInterfaceClass(param);
         reference.setServiceContract(contract);

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessor.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessor.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/processor/ReferenceProcessor.java Thu Aug 31 11:36:50 2006
@@ -58,17 +58,24 @@
                             DeploymentContext context)
         throws ProcessingException {
         Reference annotation = method.getAnnotation(Reference.class);
-        boolean autowire = method.getAnnotation(Autowire.class) != null;
-        if (annotation == null && !autowire) {
-            return;
+        Autowire autowire = method.getAnnotation(Autowire.class);
+        boolean isAutowire= autowire != null;
+        if (annotation == null && !isAutowire) {
+            return; //Not a reference or autowire annotation.
         }
         if (method.getParameterTypes().length != 1) {
             IllegalReferenceException e = new IllegalReferenceException("Setter must have one parameter");
             e.setIdentifier(method.toString());
             throw e;
         }
-        String name = null;
+        //process autowire required first let reference override. or if conflicting should this fault?
         boolean required = false;
+        if(isAutowire) {
+            required= autowire.required();
+        }
+        
+        String name = null;
+        
         if (annotation != null) {
             if (annotation.name() != null && annotation.name().length() > 0) {
                 name = annotation.name();
@@ -84,9 +91,10 @@
         if (type.getReferences().get(name) != null) {
             throw new DuplicateReferenceException(name);
         }
+       
         JavaMappedReference reference = new JavaMappedReference();
         reference.setMember(method);
-        reference.setAutowire(autowire);
+        reference.setAutowire(isAutowire);
         reference.setRequired(required);
         reference.setName(name);
         ServiceContract contract;

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemBindingBuilder.java Thu Aug 31 11:36:50 2006
@@ -76,7 +76,8 @@
         SystemReferenceImpl reference = new SystemReferenceImpl(boundReferenceDefinition.getName(), interfaze, parent);
         SystemInboundWire<?> inboundWire = new SystemInboundWireImpl(boundReferenceDefinition.getName(), interfaze);
         String refName = boundReferenceDefinition.getName();
-        OutboundWire outboundWire = new SystemOutboundAutowire(refName, interfaze, autowireComponent);
+        OutboundWire outboundWire = new SystemOutboundAutowire(refName, interfaze,
+                autowireComponent, boundReferenceDefinition.isRequired());
         reference.setInboundWire(inboundWire);
         reference.setOutboundWire(outboundWire);
         return reference;

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/builder/SystemComponentBuilder.java Thu Aug 31 11:36:50 2006
@@ -138,7 +138,7 @@
             Class interfaze = referenceDefiniton.getServiceContract().getInterfaceClass();
             OutboundWire<?> wire;
             if (referenceDefiniton.isAutowire()) {
-                wire = new SystemOutboundAutowire(referenceName, interfaze, autowireContext);
+                wire = new SystemOutboundAutowire(referenceName, interfaze, autowireContext, referenceDefiniton.isRequired());
             } else {
                 //FIXME support multiplicity!
                 assert target.getTargets().size() == 1 : "Multiplicity not yet implemented";
@@ -151,7 +151,7 @@
         for (ReferenceDefinition reference : componentType.getReferences().values()) {
             if (reference.isAutowire()) {
                 Class interfaze = reference.getServiceContract().getInterfaceClass();
-                OutboundWire<?> wire = new SystemOutboundAutowire(reference.getName(), interfaze, autowireContext);
+                OutboundWire<?> wire = new SystemOutboundAutowire(reference.getName(), interfaze, autowireContext, reference.isRequired());
                 component.addOutboundWire(wire);
             }
         }

Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowire.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowire.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowire.java (original)
+++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowire.java Thu Aug 31 11:36:50 2006
@@ -43,11 +43,15 @@
     private String referenceName;
     private ServiceContract serviceContract;
     private AutowireComponent<?> component;
+    final private boolean required;
 
-    public SystemOutboundAutowire(String referenceName, Class<T> businessInterface, AutowireComponent<?> component) {
+    public SystemOutboundAutowire(String referenceName, Class<T> businessInterface, AutowireComponent<?> component,
+            boolean required) {
+        
         this.referenceName = referenceName;
         this.component = component;
         serviceContract = new JavaServiceContract(businessInterface);
+        this.required= required;
     }
 
     public ServiceContract getServiceContract() {
@@ -76,7 +80,7 @@
     public T getTargetService() throws TargetException {
         Class interfaze = serviceContract.getInterfaceClass();
         T service = (T) component.resolveInstance(interfaze);
-        if (service == null) {
+        if (service == null && required) {
             TargetNotFoundException e = new TargetNotFoundException("Autowire target not found");
             e.setIdentifier(interfaze.getName());
             throw e;

Modified: incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowireTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowireTestCase.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowireTestCase.java (original)
+++ incubator/tuscany/java/sca/core/src/test/java/org/apache/tuscany/core/implementation/system/wire/SystemOutboundAutowireTestCase.java Thu Aug 31 11:36:50 2006
@@ -18,7 +18,7 @@
         AutowireComponent<?> component = createMock(AutowireComponent.class);
         expect(component.resolveInstance(Object.class)).andReturn(new Object());
         replay(component);
-        SystemOutboundAutowire<Object> wire = new SystemOutboundAutowire<Object>("foo", Object.class, component);
+        SystemOutboundAutowire<Object> wire = new SystemOutboundAutowire<Object>("foo", Object.class, component, false);
         assertNotNull(wire.getTargetService());
         verify(component);
     }
@@ -28,7 +28,7 @@
         AutowireComponent<?> component = createMock(AutowireComponent.class);
         expect(component.resolveInstance(Object.class)).andReturn(null);
         replay(component);
-        SystemOutboundAutowire<Object> wire = new SystemOutboundAutowire<Object>("foo", Object.class, component);
+        SystemOutboundAutowire<Object> wire = new SystemOutboundAutowire<Object>("foo", Object.class, component, true);
         try {
             wire.getTargetService();
             fail();
@@ -38,4 +38,21 @@
         verify(component);
     }
 
+    
+    public void testNonExistentAutowireNotRequired() {
+        AutowireComponent<?> component = createMock(AutowireComponent.class);
+        expect(component.resolveInstance(Object.class)).andReturn(null);
+        replay(component);
+        SystemOutboundAutowire<Object> wire = new SystemOutboundAutowire<Object>("foo", Object.class, component, false);
+        try {
+            
+            assertNull(wire.getTargetService());
+           
+        } catch (TargetNotFoundException e) {
+            fail();
+        }
+        verify(component);
+    }
+
+    
 }

Modified: incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/annotation/Autowire.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/annotation/Autowire.java?rev=439003&r1=439002&r2=439003&view=diff
==============================================================================
--- incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/annotation/Autowire.java (original)
+++ incubator/tuscany/java/sca/spi/src/main/java/org/apache/tuscany/spi/annotation/Autowire.java Thu Aug 31 11:36:50 2006
@@ -37,5 +37,10 @@
      * The name of the autowire. If not specified then the name will be derived from the annotated field.
      */
     String name() default "";
+    
+    /**
+     * Indicates if a reference must be specified.
+     */
+    public boolean required() default true;
 
 }



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