You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2009/11/11 13:23:36 UTC

svn commit: r834850 - in /qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui: ./ jmx/ views/

Author: robbie
Date: Wed Nov 11 12:23:35 2009
New Revision: 834850

URL: http://svn.apache.org/viewvc?rev=834850&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/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java
    qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
    qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java
    qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
    qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
    qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java

Modified: qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java?rev=834850&r1=834849&r2=834850&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java (original)
+++ qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ApplicationRegistry.java Wed Nov 11 12:23:35 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/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java?rev=834850&r1=834849&r2=834850&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java (original)
+++ qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java Wed Nov 11 12:23:35 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/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java?rev=834850&r1=834849&r2=834850&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java (original)
+++ qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java Wed Nov 11 12:23:35 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/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java?rev=834850&r1=834849&r2=834850&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java (original)
+++ qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java Wed Nov 11 12:23:35 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/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java?rev=834850&r1=834849&r2=834850&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java (original)
+++ qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java Wed Nov 11 12:23:35 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/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
URL: http://svn.apache.org/viewvc/qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java?rev=834850&r1=834849&r2=834850&view=diff
==============================================================================
--- qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java (original)
+++ qpid/branches/0.5.x-dev/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java Wed Nov 11 12:23:35 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-subscribe@qpid.apache.org