Author: darran.lofthouse(a)jboss.com
Date: 2009-05-15 07:43:42 -0400 (Fri, 15 May 2009)
New Revision: 10040
Modified:
stack/native/branches/jbossws-native-2.0.1.SP2_CP05_JBPAPP-2009/src/main/java/org/jboss/ws/metadata/umdm/EndpointMetaData.java
stack/native/branches/jbossws-native-2.0.1.SP2_CP05_JBPAPP-2009/version.properties
Log:
[JBPAPP-2009] Correct WeakReference handling in ConfigObservable to remove cleared
WeakReferences.
Modified:
stack/native/branches/jbossws-native-2.0.1.SP2_CP05_JBPAPP-2009/src/main/java/org/jboss/ws/metadata/umdm/EndpointMetaData.java
===================================================================
---
stack/native/branches/jbossws-native-2.0.1.SP2_CP05_JBPAPP-2009/src/main/java/org/jboss/ws/metadata/umdm/EndpointMetaData.java 2009-05-15
11:09:54 UTC (rev 10039)
+++
stack/native/branches/jbossws-native-2.0.1.SP2_CP05_JBPAPP-2009/src/main/java/org/jboss/ws/metadata/umdm/EndpointMetaData.java 2009-05-15
11:43:42 UTC (rev 10040)
@@ -21,8 +21,12 @@
*/
package org.jboss.ws.metadata.umdm;
+
// $Id$
+
+import java.lang.ref.Reference;
+import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -640,6 +644,7 @@
if (retParam != null)
createAccessor(retParam, jaxbCtx);
}
+
}
private void eagerInitializeJAXBContextCache()
@@ -843,6 +848,7 @@
class ConfigObservable extends Observable
{
+ private ReferenceQueue<WeakReference<Observer>> queue = new
ReferenceQueue<WeakReference<Observer>>();
private List<WeakReference<Observer>> observer = new
ArrayList<WeakReference<Observer>>();
public void doNotify(Object object)
@@ -853,15 +859,17 @@
public synchronized void addObserver(Observer o)
{
- observer.add(new WeakReference(o));
+ clearCollected();
+ observer.add(new WeakReference(o, queue));
}
public synchronized void deleteObserver(Observer o)
{
+ clearCollected();
for (WeakReference<Observer> w : observer)
{
Observer tmp = w.get();
- if (tmp.equals(o))
+ if (tmp != null && tmp.equals(o))
{
observer.remove(o);
break;
@@ -877,16 +885,29 @@
public void notifyObservers(Object arg)
{
+ clearCollected();
if (hasChanged())
{
for (WeakReference<Observer> w : observer)
{
Observer tmp = w.get();
- tmp.update(this, arg);
-
+ if (tmp != null)
+ {
+ tmp.update(this, arg);
+ }
}
}
}
+
+ private void clearCollected()
+ {
+ Reference ref;
+ while ((ref = queue.poll()) != null)
+ {
+ observer.remove(ref);
+ }
+
+ }
}
public List<UnifiedPortComponentRefMetaData> getServiceRefContrib()
Modified:
stack/native/branches/jbossws-native-2.0.1.SP2_CP05_JBPAPP-2009/version.properties
===================================================================
---
stack/native/branches/jbossws-native-2.0.1.SP2_CP05_JBPAPP-2009/version.properties 2009-05-15
11:09:54 UTC (rev 10039)
+++
stack/native/branches/jbossws-native-2.0.1.SP2_CP05_JBPAPP-2009/version.properties 2009-05-15
11:43:42 UTC (rev 10040)
@@ -5,8 +5,8 @@
specification.vendor=JBoss (
http://www.jboss.org)
specification.version=jbossws-2.0
-version.id=2.0.1.SP2_CP05
-repository.id=2.0.1.SP2_CP05
+version.id=2.0.1.SP2_CP05_JBPAPP-2009
+repository.id=2.0.1.SP2_CP05_JBPAPP-2009
implementation.title=JBoss Web Services - Native
implementation.url=http://www.jboss.org/products/jbossws