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());
}