Author: pderop
Date: Sun Feb 14 12:49:02 2016
New Revision: 1730329
URL: http://svn.apache.org/viewvc?rev=1730329&view=rev
Log:
FELIX-5187: No errog log when configuration dependency callback is not found.
Modified:
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ConfigurationDependencyImpl.java
Modified:
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ConfigurationDependencyImpl.java
URL:
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ConfigurationDependencyImpl.java?rev=1730329&r1=1730328&r2=1730329&view=diff
==============================================================================
---
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ConfigurationDependencyImpl.java
(original)
+++
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ConfigurationDependencyImpl.java
Sun Feb 14 12:49:02 2016
@@ -19,6 +19,7 @@
package org.apache.felix.dm.impl;
import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
import java.util.Dictionary;
import java.util.Properties;
import java.util.concurrent.Callable;
@@ -27,6 +28,7 @@ import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Stream;
import org.apache.felix.dm.Component;
import org.apache.felix.dm.ConfigurationDependency;
@@ -388,7 +390,7 @@ public class ConfigurationDependencyImpl
// on the other actual configuration dependency copied into the
actual component instance created by the
// adapter.
- Object mainComponentInstance = m_component.getInstances();
+ Object mainComponentInstance = m_component.getInstance();
if (mainComponentInstance instanceof AbstractDecorator) {
return;
}
@@ -399,10 +401,11 @@ public class ConfigurationDependencyImpl
}
CallbackTypeDef callbackInfo = createCallbackType(m_logger,
m_component, m_configType, settings);
-
+ boolean callbackFound = false;
for (int i = 0; i < instances.length; i++) {
try {
InvocationUtil.invokeCallbackMethod(instances[i], m_add,
callbackInfo.m_sigs, callbackInfo.m_args);
+ callbackFound |= true;
}
catch (InvocationTargetException e) {
// The component has thrown an exception during it's
callback invocation.
@@ -423,6 +426,11 @@ public class ConfigurationDependencyImpl
throw new ConfigurationException(null, "Configuration
update failed", t);
}
}
+
+ if (! callbackFound) {
+ String[] instanceClasses = Stream.of(instances).map(c ->
c.getClass().getName()).toArray(String[]::new);
+ log("\"" + m_add + "\" configuration callback not found in any
of the component classes: " + Arrays.toString(instanceClasses));
+ }
}
}
@@ -432,9 +440,22 @@ public class ConfigurationDependencyImpl
}
}
+ private void log(String msg) {
+ if (m_logger != null) {
+ m_logger.log(Logger.LOG_ERROR, msg);
+ } else {
+ System.err.println(msg);
+ }
+ }
+
private void logConfigurationException(ConfigurationException e) {
if (m_logger != null) {
m_logger.log(Logger.LOG_ERROR, "Got exception while handling
configuration update for pid " + m_pid, e);
+ } else {
+ System.err.println("Got exception while handling configuration
update for pid " + m_pid);
+ if (e != null) {
+ e.printStackTrace();
+ }
}
}
}