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

svn commit: r797095 - in /geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container: AbstractServiceReferenceRecipe.java RecipeBuilder.java ServiceListener.java

Author: gawor
Date: Thu Jul 23 15:06:39 2009
New Revision: 797095

URL: http://svn.apache.org/viewvc?rev=797095&view=rev
Log:
more security related updates

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/RecipeBuilder.java
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ServiceListener.java

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=797095&r1=797094&r2=797095&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 Thu Jul 23 15:06:39 2009
@@ -360,10 +360,9 @@
 
         private static final Logger LOGGER = LoggerFactory.getLogger(Listener.class);
 
-        /* Inject by ObjectRecipe */
         private Object listener;
-        /* Inject by ObjectRecipe */
         private ReferenceListener metadata;
+        private ExtendedBlueprintContainer blueprintContainer;
 
         private Set<Method> bindMethodsReference = new HashSet<Method>();
         private Set<Method> bindMethodsObjectProp = new HashSet<Method>();
@@ -380,6 +379,10 @@
             this.metadata = metadata;
         }
 
+        public void setBlueprintContainer(ExtendedBlueprintContainer blueprintContainer) {
+            this.blueprintContainer = blueprintContainer;
+        }
+        
         public void init(Collection<Class> classes) {
             Set<Class> clazzes = new HashSet<Class>(classes);
             clazzes.add(Object.class);
@@ -419,14 +422,16 @@
         private void invokeMethods(Set<Method> referenceMethods, Set<Method> objectMethods, Set<Method> objectPropMethods, ServiceReference reference, Object service) {
             for (Method method : referenceMethods) {
                 try {
-                    method.invoke(listener, reference);
+                    ReflectionUtils.invoke(blueprintContainer.getAccessControlContext(), 
+                                           method, listener, reference);
                 } catch (Exception e) {
                     LOGGER.info("Error calling listener method " + method, e);
                 }
             }
             for (Method method : objectMethods) {
                 try {
-                    method.invoke(listener, service);
+                    ReflectionUtils.invoke(blueprintContainer.getAccessControlContext(), 
+                                           method, listener, service);
                 } catch (Exception e) {
                     LOGGER.info("Error calling listener method " + method, e);
                 }
@@ -442,7 +447,8 @@
                     }
                 }
                 try {
-                    method.invoke(listener, service, props);
+                    ReflectionUtils.invoke(blueprintContainer.getAccessControlContext(), 
+                                           method, listener, service, props);
                 } catch (Exception e) {
                     LOGGER.info("Error calling listener method " + method, e);
                 }

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/RecipeBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/RecipeBuilder.java?rev=797095&r1=797094&r2=797095&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/RecipeBuilder.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/RecipeBuilder.java Thu Jul 23 15:06:39 2009
@@ -247,6 +247,7 @@
         if (listener.getUnregistrationMethod() != null) {
             recipe.setProperty("unregisterMethod", listener.getUnregistrationMethod());
         }
+        recipe.setProperty("blueprintContainer", blueprintContainer);
         return recipe;
     }
 
@@ -254,6 +255,7 @@
         BeanRecipe recipe = new BeanRecipe(getName(null), blueprintContainer, AbstractServiceReferenceRecipe.Listener.class);
         recipe.setProperty("listener", getValue(listener.getListenerComponent(), null));
         recipe.setProperty("metadata", listener);
+        recipe.setProperty("blueprintContainer", blueprintContainer);
         return recipe;
     }
 

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=797095&r1=797094&r2=797095&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 Thu Jul 23 15:06:39 2009
@@ -20,6 +20,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.geronimo.blueprint.ExtendedBlueprintContainer;
 import org.apache.geronimo.blueprint.utils.ReflectionUtils;
 import org.osgi.service.blueprint.container.ComponentDefinitionException;
 import org.slf4j.Logger;
@@ -32,6 +33,7 @@
     private Object listener;
     private String registerMethod;
     private String unregisterMethod;
+    private ExtendedBlueprintContainer blueprintContainer;
 
     private List<Method> registerMethods;
     private List<Method> unregisterMethods;
@@ -49,6 +51,10 @@
         this.unregisterMethod = method;
     }
     
+    public void setBlueprintContainer(ExtendedBlueprintContainer blueprintContainer) {
+        this.blueprintContainer = blueprintContainer;
+    }
+    
     public void register(Object service, Map properties) {
         init(service);
         invokeMethod(registerMethods, service, properties);
@@ -87,10 +93,10 @@
         if (methods == null || methods.isEmpty()) {
             return;
         }
-        Object[] args = new Object[] { service, properties };
         for (Method method : methods) {
             try {
-                method.invoke(listener, args);
+                ReflectionUtils.invoke(blueprintContainer.getAccessControlContext(), 
+                                       method, listener, service, properties);
             } catch (Exception e) {
                 LOGGER.info("Error calling listener method " + method, e);
             }