You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by va...@apache.org on 2008/11/21 13:52:11 UTC

svn commit: r719569 - in /geronimo/plugins/tuscany/trunk: geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/ samples/helloworld-servlet/src/main/java/sample/ samples/helloworld-servlet/src/main/webapp/WEB-INF/

Author: vamsic007
Date: Fri Nov 21 04:52:11 2008
New Revision: 719569

URL: http://svn.apache.org/viewvc?rev=719569&view=rev
Log:
Handle required property of @Reference and @Property annotations.

Modified:
    geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/SCAPropertyReference.java
    geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/SCAServiceReference.java
    geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/TuscanyModuleBuilderExtension.java
    geronimo/plugins/tuscany/trunk/samples/helloworld-servlet/src/main/java/sample/HelloworldServlet.java
    geronimo/plugins/tuscany/trunk/samples/helloworld-servlet/src/main/webapp/WEB-INF/web.composite

Modified: geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/SCAPropertyReference.java
URL: http://svn.apache.org/viewvc/geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/SCAPropertyReference.java?rev=719569&r1=719568&r2=719569&view=diff
==============================================================================
--- geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/SCAPropertyReference.java (original)
+++ geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/SCAPropertyReference.java Fri Nov 21 04:52:11 2008
@@ -27,6 +27,7 @@
 import org.apache.tuscany.sca.runtime.RuntimeComponent;
 import org.apache.xbean.naming.reference.SimpleReference;
 import org.osoa.sca.ComponentContext;
