summaryrefslogtreecommitdiff
path: root/qpid/java/management/eclipse-plugin
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/management/eclipse-plugin')
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java41
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java13
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java4
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java8
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java10
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java23
6 files changed, 89 insertions, 10 deletions
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java
index 1f288a6390..0f5f5267fd 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java
@@ -21,9 +21,8 @@
package org.apache.qpid.management.ui;
import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import org.eclipse.jface.resource.FontRegistry;
@@ -91,9 +90,8 @@ public abstract class ApplicationRegistry
/*
* This maps all the managed servers to the respective server registry.
- * Server can be JMX MBeanServer or a C++ server
*/
- private static HashMap<ManagedServer, ServerRegistry> _serverRegistryMap = new HashMap<ManagedServer, ServerRegistry>();
+ private static ConcurrentHashMap<ManagedServer, ServerRegistry> _serverRegistryMap = new ConcurrentHashMap<ManagedServer, ServerRegistry>();
// This map gets updated when a server connection closes.
private static List<ManagedServer> _closedServerList = new CopyOnWriteArrayList<ManagedServer>();
@@ -131,7 +129,19 @@ public abstract class ApplicationRegistry
public static boolean isServerConnected(ManagedServer server)
{
- return _serverRegistryMap.containsKey(server);
+ if(server == null)
+ {
+ //checking for null is not permitted in a CHM
+ return false;
+ }
+
+ ServerRegistry reg = _serverRegistryMap.get(server);
+ if(reg !=null)
+ {
+ return !reg.isServerConnectionClosed();
+ }
+
+ return false;
}
// remove the server from the registry
@@ -141,6 +151,27 @@ public abstract class ApplicationRegistry
removeServer(server);
}
+ // remove the server from the registry
+ public static void serverConnectionClosedRemotely(ManagedServer server)
+ {
+ ServerRegistry reg = _serverRegistryMap.get(server);
+ if(reg !=null)
+ {
+ synchronized(server)
+ {
+ if(reg.isServerConnectionClosed())
+ {
+ //the connection closure was already processed
+ return;
+ }
+
+ reg.serverConnectionClosed();
+ }
+ }
+
+ serverConnectionClosed(server);
+ }
+
/*
* Returns the lis of closed servers. The Thread in GUI, which keeps checking for closed connection
* will check this and will remove the server links from the GUI.
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
index 6c0b51e584..027a555360 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.qpid.management.ui.jmx.ClientListener;
import org.apache.qpid.management.ui.model.ManagedAttributeModel;
@@ -49,6 +50,8 @@ public abstract class ServerRegistry
// map of all virtual host manager mbeans
private ConcurrentMap<String,ManagedBean> _vhostManagers = new ConcurrentHashMap<String,ManagedBean>();
+ private AtomicBoolean _serverConnectionClosed = new AtomicBoolean(false);
+
public ServerRegistry()
{
@@ -59,6 +62,16 @@ public abstract class ServerRegistry
_managedServer = server;
}
+ public void serverConnectionClosed()
+ {
+ _serverConnectionClosed.set(true);
+ }
+
+ public boolean isServerConnectionClosed()
+ {
+ return _serverConnectionClosed.get();
+ }
+
public void setManagementApiVersion(ApiVersion mgmtApiVersion)
{
_managementApiVersion = mgmtApiVersion;
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java
index d88e0f38bb..694f7ba86b 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java
@@ -58,12 +58,12 @@ public class ClientListener implements NotificationListener
}
else if (JMXConnectionNotification.FAILED.equals(type))
{
- ApplicationRegistry.serverConnectionClosed(server);
+ ApplicationRegistry.serverConnectionClosedRemotely(server);
MBeanUtility.printOutput("JMX Connection to " + server.getName() + " failed.");
}
else if (JMXConnectionNotification.CLOSED.equals(type))
{
- ApplicationRegistry.serverConnectionClosed(server);
+ ApplicationRegistry.serverConnectionClosedRemotely(server);
MBeanUtility.printOutput("JMX Connection to " + server.getName() + " was closed.");
}
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
index ca07e6acf4..717f781334 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
@@ -118,6 +118,12 @@ public class JMXServerRegistry extends ServerRegistry
*/
public void closeServerConnection() throws IOException
{
+ if(isServerConnectionClosed())
+ {
+ //connection was already closed
+ return;
+ }
+
try
{
//remove the listener from the JMXConnector
@@ -165,6 +171,8 @@ public class JMXServerRegistry extends ServerRegistry
{
_jmxc.close();
}
+
+ serverConnectionClosed();
}
public ManagedBean getManagedObject(String uniqueName)
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
index ffb601fdca..9763c799d7 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
@@ -110,6 +110,11 @@ public class MBeanView extends ViewPart
setServer();
+ if(!ApplicationRegistry.isServerConnected(_server))
+ {
+ return;
+ }
+
if (MBEAN.equals(_selectedNode.getType()))
{
_mbean = (ManagedBean)_selectedNode.getManagedObject();
@@ -488,6 +493,11 @@ public class MBeanView extends ViewPart
public void refresh()
{
+ if(!ApplicationRegistry.isServerConnected(_server))
+ {
+ return;
+ }
+
if (_tabFolder != null && !_tabFolder.isDisposed())
{
if(_tabFolder.getVisible())
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
index 056d365f8e..1ca6c2b71d 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
@@ -29,6 +29,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.qpid.management.common.mbeans.ConfigurationManagement;
import org.apache.qpid.management.common.mbeans.LoggingManagement;
@@ -95,7 +96,7 @@ public class NavigationView extends ViewPart
private PreferenceStore _preferences;
// Map of connected servers
- private HashMap<ManagedServer, TreeObject> _managedServerMap = new HashMap<ManagedServer, TreeObject>();
+ private ConcurrentHashMap<ManagedServer, TreeObject> _managedServerMap = new ConcurrentHashMap<ManagedServer, TreeObject>();
private static HashSet<String> _serverTopLevelMBeans = new HashSet<String>();
{
@@ -719,6 +720,11 @@ public class NavigationView extends ViewPart
*/
private void removeManagedObject(TreeObject parent)
{
+ if(parent == null)
+ {
+ return;
+ }
+
List<TreeObject> list = parent.getChildren();
for (TreeObject child : list)
{
@@ -1263,7 +1269,7 @@ public class NavigationView extends ViewPart
try
{
- Thread.sleep(3000);
+ Thread.sleep(2000);
}
catch (Exception ex)
{ }
@@ -1340,7 +1346,18 @@ public class NavigationView extends ViewPart
{
for (ManagedServer server : closedServers)
{
- removeManagedObject(_managedServerMap.get(server));
+ if(server == null)
+ {
+ continue;
+ }
+
+ TreeObject node = _managedServerMap.get(server);
+ if(node ==null)
+ {
+ continue;
+ }
+
+ removeManagedObject(node);
_managedServerMap.remove(server);
ApplicationRegistry.removeServer(server);
}