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 2010/08/27 22:25:11 UTC

svn commit: r990252 - /qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java

Author: robbie
Date: Fri Aug 27 20:25:11 2010
New Revision: 990252

URL: http://svn.apache.org/viewvc?rev=990252&view=rev
Log:
QPID-2615: Remove use of the Java6 ObjectName '?' wildcard used to avoid security restrictions on the UserManagement MBean when identifying the management api version of older brokers

Modified:
    qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java

Modified: qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java?rev=990252&r1=990251&r2=990252&view=diff
==============================================================================
--- qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java (original)
+++ qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java Fri Aug 27 20:25:11 2010
@@ -47,6 +47,7 @@ import javax.management.ReflectionExcept
 import org.apache.qpid.management.common.mbeans.ServerInformation;
 import org.apache.qpid.management.ui.ApiVersion;
 import org.apache.qpid.management.ui.ApplicationRegistry;
+import org.apache.qpid.management.ui.Constants;
 import org.apache.qpid.management.ui.ManagedBean;
 import org.apache.qpid.management.ui.ManagedServer;
 import org.apache.qpid.management.ui.exceptions.ManagementConsoleException;
@@ -502,10 +503,20 @@ public class MBeanUtility
      * Retrieves all the MBeans from mbean server for a given domain
      * @return list of ManagedBeans
      */
-    public static List<ManagedBean> getManagedObjectsForDomain(ManagedServer server, String domain) throws Exception
+    public static List<ManagedBean> getManagedObjectsForDomain(ManagedServer server, String domain) throws MalformedObjectNameException, NullPointerException, IOException
     {
-        List<ManagedBean> mbeans = new ArrayList<ManagedBean>();
         JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server);
+        return getManagedObjectsForDomain(server,serverRegistry, domain);
+    }
+
+    /**
+     * Retrieves all the MBeans from mbean server for a given domain
+     * @return list of ManagedBeans
+     */
+    public static List<ManagedBean> getManagedObjectsForDomain(ManagedServer server, JMXServerRegistry serverRegistry, String domain) throws MalformedObjectNameException, NullPointerException, IOException
+    {
+        List<ManagedBean> mbeans = new ArrayList<ManagedBean>();
+
         MBeanServerConnection mbsc = serverRegistry.getServerConnection();
         ObjectName objName = new ObjectName(domain + ":*"); 
         Set objectInstances = mbsc.queryMBeans(objName, null);
@@ -559,32 +570,35 @@ public class MBeanUtility
         
         //Detect the value of the 'version' key property on the UserManagement MBean ObjectName.
         //If present, we have a v1.2 API server. If null, we have a v1.1 API server.
-        //Use an ObjectName pattern (the ?) to match the 'type' and allow this to work for non-admin users
-        objName = new ObjectName(server.getDomain() + ":type="+ "UserManagemen?" + ",*");
-        objectInstances = mbsc.queryNames(objName, null);
-        
-        if(objectInstances.size() != 0)
+        ObjectName umMBeanObjectName = null;
+        List<ManagedBean> mbeans = getManagedObjectsForDomain(server, serverRegistry, Constants.DEFAULT_DOMAIN);
+        for(ManagedBean mbean: mbeans)
         {
-            for (Iterator<ObjectName> itr = objectInstances.iterator(); itr.hasNext();)
+            if("UserManagement".equalsIgnoreCase(mbean.getType()))
             {
-                ObjectName instance = (ObjectName)itr.next();
-                String version = instance.getKeyProperty("version");
-                
-                if(version != null)
-                {
-                    serverRegistry.setManagementApiVersion(new ApiVersion(1, 2));
-                }
-                else
-                {
-                    serverRegistry.setManagementApiVersion(new ApiVersion(1, 1));
-                }
+                umMBeanObjectName = ((JMXManagedObject) mbean).getObjectName();
+                break;
             }
         }
-        else
+        
+        if(umMBeanObjectName != null)
         {
-            //UserManagement MBean wasnt present, connected to an old server: classify as v1.0 API
-            serverRegistry.setManagementApiVersion(new ApiVersion(1, 0));
+            //UserManagement MBean was present, determine if it has a version key
+            if(umMBeanObjectName.getKeyProperty("version") != null)
+            {
+                serverRegistry.setManagementApiVersion(new ApiVersion(1, 2));
+            }
+            else
+            {
+                //no version key, 
+                serverRegistry.setManagementApiVersion(new ApiVersion(1, 1));
+            }
+            
+            return;
         }
+
+        //UserManagement MBean was not present, connected to an old server: classify as v1.0 API
+        serverRegistry.setManagementApiVersion(new ApiVersion(1, 0));
     }
     
     public static void printOutput(String statement)



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