+import org.osoa.sca.ServiceRuntimeException;
 
 /**
  * @version $Rev$ $Date$
@@ -35,11 +36,13 @@
     private String componentName;
     private Class propertyType;
     private String propertyName;
+    private boolean required;
     
-    public SCAPropertyReference(Class propertyType, String componentName, String propertyName) {
+    public SCAPropertyReference(Class propertyType, String componentName, String propertyName, boolean required) {
         this.propertyType = propertyType;
         this.componentName = componentName;
         this.propertyName = propertyName;
+        this.required = required;
     }
 
     @Override
@@ -53,6 +56,14 @@
             }
         }
         
-        return componentContext.getProperty(propertyType, propertyName);
+        try {
+            return componentContext.getProperty(propertyType, propertyName);
+        } catch(ServiceRuntimeException e) {
+            if(!required && e.getMessage().startsWith("Property not found")) {
+                return null;
+            } else {
+                throw e;
+            }
+        }
     }
 }

Modified: geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/SCAServiceReference.java
URL: http://svn.apache.org/viewvc/geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/SCAServiceReference.java?rev=719569&r1=719568&r2=719569&view=diff
==============================================================================
--- geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/SCAServiceReference.java (original)
+++ geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/SCAServiceReference.java Fri Nov 21 04:52:11 2008
@@ -27,6 +27,7 @@
 import org.apache.tuscany.sca.runtime.RuntimeComponent;
 import org.apache.xbean.naming.reference.SimpleReference;
 import org.osoa.sca.ComponentContext;
+import org.osoa.sca.ServiceRuntimeException;
 
 /**
  * @version $Rev$ $Date$
@@ -35,11 +36,13 @@
     private String componentName;
     private String interfaceName;
     private String referenceName;
+    private boolean required;
     
-    public SCAServiceReference(String interfaceName, String componentName, String referenceName) {
+    public SCAServiceReference(String interfaceName, String componentName, String referenceName, boolean required) {
         this.interfaceName = interfaceName;
         this.componentName = componentName;
         this.referenceName = referenceName;
+        this.required = required;
     }
 
     @Override
@@ -55,7 +58,15 @@
                 }
             }
             
-            return componentContext.getService(referenceInterface, referenceName);
+            try {
+                return componentContext.getService(referenceInterface, referenceName);
+            } catch(ServiceRuntimeException e) {
+                if(!required && e.getMessage().startsWith("Reference not found")) {
+                    return null;
+                } else {
+                    throw e;
+                }
+            }
         } catch (ClassNotFoundException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();

Modified: geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/TuscanyModuleBuilderExtension.java
URL: http://svn.apache.org/viewvc/geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/TuscanyModuleBuilderExtension.java?rev=719569&r1=719568&r2=719569&view=diff
==============================================================================
--- geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/TuscanyModuleBuilderExtension.java (original)
+++ geronimo/plugins/tuscany/trunk/geronimo-tuscany/src/main/java/org/apache/geronimo/tuscany/TuscanyModuleBuilderExtension.java Fri Nov 21 04:52:11 2008
@@ -186,12 +186,12 @@
                         Reference ref = field.getAnnotation(Reference.class);
                         String referenceName = ref.name() != null && !ref.name().equals("") ? ref.name() : field.getName();
                         holder.addInjection(servletClassName, new Injection(servletClassName, field.getName(), servletClassName+"/"+field.getName()));
-                        compContext.put("env/"+servletClassName+"/"+field.getName(), new SCAServiceReference(field.getType().getName(), thisComponentName, referenceName));
+                        compContext.put("env/"+servletClassName+"/"+field.getName(), new SCAServiceReference(field.getType().getName(), thisComponentName, referenceName, ref.required()));
                     } else if(field.isAnnotationPresent(Property.class)) {
                         Property prop = field.getAnnotation(Property.class);
                         String propertyName = prop.name() != null && !prop.name().equals("") ? prop.name() : field.getName();
                         holder.addInjection(servletClassName, new Injection(servletClassName, field.getName(), servletClassName+"/"+field.getName()));
-                        compContext.put("env/"+servletClassName+"/"+field.getName(), new SCAPropertyReference(field.getType(), thisComponentName, propertyName));
+                        compContext.put("env/"+servletClassName+"/"+field.getName(), new SCAPropertyReference(field.getType(), thisComponentName, propertyName, prop.required()));
                     } else if(field.isAnnotationPresent(ComponentName.class)) {
                         holder.addInjection(servletClassName, new Injection(servletClassName, field.getName(), servletClassName+"/"+field.getName()));
                         compContext.put("env/"+servletClassName+"/"+field.getName(), thisComponentName);
@@ -211,12 +211,12 @@
                         Reference ref = method.getAnnotation(Reference.class);
                         String referenceName = ref.name() != null && !ref.name().equals("") ? ref.name() : targetName;
                         holder.addInjection(servletClassName, new Injection(servletClassName, targetName, servletClassName+"/"+targetName));
-                        compContext.put("env/"+servletClassName+"/"+targetName, new SCAServiceReference(type.getName(), thisComponentName, referenceName));
+                        compContext.put("env/"+servletClassName+"/"+targetName, new SCAServiceReference(type.getName(), thisComponentName, referenceName, ref.required()));
                     } else if(method.isAnnotationPresent(Property.class)) {
                         Property prop = method.getAnnotation(Property.class);
                         String propertyName = prop.name() != null && !prop.name().equals("") ? prop.name() : targetName;
                         holder.addInjection(servletClassName, new Injection(servletClassName, targetName, servletClassName+"/"+targetName));
-                        compContext.put("env/"+servletClassName+"/"+targetName, new SCAPropertyReference(type, thisComponentName, propertyName));
+                        compContext.put("env/"+servletClassName+"/"+targetName, new SCAPropertyReference(type, thisComponentName, propertyName, prop.required()));
                     } else if(method.isAnnotationPresent(ComponentName.class)) {
                         holder.addInjection(servletClassName, new Injection(servletClassName, targetName, servletClassName+"/"+targetName));
                         compContext.put("env/"+servletClassName+"/"+targetName, thisComponentName);

Modified: geronimo/plugins/tuscany/trunk/samples/helloworld-servlet/src/main/java/sample/HelloworldServlet.java
URL: http://svn.apache.org/viewvc/geronimo/plugins/tuscany/trunk/samples/helloworld-servlet/src/main/java/sample/HelloworldServlet.java?rev=719569&r1=719568&r2=719569&view=diff
==============================================================================
--- geronimo/plugins/tuscany/trunk/samples/helloworld-servlet/src/main/java/sample/HelloworldServlet.java (original)
+++ geronimo/plugins/tuscany/trunk/samples/helloworld-servlet/src/main/java/sample/HelloworldServlet.java Fri Nov 21 04:52:11 2008
@@ -52,6 +52,16 @@
         this.ser3 = service3;
     }
     
+    /* Test for required */
+    @Reference(required=false)
+    protected Helloworld service4;
+    
+    @Reference(required=false)
+    protected Helloworld service5;
+    
+    @Reference(required=true)
+    protected Helloworld service6;
+
     @Property
     protected String property1;
     
