Author: robbie
Date: Wed Nov 11 12:23:02 2009
New Revision: 834848

URL: http://svn.apache.org/viewvc?rev=834848&view=rev
Log:
QPID-2196: updated application and server registries to better keep track of 
the connection status, allowing prevention of JMXConnector usage (eg refreshing 
the view) after the connection has already been closed remotely.

Modified:
    
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java
    
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
    
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java
    
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
    
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
    
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java

Modified: 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java?rev=834848&r1=834847&r2=834848&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java
 (original)
+++ 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java
 Wed Nov 11 12:23:02 2009
@@ -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 @@
     
     /*
      * 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 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 @@
         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.

Modified: 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java?rev=834848&r1=834847&r2=834848&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
 (original)
+++ 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
 Wed Nov 11 12:23:02 2009
@@ -25,6 +25,7 @@
 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 @@
     // 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 @@
         _managedServer = server;
     }
     
+    public void serverConnectionClosed()
+    {
+        _serverConnectionClosed.set(true);
+    }
+    
+    public boolean isServerConnectionClosed()
+    {
+        return _serverConnectionClosed.get();
+    }
+    
     public void setManagementApiVersion(ApiVersion mgmtApiVersion)
     {
         _managementApiVersion = mgmtApiVersion;  

Modified: 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java?rev=834848&r1=834847&r2=834848&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java
 (original)
+++ 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java
 Wed Nov 11 12:23:02 2009
@@ -58,12 +58,12 @@
         }
         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.");
         }
     }

Modified: 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java?rev=834848&r1=834847&r2=834848&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
 (original)
+++ 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
 Wed Nov 11 12:23:02 2009
@@ -118,6 +118,12 @@
      */
     public void closeServerConnection() throws IOException
     {
+        if(isServerConnectionClosed())
+        {
+            //connection was already closed
+            return;
+        }
+        
         try
         {
             //remove the listener from the JMXConnector
@@ -165,6 +171,8 @@
         {
             _jmxc.close();
         }
+        
+        serverConnectionClosed();
     }
     
     public ManagedBean getManagedObject(String uniqueName)

Modified: 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java?rev=834848&r1=834847&r2=834848&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
 (original)
+++ 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
 Wed Nov 11 12:23:02 2009
@@ -110,6 +110,11 @@
             
             setServer();
             
+            if(!ApplicationRegistry.isServerConnected(_server))
+            {
+                return;
+            }
+            
             if (MBEAN.equals(_selectedNode.getType()))
             {
                 _mbean = (ManagedBean)_selectedNode.getManagedObject();
@@ -488,6 +493,11 @@
     
     public void refresh()
     {
+        if(!ApplicationRegistry.isServerConnected(_server))
+        {
+            return;
+        }
+        
         if (_tabFolder != null && !_tabFolder.isDisposed())
         {
             if(_tabFolder.getVisible())

Modified: 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java?rev=834848&r1=834847&r2=834848&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
 (original)
+++ 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
 Wed Nov 11 12:23:02 2009
@@ -29,6 +29,7 @@
 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 @@
 
     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 @@
      */
     private void removeManagedObject(TreeObject parent)
     {
+        if(parent == null)
+        {
+           return;
+        }
+        
         List<TreeObject> list = parent.getChildren();
         for (TreeObject child : list)
         {
@@ -1263,7 +1269,7 @@
 
                 try
                 {
-                    Thread.sleep(3000);
+                    Thread.sleep(2000);
                 }
                 catch (Exception ex)
                 { }
@@ -1340,7 +1346,18 @@
                     {
                         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);
                         }



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscr...@qpid.apache.org

Reply via email to