Author: marrs
Date: Mon Nov 16 07:38:49 2009
New Revision: 880638
URL: http://svn.apache.org/viewvc?rev=880638&view=rev
Log:
FELIX-303 applied the suggested fix for getCallbackInstances(), FELIX-1546
added invocation of callbacks for required dependencies (work on this issue is
ongoing).
Modified:
felix/trunk/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceDependency.java
felix/trunk/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceRegistrationImpl.java
Modified:
felix/trunk/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceDependency.java
URL:
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceDependency.java?rev=880638&r1=880637&r2=880638&view=diff
==============================================================================
---
felix/trunk/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceDependency.java
(original)
+++
felix/trunk/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceDependency.java
Mon Nov 16 07:38:49 2009
@@ -337,13 +337,14 @@
public void addedService(ServiceReference ref, Object service) {
if (makeAvailable()) {
m_service.dependencyAvailable(this);
+ // try to invoke callback, if specified, but only for optional
dependencies
+ // because callbacks for required dependencies are handled
differently
+ if (!isRequired()) {
+ invokeAdded(ref, service);
+ }
}
else {
m_service.dependencyChanged(this);
- }
- // try to invoke callback, if specified, but only for optional
dependencies
- // because callbacks for required dependencies are handled differently
- if (!isRequired()) {
invokeAdded(ref, service);
}
}
@@ -355,7 +356,7 @@
public void invokeAdded(ServiceReference reference, Object
serviceInstance) {
Object[] callbackInstances = getCallbackInstances();
if ((callbackInstances != null) && (m_callbackAdded != null)) {
- invokeCallbackMethod(callbackInstances, m_callbackAdded,
reference, serviceInstance);
+ invokeCallbackMethod(callbackInstances, m_callbackAdded,
reference, serviceInstance);
}
}
@@ -372,20 +373,21 @@
public void invokeChanged(ServiceReference reference, Object
serviceInstance) {
Object[] callbackInstances = getCallbackInstances();
if ((callbackInstances != null) && (m_callbackChanged != null)) {
- if (m_reference == null) {
- Thread.dumpStack();
- }
- invokeCallbackMethod(callbackInstances, m_callbackChanged,
reference, serviceInstance);
+ invokeCallbackMethod(callbackInstances, m_callbackChanged,
reference, serviceInstance);
}
}
public void removedService(ServiceReference ref, Object service) {
if (makeUnavailable()) {
m_service.dependencyUnavailable(this);
+ // try to invoke callback, if specified, but only for optional
dependencies
+ // because callbacks for required dependencies are handled
differently
+ if (!isRequired()) {
+ invokeRemoved(ref, service);
+ }
}
- // try to invoke callback, if specified, but only for optional
dependencies
- // because callbacks for required dependencies are handled differently
- if (!isRequired()) {
+ else {
+ m_service.dependencyChanged(this);
invokeRemoved(ref, service);
}
@@ -400,10 +402,7 @@
public void invokeRemoved(ServiceReference reference, Object
serviceInstance) {
Object[] callbackInstances = getCallbackInstances();
if ((callbackInstances != null) && (m_callbackRemoved != null)) {
- if (m_reference == null) {
- Thread.dumpStack();
- }
- invokeCallbackMethod(callbackInstances, m_callbackRemoved,
reference, serviceInstance);
+ invokeCallbackMethod(callbackInstances, m_callbackRemoved,
reference, serviceInstance);
}
}
@@ -424,14 +423,7 @@
}
private synchronized Object[] getCallbackInstances() {
- Object[] callbackInstances = ((ServiceImpl)
m_service).getCompositionInstances();
- if (m_callbackInstance == null) {
- return callbackInstances;
- }
- Object[] res = new Object[callbackInstances.length + 1];
- res[0] = m_callbackInstance; //this could also be extended to an
array...?
- System.arraycopy(callbackInstances, 0, res, 1,
callbackInstances.length);
- return res;
+ return m_callbackInstance != null ? new Object[] { m_callbackInstance
} : ((ServiceImpl) m_service).getCompositionInstances();
}
private void invokeCallbackMethod(Object[] instances, String methodName,
ServiceReference reference, Object service) {
Modified:
felix/trunk/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceRegistrationImpl.java
URL:
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceRegistrationImpl.java?rev=880638&r1=880637&r2=880638&view=diff
==============================================================================
---
felix/trunk/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceRegistrationImpl.java
(original)
+++
felix/trunk/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceRegistrationImpl.java
Mon Nov 16 07:38:49 2009
@@ -31,7 +31,7 @@
*/
public final class ServiceRegistrationImpl implements ServiceRegistration {
public static final ServiceRegistrationImpl ILLEGAL_STATE = new
ServiceRegistrationImpl();
- private ServiceRegistration m_registration;
+ private volatile ServiceRegistration m_registration;
public ServiceRegistrationImpl() {
m_registration = null;