FELIX-2964 (NPE on some dependency manager adapters, when auto-configuration mode is disabled)

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1125823 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java
index aac7e27..c77a628 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/AbstractDecorator.java
@@ -45,6 +45,13 @@
     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 ...
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
index f620ae3..84b7ce6 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/BundleAdapterServiceImpl.java
@@ -95,6 +95,7 @@
             for (int i = 0; i < m_stateListeners.size(); i ++) {
                 service.addStateListener((ComponentStateListener) m_stateListeners.get(i));
             }
+            configureAutoConfigState(service, m_component);
             return service;
         }
     }
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
index fb7652d..31deeba 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/FactoryConfigurationAdapterServiceImpl.java
@@ -68,10 +68,7 @@
     /**
      * 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 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 @@
             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;
         }
 
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java
index d083421..f8823f2 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ResourceAdapterServiceImpl.java
@@ -118,6 +118,8 @@
                 .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());
             }