You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2009/08/20 23:14:09 UTC
svn commit: r806359 - in
/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container:
AbstractServiceReferenceRecipe.java ReferenceListRecipe.java
ReferenceRecipe.java
Author: gawor
Date: Thu Aug 20 21:14:08 2009
New Revision: 806359
URL: http://svn.apache.org/viewvc?rev=806359&view=rev
Log:
call unbind with null service object if service reference is unsatisfied during activation
Modified:
geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java
geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceListRecipe.java
geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceRecipe.java
Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java?rev=806359&r1=806358&r2=806359&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java Thu Aug 20 21:14:08 2009
@@ -82,7 +82,6 @@
protected final String filter;
/** The list of listeners for this reference. This list will be lazy created */
protected List<Listener> listeners;
- protected boolean listenersCreated = true;
private final List<ServiceReference> references = new ArrayList<ServiceReference>();
private final AtomicBoolean started = new AtomicBoolean();
@@ -333,6 +332,34 @@
protected abstract void retrack();
+ protected void updateListeners() {
+ if (references.isEmpty()) {
+ unbind(null, null);
+ } else {
+ retrack();
+ }
+ }
+
+ protected void bind(ServiceReference reference, Object service) {
+ if (listeners != null) {
+ for (Listener listener : listeners) {
+ if (listener != null) {
+ listener.bind(reference, service);
+ }
+ }
+ }
+ }
+
+ protected void unbind(ServiceReference reference, Object service) {
+ if (listeners != null) {
+ for (Listener listener : listeners) {
+ if (listener != null) {
+ listener.unbind(reference, service);
+ }
+ }
+ }
+ }
+
public List<ServiceReference> getServiceReferences() {
synchronized (references) {
return new ArrayList<ServiceReference>(references);
Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceListRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceListRecipe.java?rev=806359&r1=806358&r2=806359&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceListRecipe.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceListRecipe.java Thu Aug 20 21:14:08 2009
@@ -78,7 +78,8 @@
addPartialObject(object);
// Handle initial references
createListeners();
- retrack();
+ updateListeners();
+
return object;
} catch (ComponentDefinitionException t) {
throw t;
@@ -133,11 +134,7 @@
}
}
if (listeners != null) {
- for (Listener listener : listeners) {
- if (listener != null) {
- listener.bind(dispatcher.reference, dispatcher.proxy);
- }
- }
+ bind(dispatcher.reference, dispatcher.proxy);
} else {
unboundDispatchers.add(dispatcher);
}
@@ -151,13 +148,7 @@
if (storage != null) {
ServiceDispatcher dispatcher = findDispatcher(reference);
if (dispatcher != null) {
- if (listeners != null) {
- for (Listener listener : listeners) {
- if (listener != null) {
- listener.unbind(dispatcher.reference, dispatcher.proxy);
- }
- }
- }
+ unbind(dispatcher.reference, dispatcher.proxy);
storage.remove(dispatcher);
dispatcher.destroy();
}
Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceRecipe.java?rev=806359&r1=806358&r2=806359&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceRecipe.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceRecipe.java Thu Aug 20 21:14:08 2009
@@ -88,7 +88,7 @@
// Handle initial references
createListeners();
- retrack();
+ updateListeners();
// Return a ServiceProxy that can injection of references or proxies can be done correctly
return wrapper;
@@ -144,12 +144,7 @@
trackedServiceReference = ref;
trackedService = null;
monitor.notifyAll();
- if (listeners != null) {
- for (Listener listener : listeners) {
- listener.bind(trackedServiceReference, proxy);
- }
- listenersCreated = false;
- }
+ bind(trackedServiceReference, proxy);
}
}
@@ -157,23 +152,11 @@
LOGGER.debug("Unbinding reference {}", getName());
synchronized (monitor) {
if (trackedServiceReference != null) {
- if (listeners != null) {
- for (Listener listener : listeners) {
- listener.unbind(trackedServiceReference, proxy);
- }
- listenersCreated = false;
- }
+ unbind(trackedServiceReference, proxy);
blueprintContainer.getBundleContext().ungetService(trackedServiceReference);
trackedServiceReference = null;
trackedService = null;
monitor.notifyAll();
- } else if (listenersCreated) {
- if (listeners != null) {
- for (Listener listener : listeners) {
-// listener.unbind(null, null);
- }
- listenersCreated = false;
- }
}
}
}