@@ -66,6 +76,16 @@
         this.prop3 = property3;
     }
     
+    /* Test for required */
+    @Property(required=false)
+    protected String property4;
+
+    @Property(required=false)
+    protected String property5;
+
+    @Property(required=true)
+    protected String property6;
+    
     @ComponentName
     protected String scaComponentName;
 
@@ -116,12 +136,18 @@
         out.write("<br>Injected into field. <br><strong>Result: </strong>" + greeting);
         out.write("<br><br>Injected into field with reference name specified in the annotation. <br><strong>Result: </strong>" + greeting2);
         out.write("<br><br>Injected using setter method. <br><strong>Result: </strong>" + greeting3);
+        out.write("<br><br>Required is false. Reference is not specified. "+service4);
+        out.write("<br><br>Required is false. Reference is specified. "+service5);
+        out.write("<br><br>Required is true. Reference is specified. "+service6);
         out.write("<hr>");
         
         out.write("<h3>@Property</h3>");
         out.write("<br>Injected into field: property1 = "+property1);
         out.write("<br>Injected into field with property name specified in the annotation: property2 = "+prop2);
         out.write("<br>Injected using setter method: Property3 = "+prop3);
+        out.write("<br>Required is false. Property is not specified. "+property4);
+        out.write("<br>Required is false. Property is specified. "+property5);
+        out.write("<br>Required is true. Property is specified. "+property6);
         out.write("<hr>");
         
         out.write("<h3>@ComponentName</h3>");

Modified: geronimo/plugins/tuscany/trunk/samples/helloworld-servlet/src/main/webapp/WEB-INF/web.composite
URL: http://svn.apache.org/viewvc/geronimo/plugins/tuscany/trunk/samples/helloworld-servlet/src/main/webapp/WEB-INF/web.composite?rev=719569&r1=719568&r2=719569&view=diff
==============================================================================
--- geronimo/plugins/tuscany/trunk/samples/helloworld-servlet/src/main/webapp/WEB-INF/web.composite (original)
+++ geronimo/plugins/tuscany/trunk/samples/helloworld-servlet/src/main/webapp/WEB-INF/web.composite Fri Nov 21 04:52:11 2008
@@ -33,9 +33,19 @@
         <reference name="Service3" target="HelloworldFrenchComponent" >
             <binding.sca/>
         </reference>
+        
+        <!-- <reference name="service4" target="HelloworldComponent"/> -->
+        
+        <reference name="service5" target="HelloworldComponent"/>
+        
+        <reference name="service6" target="HelloworldComponent"/>
+
         <property name="property1" type="xsd:string">Prop1</property>
         <property name="property2" type="xsd:int">7</property>
         <property name="Property3" type="xsd:double">0.7</property>
+        <!-- <property name="property4" type="xsd:string">Prop4</property> -->
+        <property name="property5" type="xsd:string">Prop5</property>
+        <property name="property6" type="xsd:string">Prop6</property>
     </component>
 
 </composite>