summaryrefslogtreecommitdiff
path: root/java/management/eclipse-plugin/src
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2010-08-27 20:25:28 +0000
committerRobert Gemmell <robbie@apache.org>2010-08-27 20:25:28 +0000
commitb16bd3f6e83152eace352a47e78424db8df4171e (patch)
tree24adb9ab36092a9336fa0fc11111aab4e86c2c5d /java/management/eclipse-plugin/src
parentd89ed290d19f7515661ae1bd2dab6f1857e31182 (diff)
downloadqpid-python-b16bd3f6e83152eace352a47e78424db8df4171e.tar.gz
QPID-2788: synchronize the concurrently accessed arraylists. Return new instances of the lists to prevent extended synchronized iterations during view updates from delaying the notification threads
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@990253 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/management/eclipse-plugin/src')
-rw-r--r--java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java47
1 files changed, 38 insertions, 9 deletions
diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
index 027a555360..fc17538cf9 100644
--- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
+++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
@@ -32,6 +32,8 @@ import org.apache.qpid.management.ui.model.ManagedAttributeModel;
import org.apache.qpid.management.ui.model.NotificationObject;
import org.apache.qpid.management.ui.model.OperationDataModel;
+import java.util.Collections;
+
public abstract class ServerRegistry
{
private ManagedServer _managedServer = null;
@@ -95,22 +97,34 @@ public abstract class ServerRegistry
protected void addConnectionMBean(ManagedBean mbean)
{
String vHost = mbean.getVirtualHostName();
- _connections.putIfAbsent(vHost, new ArrayList<ManagedBean>());
- _connections.get(vHost).add(mbean);
+ List<ManagedBean> vhostConnections = getVhostSubList(vHost, _connections);
+ vhostConnections.add(mbean);
}
protected void addExchangeMBean(ManagedBean mbean)
{
String vHost = mbean.getVirtualHostName();
- _exchanges.putIfAbsent(vHost, new ArrayList<ManagedBean>());
- _exchanges.get(vHost).add(mbean);
+ List<ManagedBean> vhostExchanges = getVhostSubList(vHost, _exchanges);
+ vhostExchanges.add(mbean);
}
protected void addQueueMBean(ManagedBean mbean)
{
String vHost = mbean.getVirtualHostName();
- _queues.putIfAbsent(vHost, new ArrayList<ManagedBean>());
- _queues.get(vHost).add(mbean);
+ List<ManagedBean> vhostQueues = getVhostSubList(vHost, _queues);
+ vhostQueues.add(mbean);
+ }
+
+ private List<ManagedBean> getVhostSubList(String vHost, ConcurrentMap<String,List<ManagedBean>> parentList)
+ {
+ //add an empty sublist for the vhost if required
+ if (!parentList.containsKey(vHost))
+ {
+ List<ManagedBean> subList = Collections.synchronizedList(new ArrayList<ManagedBean>());
+ parentList.putIfAbsent(vHost, subList);
+ }
+
+ return parentList.get(vHost);
}
protected void addVirtualHostManagerMBean(ManagedBean mbean)
@@ -146,17 +160,32 @@ public abstract class ServerRegistry
public List<ManagedBean> getConnections(String virtualHost)
{
- return _connections.get(virtualHost);
+ return getVhostObjects(virtualHost, _connections);
}
public List<ManagedBean> getExchanges(String virtualHost)
{
- return _exchanges.get(virtualHost);
+ return getVhostObjects(virtualHost, _exchanges);
}
public List<ManagedBean> getQueues(String virtualHost)
{
- return _queues.get(virtualHost);
+ return getVhostObjects(virtualHost, _queues);
+ }
+
+ public List<ManagedBean> getVhostObjects(String virtualHost, ConcurrentMap<String,List<ManagedBean>> parentList)
+ {
+ List<ManagedBean> objects = parentList.get(virtualHost);
+
+ if(objects == null)
+ {
+ return new ArrayList<ManagedBean>();
+ }
+
+ synchronized (objects)
+ {
+ return new ArrayList<ManagedBean>(objects);
+ }
}
//returns the requested ManagedBean, or null if it cant be found