Author: pderop
Date: Mon Nov 16 20:55:32 2015
New Revision: 1714673
URL: http://svn.apache.org/viewvc?rev=1714673&view=rev
Log:
FELIX-5104: Call a conf dependency callback Instance with an instantiated
component
Modified:
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/bnd.bnd
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/ConfigurationDependency.java
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/impl/ConfigurationDependencyImpl.java
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/packageinfo
Modified:
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/bnd.bnd
URL:
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/bnd.bnd?rev=1714673&r1=1714672&r2=1714673&view=diff
==============================================================================
--- felix/trunk/dependencymanager/org.apache.felix.dependencymanager/bnd.bnd
(original)
+++ felix/trunk/dependencymanager/org.apache.felix.dependencymanager/bnd.bnd
Mon Nov 16 20:55:32 2015
@@ -14,11 +14,12 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
--buildpath: \
+-buildpath: \
osgi.core;version=4.2,\
osgi.cmpn;version=4.2,\
org.mockito.mockito-all;version=1.9,\
- ${junit}
+ ${junit},\
+ biz.aQute.bndlib;version=3.0
Private-Package: \
org.apache.felix.dm.impl,\
org.apache.felix.dm.impl.index,\
@@ -35,7 +36,7 @@ Include-Resource: META-INF/=resources/LI
META-INF/=${workspace}/release/resources/changelog.txt
Import-Package: !org.junit,!org.mockito.*,*
Bundle-Activator: org.apache.felix.dm.impl.Activator
-Bundle-Version: 4.1.2
+Bundle-Version: 4.2.0
Bundle-Name: Apache Felix Dependency Manager
Bundle-Description: Provides dynamic service and component dependency
management
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
Modified:
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/ConfigurationDependency.java
URL:
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/ConfigurationDependency.java?rev=1714673&r1=1714672&r2=1714673&view=diff
==============================================================================
---
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/ConfigurationDependency.java
(original)
+++
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/ConfigurationDependency.java
Mon Nov 16 20:55:32 2015
@@ -18,6 +18,8 @@
*/
package org.apache.felix.dm;
+import aQute.bnd.annotation.ProviderType;
+
/**
* Configuration dependency that can track the availability of a (valid)
configuration. To use
* it, specify a PID for the configuration. The dependency is always required,
because if it is
@@ -50,12 +52,15 @@ package org.apache.felix.dm;
*
* @author <a href="mailto:[email protected]">Felix Project Team</a>
*/
+@ProviderType
public interface ConfigurationDependency extends Dependency,
ComponentDependencyDeclaration {
/**
* Sets the name of the callback method that should be invoked when a
configuration
* is available. The contract for this method is identical to that of
* <code>ManagedService.updated(Dictionary) throws
ConfigurationException</code>.
* By default, if this method is not called, the callback name is
"updated".
+ * The callback is always invoked with an already instantiated component
(the component implementation class(es) are
+ * always instantiated before the updated callback is invoked).
*
* @param callback the name of the callback method
*/
@@ -65,6 +70,8 @@ public interface ConfigurationDependency
* Sets the name of the callback method that should be invoked when a
configuration
* is available. The contract for this method is identical to that of
* <code>ManagedService.updated(Dictionary) throws
ConfigurationException</code>.
+ * The callback is called with a component that is not yet instantiated.
This allows factory objects to get
+ * injected with a configuration before its <code>create</code> method is
called.
*
* @param instance the instance to call the callbacks on
* @param callback the name of the callback method
@@ -72,6 +79,19 @@ public interface ConfigurationDependency
ConfigurationDependency setCallback(Object instance, String callback);
/**
+ * Sets the name of the callback method that should be invoked when a
configuration
+ * is available. The contract for this method is identical to that of
+ * <code>ManagedService.updated(Dictionary) throws
ConfigurationException</code>.
+ * The component instance is instantiated before the callback is invoked
only the the <code>needsInstance</code> parameter is set to true.
+ *
+ * @param instance the instance to call the callback on
+ * @param callback the name of the callback method
+ * @param needsInstance true if the component implementation class(es)
must be created before the
+ * callback instance is invoked, else false.
+ */
+ ConfigurationDependency setCallback(Object instance, String callback,
boolean needsInstance);
+
+ /**
* Sets the <code>service.pid</code> of the configuration you are depending
* on.
*/
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=1714673&r1=1714672&r2=1714673&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
Mon Nov 16 20:55:32 2015
@@ -51,6 +51,7 @@ public class ConfigurationDependencyImpl
private final AtomicBoolean m_updateInvokedCache = new AtomicBoolean();
private final Logger m_logger;
private final BundleContext m_context;
+ private boolean m_needsInstance = true;
public ConfigurationDependencyImpl() {
this(null, null);
@@ -69,6 +70,7 @@ public class ConfigurationDependencyImpl
m_pid = prototype.m_pid;
m_logger = prototype.m_logger;
m_metaType = prototype.m_metaType != null ? new
MetaTypeProviderImpl(prototype.m_metaType, this, null) : null;
+ m_needsInstance = prototype.needsInstance();
}
@Override
@@ -87,13 +89,18 @@ public class ConfigurationDependencyImpl
}
public ConfigurationDependencyImpl setCallback(Object instance, String
callback) {
+ return setCallback(instance, callback, false);
+ }
+
+ public ConfigurationDependencyImpl setCallback(Object instance, String
callback, boolean needsInstance) {
super.setCallbacks(instance, callback, null);
+ m_needsInstance = needsInstance;
return this;
}
@Override
public boolean needsInstance() {
- return m_callbackInstance == null;
+ return m_needsInstance;
}
@Override
Modified:
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/packageinfo
URL:
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/packageinfo?rev=1714673&r1=1714672&r2=1714673&view=diff
==============================================================================
---
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/packageinfo
(original)
+++
felix/trunk/dependencymanager/org.apache.felix.dependencymanager/src/org/apache/felix/dm/packageinfo
Mon Nov 16 20:55:32 2015
@@ -1 +1 @@
-version 4.1.0
\ No newline at end of file
+version 4.2.0
\ No newline at end of file