You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gn...@apache.org on 2009/07/01 14:50:06 UTC

svn commit: r790148 - in /geronimo/sandbox/blueprint/blueprint-core/src: main/java/org/apache/geronimo/blueprint/container/ test/resources/

Author: gnodet
Date: Wed Jul  1 12:50:06 2009
New Revision: 790148

URL: http://svn.apache.org/viewvc?rev=790148&view=rev
Log:
Fix reference-listeners, fix the listener target validation test, make sure the service target implements the required interfaces

Modified:
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintRepository.java
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceListener.java
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceRecipe.java
    geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-wiring.xml

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java?rev=790148&r1=790147&r2=790148&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java Wed Jul  1 12:50:06 2009
@@ -419,7 +419,7 @@
             for (Method method : objectPropMethods) {
                 if (props == null) {
                     props = new HashMap<String, Object>();
-                    if (reference == null) {
+                    if (reference != null) {
                         for (String name : reference.getPropertyKeys()) {
                             props.put(name, reference.getProperty(name));
                         }

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintRepository.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintRepository.java?rev=790148&r1=790147&r2=790148&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintRepository.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintRepository.java Wed Jul  1 12:50:06 2009
@@ -227,30 +227,36 @@
                     throw new ComponentDefinitionException("The target for a <service> element must not be <reference-list> element");
                 }
                 CollectionRecipe listeners = ((ServiceRecipe) recipe).getListenersRecipe();
-                for (Recipe l : listeners.getDependencies()) {
-                    if (l instanceof RefRecipe) {
-                        l = getRecipe(((RefRecipe) l).getIdRef());
-                    }
-                    if (l instanceof ServiceRecipe) {
-                        throw new ComponentDefinitionException("The target for a <registration-listener> element must not be <service> element");
-                    }
-                    if (l instanceof ReferenceListRecipe) {
-                        throw new ComponentDefinitionException("The target for a <registration-listener> element must not be <reference-list> element");
+                for (Recipe lr : listeners.getDependencies()) {
+                    // The listener recipe is a bean recipe with the listener being set in a property
+                    for (Recipe l : lr.getDependencies()) {
+                        if (l instanceof RefRecipe) {
+                            l = getRecipe(((RefRecipe) l).getIdRef());
+                        }
+                        if (l instanceof ServiceRecipe) {
+                            throw new ComponentDefinitionException("The target for a <registration-listener> element must not be <service> element");
+                        }
+                        if (l instanceof ReferenceListRecipe) {
+                            throw new ComponentDefinitionException("The target for a <registration-listener> element must not be <reference-list> element");
+                        }
                     }
                 }
             }
             // Check references
             if (recipe instanceof AbstractServiceReferenceRecipe) {
                 CollectionRecipe listeners = ((AbstractServiceReferenceRecipe) recipe).getListenersRecipe();
-                for (Recipe l : listeners.getDependencies()) {
-                    if (l instanceof RefRecipe) {
-                        l = getRecipe(((RefRecipe) l).getIdRef());
-                    }
-                    if (l instanceof ServiceRecipe) {
-                        throw new ComponentDefinitionException("The target for a <reference-listener> element must not be <service> element");
-                    }
-                    if (l instanceof ReferenceListRecipe) {
-                        throw new ComponentDefinitionException("The target for a <reference-listener> element must not be <reference-list> element");
+                for (Recipe lr : listeners.getDependencies()) {
+                    // The listener recipe is a bean recipe with the listener being set in a property
+                    for (Recipe l : lr.getDependencies()) {
+                        if (l instanceof RefRecipe) {
+                            l = getRecipe(((RefRecipe) l).getIdRef());
+                        }
+                        if (l instanceof ServiceRecipe) {
+                            throw new ComponentDefinitionException("The target for a <reference-listener> element must not be <service> element");
+                        }
+                        if (l instanceof ReferenceListRecipe) {
+                            throw new ComponentDefinitionException("The target for a <reference-listener> element must not be <reference-list> element");
+                        }
                     }
                 }
             }

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceListener.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceListener.java?rev=790148&r1=790147&r2=790148&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceListener.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceListener.java Wed Jul  1 12:50:06 2009
@@ -55,6 +55,7 @@
     }
 
     public void unregister(Object service, Map properties) {
+        init(service);
         invokeMethod(unregisterMethods, service, properties);
     }
 

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceRecipe.java?rev=790148&r1=790147&r2=790148&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceRecipe.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceRecipe.java Wed Jul  1 12:50:06 2009
@@ -266,6 +266,17 @@
         if (service == null) {
             throw new IllegalStateException("service is null");
         }
+        // Check if the service actually implement all the requested interfaces
+        if (metadata.getAutoExport() == ServiceMetadata.AUTO_EXPORT_DISABLED) {
+            Set<String> allClasses = new HashSet<String>();
+            ReflectionUtils.getSuperClasses(allClasses, service.getClass());
+            ReflectionUtils.getImplementedInterfaces(allClasses, service.getClass());
+            Set<String> classes = getClasses();
+            classes.removeAll(allClasses);
+            if (!classes.isEmpty()) {
+                throw new ComponentDefinitionException("The service implementation does not implement the required interfaces: " + classes);
+            }
+        }
         return service;
     }
 

Modified: geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-wiring.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-wiring.xml?rev=790148&r1=790147&r2=790148&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-wiring.xml (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/test/resources/test-wiring.xml Wed Jul  1 12:50:06 2009
@@ -7,8 +7,8 @@
                 <property name="bundle" ref="blueprintBundleContext" />
             </bean>
     </type-converters>
-    
-    <service id="service1" ref="pojoB" interface="foo">
+
+    <service id="service1" ref="pojoB" interface="org.apache.geronimo.blueprint.pojos.PojoB">
         <service-properties>
             <entry key="key1" value="value1"/>
             <entry key="key2" value="value2"/>