Author: pderop
Date: Sat May 21 21:30:02 2011
New Revision: 1125823

URL: http://svn.apache.org/viewvc?rev=1125823&view=rev
Log:
FELIX-2964 (NPE on some dependency manager adapters, when auto-configuration 
mode is disabled)

Modified:
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java?rev=1125823&r1=1125822&r2=1125823&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java
 Sat May 21 21:30:02 2011
@@ -45,6 +45,13 @@ public abstract class AbstractDecorator 
     public abstract Component createService(Object[] properties);
     
     /**
+     * Catches our DependencyManager handle from our component init method.
+     */
+    public void init(Component c) {
+        m_manager = c.getDependencyManager();
+    }
+    
+    /**
      * Extra method, which may be used by sub-classes, when adaptee has 
changed.
      * For now, it's only used by the FactoryConfigurationAdapterImpl class, 
      * but it might also make sense to use this for Resource Adapters ...

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java?rev=1125823&r1=1125822&r2=1125823&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
 Sat May 21 21:30:02 2011
@@ -95,6 +95,7 @@ public class BundleAdapterServiceImpl ex
             for (int i = 0; i < m_stateListeners.size(); i ++) {
                 service.addStateListener((ComponentStateListener) 
m_stateListeners.get(i));
             }
+            configureAutoConfigState(service, m_component);
             return service;
         }
     }

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java?rev=1125823&r1=1125822&r2=1125823&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
 Sat May 21 21:30:02 2011
@@ -68,10 +68,7 @@ public class FactoryConfigurationAdapter
     /**
      * Creates, updates, or removes a service, when a ConfigAdmin factory 
configuration is created/updated or deleted.
      */
-    public class AdapterImpl extends AbstractDecorator implements 
ManagedServiceFactory {
-        // Our injected dependency manager
-        protected volatile DependencyManager m_dm;
-        
+    public class AdapterImpl extends AbstractDecorator implements 
ManagedServiceFactory {        
         // Our Managed Service Factory PID
         protected String m_factoryPid;
         
@@ -109,7 +106,7 @@ public class FactoryConfigurationAdapter
          */
         public Component createService(Object[] properties) {
             Dictionary settings = (Dictionary) properties[0];     
-            Component newService = m_dm.createComponent();        
+            Component newService = m_manager.createComponent();        
             Object impl = null;
             
             try {
@@ -133,12 +130,13 @@ public class FactoryConfigurationAdapter
             newService.setInterface(m_serviceInterfaces, serviceProperties);
             newService.setImplementation(impl);
             List dependencies = m_component.getDependencies();
-            newService.add(dependencies);
+            newService.add(dependencies); // TODO check if we should create a 
copy of dependencies ?
             newService.setComposition(m_compositionInstance, 
m_compositionMethod); // if not set, no effect
             newService.setCallbacks(m_callbackObject, m_init, m_start, m_stop, 
m_destroy); // if not set, no effect
             for (int i = 0; i < m_stateListeners.size(); i ++) {
                 newService.addStateListener((ComponentStateListener) 
m_stateListeners.get(i));
             }
+            configureAutoConfigState(newService, m_component);
             return newService;
         }
 

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java?rev=1125823&r1=1125822&r2=1125823&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java
 Sat May 21 21:30:02 2011
@@ -118,6 +118,8 @@ public class ResourceAdapterServiceImpl 
                 .setCallbacks(m_callbackObject, m_init, m_start, m_stop, 
m_destroy) // if not set, no effect
                 .add(resourceDependency);
             
+            configureAutoConfigState(service, m_component);
+
             for (int i = 0; i < dependencies.size(); i++) {
                 service.add(((Dependency) dependencies.get(i)).createCopy());
             }


Reply via email to