Author: pderop
Date: Fri Jun 11 06:03:53 2010
New Revision: 953573
URL: http://svn.apache.org/viewvc?rev=953573&view=rev
Log:
Added comments. In addedService: invoke added callback if the dependency is
made available and if the dependency is not required
Modified:
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
Modified:
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
URL:
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java?rev=953573&r1=953572&r2=953573&view=diff
==============================================================================
---
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
(original)
+++
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
Fri Jun 11 06:03:53 2010
@@ -388,16 +388,22 @@ public class ServiceDependencyImpl exten
for (int i = 0; i < services.length; i++) {
DependencyService ds = (DependencyService) services[i];
if (makeAvailable) {
- // only if this service has already been instantiated should
be attempt to
- // invoke the callback method, if not, this callback will be
deferred until
- // the instance is created (see ServiceImpl.initService())
- if (ds.getService() != null) {
+ // The dependency callback will be defered until all required
dependency are available.
+ ds.dependencyAvailable(this);
+ if (!isRequired()) {
+ // For optional dependency, we always invoke callback,
because at this point, we know
+ // that the service has been started, and the service
start method has been called.
+ // (See the ServiceImpl.bindService method, which will
activate optional dependencies using
+ // startTrackingOptional() method).
invokeAdded(ds, ref, service);
}
- ds.dependencyAvailable(this);
}
else {
ds.dependencyChanged(this);
+ // At this point, either the dependency is optional (meaning
that the service has been started,
+ // because if not, then our dependency would not be active);
or the dependency is required,
+ // meaning that either the service is not yet started, or
already started.
+ // In all cases, we have to inject the required dependency.
invokeAdded(ds, ref, service);
}
}