This is an automated email from the ASF dual-hosted git repository.

tabish pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/artemis.git

commit cc641e48a01a53987bbb2f3c60869d581271272f
Author: Andy Taylor <[email protected]>
AuthorDate: Wed Dec 3 11:21:57 2025 +0000

    ARTEMIS-5893 optimize ManagementService
---
 .../jms/server/impl/JMSServerManagerImpl.java      |   2 +-
 .../bridge/AMQPBridgeManagementSupport.java        |  25 +-
 .../AMQPFederationManagementSupport.java           |  56 +--
 .../management/impl/ActiveMQServerControlImpl.java |  54 ++-
 .../remoting/server/impl/RemotingServiceImpl.java  |   6 +-
 .../core/server/management/ManagementService.java  |  31 +-
 .../server/management/impl/ControlRegistries.java  | 384 +++++++++++++++++++++
 .../management/impl/ManagementServiceImpl.java     | 154 +++++----
 .../server/group/impl/ClusteredResetMockTest.java  |  61 +++-
 .../src/main/resources/metrics/queueMetrics.groovy |  11 +-
 .../connect/AMQPFederationServerToServerTest.java  |   9 +-
 .../integration/cluster/bridge/BridgeTest.java     |   5 +-
 .../management/ManagementServiceImplTest.java      |  18 +-
 .../integration/openwire/AdvisoryOpenWireTest.java |   9 +-
 14 files changed, 645 insertions(+), 180 deletions(-)

diff --git 
a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
 
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
index 115f194a6a..9f09218377 100644
--- 
a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
+++ 
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
@@ -783,7 +783,7 @@ public class JMSServerManagerImpl extends 
CleaningActivateCallback implements JM
    @Override
    public synchronized boolean destroyTopic(final String name, final boolean 
removeConsumers) throws Exception {
       checkInitialised();
-      AddressControl addressControl = (AddressControl) 
server.getManagementService().getResource(ResourceNames.ADDRESS + name);
+      AddressControl addressControl = 
server.getManagementService().getAddressControl(ResourceNames.ADDRESS + name);
       if (addressControl != null) {
          for (String queueName : addressControl.getAllQueueNames()) {
             Binding binding = 
server.getPostOffice().getBinding(SimpleString.of(queueName));
diff --git 
a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/bridge/AMQPBridgeManagementSupport.java
 
b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/bridge/AMQPBridgeManagementSupport.java
index 9b8344a50d..ff2353483e 100644
--- 
a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/bridge/AMQPBridgeManagementSupport.java
+++ 
b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/bridge/AMQPBridgeManagementSupport.java
@@ -109,8 +109,9 @@ public final class AMQPBridgeManagementSupport {
       final ManagementService management = server.getManagementService();
       final AMQPBridgeManagerControlType control = new 
AMQPBridgeManagerControlType(server, bridge);
 
+
       management.registerInJMX(getBridgeManagerObjectName(management, 
brokerConnectionName, bridgeName), control);
-      
management.registerInRegistry(getBridgeManagerResourceName(brokerConnectionName,
 bridgeName), control);
+      
management.registerAMQPControl(getBridgeManagerResourceName(brokerConnectionName,
 bridgeName), control);
    }
 
    /**
@@ -128,7 +129,7 @@ public final class AMQPBridgeManagementSupport {
       final ManagementService management = server.getManagementService();
 
       management.unregisterFromJMX(getBridgeManagerObjectName(management, 
brokerConnectionName, bridgeName));
-      
management.unregisterFromRegistry(getBridgeManagerResourceName(brokerConnectionName,
 bridgeName));
+      
management.unRegisterAMQPControl(getBridgeManagerResourceName(brokerConnectionName,
 bridgeName));
    }
 
    public static String getBridgeManagerResourceName(String 
brokerConnectionName, String bridgeName) {
@@ -160,7 +161,7 @@ public final class AMQPBridgeManagementSupport {
       final String policyName = manager.getPolicyName();
 
       management.registerInJMX(getBridgePolicyManagerObjectName(management, 
brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 
policyName), control);
-      
management.registerInRegistry(getBridgePolicyManagerResourceName(brokerConnectionName,
 bridgeName, policyName), control);
+      
management.registerAMQPControl(getBridgePolicyManagerResourceName(brokerConnectionName,
 bridgeName, policyName), control);
    }
 
    /**
@@ -180,7 +181,7 @@ public final class AMQPBridgeManagementSupport {
       final String policyName = manager.getPolicyName();
 
       
management.unregisterFromJMX(getBridgePolicyManagerObjectName(management, 
brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 
policyName));
-      
management.unregisterFromRegistry(getBridgePolicyManagerResourceName(brokerConnectionName,
 bridgeName, policyName));
+      
management.unRegisterAMQPControl(getBridgePolicyManagerResourceName(brokerConnectionName,
 bridgeName, policyName));
    }
 
    public static String getBridgePolicyManagerResourceName(String 
brokerConnectionName, String bridgeName, String policyName) {
@@ -216,10 +217,10 @@ public final class AMQPBridgeManagementSupport {
 
       if (receiver.getRole() == ReceiverRole.ADDRESS_RECEIVER) {
          
management.registerInJMX(getBridgeAddressReceiverObjectName(management, 
brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 
policyName, receiver.getReceiverInfo().getLocalAddress()), control);
-         
management.registerInRegistry(getBridgeAddressReceiverResourceName(brokerConnectionName,
 bridgeName, policyName, receiver.getReceiverInfo().getLocalAddress()), 
control);
+         
management.registerAMQPControl(getBridgeAddressReceiverResourceName(brokerConnectionName,
 bridgeName, policyName, receiver.getReceiverInfo().getLocalAddress()), 
control);
       } else {
          management.registerInJMX(getBridgeQueueReceiverObjectName(management, 
brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 
policyName, receiver.getReceiverInfo().getLocalFqqn()), control);
-         
management.registerInRegistry(getBridgeQueueReceiverResourceName(brokerConnectionName,
 bridgeName, policyName, receiver.getReceiverInfo().getLocalFqqn()), control);
+         
management.registerAMQPControl(getBridgeQueueReceiverResourceName(brokerConnectionName,
 bridgeName, policyName, receiver.getReceiverInfo().getLocalFqqn()), control);
       }
    }
 
@@ -242,10 +243,10 @@ public final class AMQPBridgeManagementSupport {
 
       if (receiver.getRole() == ReceiverRole.ADDRESS_RECEIVER) {
          
management.unregisterFromJMX(getBridgeAddressReceiverObjectName(management, 
brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 
policyName, receiver.getReceiverInfo().getLocalAddress()));
-         
management.unregisterFromRegistry(getBridgeAddressReceiverResourceName(brokerConnectionName,
 bridgeName, policyName, receiver.getReceiverInfo().getLocalAddress()));
+         
management.unRegisterAMQPControl(getBridgeAddressReceiverResourceName(brokerConnectionName,
 bridgeName, policyName, receiver.getReceiverInfo().getLocalAddress()));
       } else {
          
management.unregisterFromJMX(getBridgeQueueReceiverObjectName(management, 
brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 
policyName, receiver.getReceiverInfo().getLocalFqqn()));
-         
management.unregisterFromRegistry(getBridgeQueueReceiverResourceName(brokerConnectionName,
 bridgeName, policyName, receiver.getReceiverInfo().getLocalFqqn()));
+         
management.unRegisterAMQPControl(getBridgeQueueReceiverResourceName(brokerConnectionName,
 bridgeName, policyName, receiver.getReceiverInfo().getLocalFqqn()));
       }
    }
 
@@ -299,12 +300,12 @@ public final class AMQPBridgeManagementSupport {
          final String address = control.getAddress();
 
          management.registerInJMX(getBridgeAddressSenderObjectName(management, 
brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 
policyName, address), control);
-         
management.registerInRegistry(getBridgeAddressSenderResourceName(brokerConnectionName,
 bridgeName, policyName, address), control);
+         
management.registerAMQPControl(getBridgeAddressSenderResourceName(brokerConnectionName,
 bridgeName, policyName, address), control);
       } else {
          final String fqqn = control.getFqqn();
 
          management.registerInJMX(getBridgeQueueSenderObjectName(management, 
brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 
policyName, fqqn), control);
-         
management.registerInRegistry(getBridgeQueueSenderResourceName(brokerConnectionName,
 bridgeName, policyName, fqqn), control);
+         
management.registerAMQPControl(getBridgeQueueSenderResourceName(brokerConnectionName,
 bridgeName, policyName, fqqn), control);
       }
    }
 
@@ -329,12 +330,12 @@ public final class AMQPBridgeManagementSupport {
          final String address = 
sender.getServerConsumer().getQueueAddress().toString();
 
          
management.unregisterFromJMX(getBridgeAddressSenderObjectName(management, 
brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 
policyName, address));
-         
management.unregisterFromRegistry(getBridgeAddressSenderResourceName(brokerConnectionName,
 bridgeName, policyName, address));
+         
management.unRegisterAMQPControl(getBridgeAddressSenderResourceName(brokerConnectionName,
 bridgeName, policyName, address));
       } else {
          final String fqqn = 
CompositeAddress.toFullyQualified(sender.getServerConsumer().getQueueAddress().toString(),
 sender.getServerConsumer().getQueueName().toString());
 
          
management.unregisterFromJMX(getBridgeQueueSenderObjectName(management, 
brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 
policyName, fqqn));
-         
management.unregisterFromRegistry(getBridgeQueueSenderResourceName(brokerConnectionName,
 bridgeName, policyName, fqqn));
+         
management.unRegisterAMQPControl(getBridgeQueueSenderResourceName(brokerConnectionName,
 bridgeName, policyName, fqqn));
       }
    }
 
diff --git 
a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationManagementSupport.java
 
b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationManagementSupport.java
index 6413182f3c..a59f9161a7 100644
--- 
a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationManagementSupport.java
+++ 
b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/connect/federation/AMQPFederationManagementSupport.java
@@ -136,7 +136,7 @@ public abstract class AMQPFederationManagementSupport {
       final AMQPFederationSourceControlType control = new 
AMQPFederationSourceControlType(server, federation);
 
       management.registerInJMX(getFederationSourceObjectName(management, 
brokerConnectionName, federationName), control);
-      
management.registerInRegistry(getFederationSourceResourceName(brokerConnectionName,
 federationName), control);
+      
management.registerAMQPControl(getFederationSourceResourceName(brokerConnectionName,
 federationName), control);
    }
 
    /**
@@ -152,7 +152,7 @@ public abstract class AMQPFederationManagementSupport {
       final ManagementService management = server.getManagementService();
 
       management.unregisterFromJMX(getFederationSourceObjectName(management, 
brokerConnectionName, federationName));
-      
management.unregisterFromRegistry(getFederationSourceResourceName(brokerConnectionName,
 federationName));
+      
management.unRegisterAMQPControl(getFederationSourceResourceName(brokerConnectionName,
 federationName));
    }
 
    public static String getFederationSourceResourceName(String 
brokerConnectionName, String federationName) {
@@ -179,7 +179,7 @@ public abstract class AMQPFederationManagementSupport {
       final AMQPFederationTargetControlType control = new 
AMQPFederationTargetControlType(server, federation);
 
       management.registerInJMX(getFederationTargetObjectName(management, 
remoteNodeId, brokerConnectionName, federationName), control);
-      
management.registerInRegistry(getFederationTargetResourceName(remoteNodeId, 
brokerConnectionName, federationName), control);
+      
management.registerAMQPControl(getFederationTargetResourceName(remoteNodeId, 
brokerConnectionName, federationName), control);
    }
 
    /**
@@ -194,7 +194,7 @@ public abstract class AMQPFederationManagementSupport {
       final ManagementService management = server.getManagementService();
 
       management.unregisterFromJMX(getFederationTargetObjectName(management, 
remoteNodeId, brokerConnectionName, federationName));
-      
management.unregisterFromRegistry(getFederationTargetResourceName(remoteNodeId, 
brokerConnectionName, federationName));
+      
management.unRegisterAMQPControl(getFederationTargetResourceName(remoteNodeId, 
brokerConnectionName, federationName));
    }
 
    public static String getFederationTargetResourceName(String remoteNodeId, 
String brokerConnectionName, String federationName) {
@@ -226,7 +226,7 @@ public abstract class AMQPFederationManagementSupport {
       final String policyName = manager.getPolicyName();
 
       management.registerInJMX(getFederationSourcePolicyObjectName(management, 
brokerConnectionName, federationName, manager.getPolicyType().toString(), 
policyName), control);
-      
management.registerInRegistry(getFederationSourcePolicyResourceName(brokerConnectionName,
 federationName, policyName), control);
+      
management.registerAMQPControl(getFederationSourcePolicyResourceName(brokerConnectionName,
 federationName, policyName), control);
    }
 
    /**
@@ -244,7 +244,7 @@ public abstract class AMQPFederationManagementSupport {
       final String policyName = manager.getPolicyName();
 
       
management.unregisterFromJMX(getFederationSourcePolicyObjectName(management, 
brokerConnectionName, federationName, manager.getPolicyType().toString(), 
policyName));
-      
management.unregisterFromRegistry(getFederationSourcePolicyResourceName(brokerConnectionName,
 federationName, policyName));
+      
management.unRegisterAMQPControl(getFederationSourcePolicyResourceName(brokerConnectionName,
 federationName, policyName));
    }
 
    /**
@@ -263,7 +263,7 @@ public abstract class AMQPFederationManagementSupport {
       final String policyName = manager.getPolicyName();
 
       management.registerInJMX(getFederationSourcePolicyObjectName(management, 
brokerConnectionName, federationName, manager.getPolicyType().toString(), 
policyName), control);
-      
management.registerInRegistry(getFederationSourcePolicyResourceName(brokerConnectionName,
 federationName, policyName), control);
+      
management.registerAMQPControl(getFederationSourcePolicyResourceName(brokerConnectionName,
 federationName, policyName), control);
    }
 
    /**
@@ -281,7 +281,7 @@ public abstract class AMQPFederationManagementSupport {
       final String policyName = manager.getPolicyName();
 
       
management.unregisterFromJMX(getFederationSourcePolicyObjectName(management, 
brokerConnectionName, federationName, manager.getPolicyType().toString(), 
policyName));
-      
management.unregisterFromRegistry(getFederationSourcePolicyResourceName(brokerConnectionName,
 federationName, policyName));
+      
management.unRegisterAMQPControl(getFederationSourcePolicyResourceName(brokerConnectionName,
 federationName, policyName));
    }
 
    public static String getFederationSourcePolicyResourceName(String 
brokerConnectionName, String federationName, String policyName) {
@@ -314,7 +314,7 @@ public abstract class AMQPFederationManagementSupport {
       final String policyName = manager.getPolicyName();
 
       management.registerInJMX(getFederationTargetPolicyObjectName(management, 
remoteNodeId, brokerConnectionName, federationName, 
manager.getPolicyType().toString(), policyName), control);
-      
management.registerInRegistry(getFederationTargetPolicyResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName), control);
+      
management.registerAMQPControl(getFederationTargetPolicyResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName), control);
    }
 
    /**
@@ -333,7 +333,7 @@ public abstract class AMQPFederationManagementSupport {
       final String policyName = manager.getPolicyName();
 
       
management.unregisterFromJMX(getFederationTargetPolicyObjectName(management, 
remoteNodeId, brokerConnectionName, federationName, 
manager.getPolicyType().toString(), policyName));
-      
management.unregisterFromRegistry(getFederationTargetPolicyResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName));
+      
management.unRegisterAMQPControl(getFederationTargetPolicyResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName));
    }
 
    /**
@@ -353,7 +353,7 @@ public abstract class AMQPFederationManagementSupport {
       final String policyName = manager.getPolicyName();
 
       management.registerInJMX(getFederationTargetPolicyObjectName(management, 
remoteNodeId, brokerConnectionName, federationName, 
manager.getPolicyType().toString(), policyName), control);
-      
management.registerInRegistry(getFederationTargetPolicyResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName), control);
+      
management.registerAMQPControl(getFederationTargetPolicyResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName), control);
    }
 
    /**
@@ -372,7 +372,7 @@ public abstract class AMQPFederationManagementSupport {
       final String policyName = manager.getPolicyName();
 
       
management.unregisterFromJMX(getFederationTargetPolicyObjectName(management, 
remoteNodeId, brokerConnectionName, federationName, 
manager.getPolicyType().toString(), policyName));
-      
management.unregisterFromRegistry(getFederationTargetPolicyResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName));
+      
management.unRegisterAMQPControl(getFederationTargetPolicyResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName));
    }
 
    public static String getFederationTargetPolicyResourceName(String 
remoteNodeId, String brokerConnectionName, String federationName, String 
policyName) {
@@ -408,10 +408,10 @@ public abstract class AMQPFederationManagementSupport {
 
       if (consumer.getRole() == FederationConsumerInfo.Role.ADDRESS_CONSUMER) {
          
management.registerInJMX(getFederationSourceAddressConsumerObjectName(management,
 brokerConnectionName, federationName, manager.getPolicyType().toString(), 
policyName, consumer.getConsumerInfo().getAddress()), control);
-         
management.registerInRegistry(getFederationSourceAddressConsumerResourceName(brokerConnectionName,
 federationName, policyName, consumer.getConsumerInfo().getAddress()), control);
+         
management.registerAMQPControl(getFederationSourceAddressConsumerResourceName(brokerConnectionName,
 federationName, policyName, consumer.getConsumerInfo().getAddress()), control);
       } else {
          
management.registerInJMX(getFederationSourceQueueConsumerObjectName(management, 
brokerConnectionName, federationName, manager.getPolicyType().toString(), 
policyName, consumer.getConsumerInfo().getFqqn()), control);
-         
management.registerInRegistry(getFederationSourceQueueConsumerResourceName(brokerConnectionName,
 federationName, policyName, consumer.getConsumerInfo().getFqqn()), control);
+         
management.registerAMQPControl(getFederationSourceQueueConsumerResourceName(brokerConnectionName,
 federationName, policyName, consumer.getConsumerInfo().getFqqn()), control);
       }
    }
 
@@ -432,10 +432,10 @@ public abstract class AMQPFederationManagementSupport {
 
       if (consumer.getRole() == FederationConsumerInfo.Role.ADDRESS_CONSUMER) {
          
management.unregisterFromJMX(getFederationSourceAddressConsumerObjectName(management,
 brokerConnectionName, federationName, manager.getPolicyType().toString(), 
policyName, consumer.getConsumerInfo().getAddress()));
-         
management.unregisterFromRegistry(getFederationSourceAddressConsumerResourceName(brokerConnectionName,
 federationName, policyName, consumer.getConsumerInfo().getAddress()));
+         
management.unRegisterAMQPControl(getFederationSourceAddressConsumerResourceName(brokerConnectionName,
 federationName, policyName, consumer.getConsumerInfo().getAddress()));
       } else {
          
management.unregisterFromJMX(getFederationSourceQueueConsumerObjectName(management,
 brokerConnectionName, federationName, manager.getPolicyType().toString(), 
policyName, consumer.getConsumerInfo().getFqqn()));
-         
management.unregisterFromRegistry(getFederationSourceQueueConsumerResourceName(brokerConnectionName,
 federationName, policyName, consumer.getConsumerInfo().getFqqn()));
+         
management.unRegisterAMQPControl(getFederationSourceQueueConsumerResourceName(brokerConnectionName,
 federationName, policyName, consumer.getConsumerInfo().getFqqn()));
       }
    }
 
@@ -459,12 +459,12 @@ public abstract class AMQPFederationManagementSupport {
          final String address = control.getAddress();
 
          
management.registerInJMX(getFederationSourceAddressProducerObjectName(management,
 brokerConnectionName, federationName, manager.getPolicyType().toString(), 
policyName, address), control);
-         
management.registerInRegistry(getFederationSourceAddressProducerResourceName(brokerConnectionName,
 federationName, policyName, address), control);
+         
management.registerAMQPControl(getFederationSourceAddressProducerResourceName(brokerConnectionName,
 federationName, policyName, address), control);
       } else {
          final String fqqn = control.getFqqn();
 
          
management.registerInJMX(getFederationSourceQueueProducerObjectName(management, 
brokerConnectionName, federationName, manager.getPolicyType().toString(), 
policyName, fqqn), control);
-         
management.registerInRegistry(getFederationSourceQueueProducerResourceName(brokerConnectionName,
 federationName, policyName, fqqn), control);
+         
management.registerAMQPControl(getFederationSourceQueueProducerResourceName(brokerConnectionName,
 federationName, policyName, fqqn), control);
       }
    }
 
@@ -487,12 +487,12 @@ public abstract class AMQPFederationManagementSupport {
          final String address = 
sender.getServerConsumer().getQueueAddress().toString();
 
          
management.unregisterFromJMX(getFederationSourceAddressProducerObjectName(management,
 brokerConnectionName, federationName, manager.getPolicyType().toString(), 
policyName, address));
-         
management.unregisterFromRegistry(getFederationSourceAddressProducerResourceName(brokerConnectionName,
 federationName, policyName, address));
+         
management.unRegisterAMQPControl(getFederationSourceAddressProducerResourceName(brokerConnectionName,
 federationName, policyName, address));
       } else {
          final String fqqn = 
CompositeAddress.toFullyQualified(sender.getServerConsumer().getQueueAddress().toString(),
 sender.getServerConsumer().getQueueName().toString());
 
          
management.unregisterFromJMX(getFederationSourceQueueProducerObjectName(management,
 brokerConnectionName, federationName, manager.getPolicyType().toString(), 
policyName, fqqn));
-         
management.unregisterFromRegistry(getFederationSourceQueueProducerResourceName(brokerConnectionName,
 federationName, policyName, fqqn));
+         
management.unRegisterAMQPControl(getFederationSourceQueueProducerResourceName(brokerConnectionName,
 federationName, policyName, fqqn));
       }
    }
 
@@ -570,10 +570,10 @@ public abstract class AMQPFederationManagementSupport {
 
       if (consumer.getRole() == FederationConsumerInfo.Role.ADDRESS_CONSUMER) {
          
management.registerInJMX(getFederationTargetAddressConsumerObjectName(management,
 remoteNodeId, brokerConnectionName, federationName, 
manager.getPolicyType().toString(), policyName, 
consumer.getConsumerInfo().getAddress()), control);
-         
management.registerInRegistry(getFederationTargetAddressConsumerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, 
consumer.getConsumerInfo().getAddress()), control);
+         
management.registerAMQPControl(getFederationTargetAddressConsumerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, 
consumer.getConsumerInfo().getAddress()), control);
       } else {
          
management.registerInJMX(getFederationTargetQueueConsumerObjectName(management, 
remoteNodeId, brokerConnectionName, federationName, 
manager.getPolicyType().toString(), policyName, 
consumer.getConsumerInfo().getFqqn()), control);
-         
management.registerInRegistry(getFederationTargetQueueConsumerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, 
consumer.getConsumerInfo().getFqqn()), control);
+         
management.registerAMQPControl(getFederationTargetQueueConsumerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, 
consumer.getConsumerInfo().getFqqn()), control);
       }
    }
 
@@ -594,10 +594,10 @@ public abstract class AMQPFederationManagementSupport {
 
       if (consumer.getRole() == FederationConsumerInfo.Role.ADDRESS_CONSUMER) {
          
management.unregisterFromJMX(getFederationTargetAddressConsumerObjectName(management,
 remoteNodeId, brokerConnectionName, federationName, 
manager.getPolicyType().toString(), policyName, 
consumer.getConsumerInfo().getAddress()));
-         
management.unregisterFromRegistry(getFederationTargetAddressConsumerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, 
consumer.getConsumerInfo().getAddress()));
+         
management.unRegisterAMQPControl(getFederationTargetAddressConsumerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, 
consumer.getConsumerInfo().getAddress()));
       } else {
          
management.unregisterFromJMX(getFederationTargetQueueConsumerObjectName(management,
 remoteNodeId, brokerConnectionName, federationName, 
manager.getPolicyType().toString(), policyName, 
consumer.getConsumerInfo().getFqqn()));
-         
management.unregisterFromRegistry(getFederationTargetQueueConsumerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, 
consumer.getConsumerInfo().getFqqn()));
+         
management.unRegisterAMQPControl(getFederationTargetQueueConsumerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, 
consumer.getConsumerInfo().getFqqn()));
       }
    }
 
@@ -621,12 +621,12 @@ public abstract class AMQPFederationManagementSupport {
          final String address = control.getAddress();
 
          
management.registerInJMX(getFederationTargetAddressProducerObjectName(management,
 remoteNodeId, brokerConnectionName, federationName, 
manager.getPolicyType().toString(), policyName, address), control);
-         
management.registerInRegistry(getFederationTargetAddressProducerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, address), control);
+         
management.registerAMQPControl(getFederationTargetAddressProducerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, address), control);
       } else {
          final String fqqn = control.getFqqn();
 
          
management.registerInJMX(getFederationTargetQueueProducerObjectName(management, 
remoteNodeId, brokerConnectionName, federationName, 
manager.getPolicyType().toString(), policyName, fqqn), control);
-         
management.registerInRegistry(getFederationTargetQueueProducerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, fqqn), control);
+         
management.registerAMQPControl(getFederationTargetQueueProducerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, fqqn), control);
       }
    }
 
@@ -649,12 +649,12 @@ public abstract class AMQPFederationManagementSupport {
          final String address = 
sender.getServerConsumer().getQueueAddress().toString();
 
          
management.unregisterFromJMX(getFederationTargetAddressProducerObjectName(management,
 remoteNodeId, brokerConnectionName, federationName, 
manager.getPolicyType().toString(), policyName, address));
-         
management.unregisterFromRegistry(getFederationTargetAddressProducerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, address));
+         
management.unRegisterAMQPControl(getFederationTargetAddressProducerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, address));
       } else {
          final String fqqn = 
CompositeAddress.toFullyQualified(sender.getServerConsumer().getQueueAddress().toString(),
 sender.getServerConsumer().getQueueName().toString());
 
          
management.unregisterFromJMX(getFederationTargetQueueProducerObjectName(management,
 remoteNodeId, brokerConnectionName, federationName, 
manager.getPolicyType().toString(), policyName, fqqn));
-         
management.unregisterFromRegistry(getFederationTargetQueueProducerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, fqqn));
+         
management.unRegisterAMQPControl(getFederationTargetQueueProducerResourceName(remoteNodeId,
 brokerConnectionName, federationName, policyName, fqqn));
       }
    }
 
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
index f93d86f089..eab3e8367b 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
@@ -1457,8 +1457,8 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
       clearIO();
       try {
-         Object[] queueControls = 
server.getManagementService().getResources(QueueControl.class);
-         return queueControls.length;
+         List<QueueControl> queueControls = 
server.getManagementService().getQueueControls();
+         return queueControls.size();
       } finally {
          blockOnIO();
       }
@@ -1478,10 +1478,10 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
       clearIO();
       try {
-         Object[] queueControls = 
server.getManagementService().getResources(QueueControl.class);
+         List<QueueControl> queueControls = 
server.getManagementService().getQueueControls();
          List<String> names = new ArrayList<>();
-         for (int i = 0; i < queueControls.length; i++) {
-            QueueControl queueControl = (QueueControl) queueControls[i];
+         for (int i = 0; i < queueControls.size(); i++) {
+            QueueControl queueControl = (QueueControl) queueControls.get(i);
             if (routingType != null && routingType.length() > 1 && 
queueControl.getRoutingType().equals(routingType.toUpperCase())) {
                names.add(queueControl.getName());
             } else if (routingType == null || routingType.isEmpty()) {
@@ -1571,8 +1571,8 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
       clearIO();
       try {
-         Object[] addresses = 
server.getManagementService().getResources(AddressControl.class);
-         return addresses.length;
+         List<AddressControl> addresses = 
server.getManagementService().getAddressControls();
+         return addresses.size();
       } finally {
          blockOnIO();
       }
@@ -1587,10 +1587,10 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
       clearIO();
       try {
-         Object[] addresses = 
server.getManagementService().getResources(AddressControl.class);
-         String[] names = new String[addresses.length];
-         for (int i = 0; i < addresses.length; i++) {
-            AddressControl address = (AddressControl) addresses[i];
+         List<AddressControl> addresses = 
server.getManagementService().getAddressControls();
+         String[] names = new String[addresses.size()];
+         for (int i = 0; i < addresses.size(); i++) {
+            AddressControl address = (AddressControl) addresses.get(i);
             names[i] = address.getAddress();
          }
          return names;
@@ -2608,14 +2608,9 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
       checkStarted();
       clearIO();
       try {
-         List<AddressControl> addresses = new ArrayList<>();
-         Object[] qs = 
server.getManagementService().getResources(AddressControl.class);
-         for (int i = 0; i < qs.length; i++) {
-            addresses.add((AddressControl) qs[i]);
-         }
          AddressView view = new AddressView(server);
-         view.setCollection(addresses);
          view.setOptions(options);
+         
view.setCollection(server.getManagementService().getAddressControls(view.getPredicate()));
          return view.getResultsAsJson(page, pageSize);
       } finally {
          blockOnIO();
@@ -2631,15 +2626,10 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
       clearIO();
       try {
-         List<QueueControl> queues = new ArrayList<>();
-         Object[] qs = 
server.getManagementService().getResources(QueueControl.class);
-         for (int i = 0; i < qs.length; i++) {
-            queues.add((QueueControl) qs[i]);
-         }
          QueueView view = new QueueView(server);
-         view.setCollection(queues);
          view.setOptions(options);
-         return view.getResultsAsJson(page, pageSize);
+         
view.setCollection(server.getManagementService().getQueueControls(view.getPredicate()));
+         return view.AsJson(page, pageSize);
       } finally {
          blockOnIO();
       }
@@ -3640,10 +3630,10 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
       clearIO();
       try {
-         Object[] diverts = 
server.getManagementService().getResources(DivertControl.class);
-         String[] names = new String[diverts.length];
-         for (int i = 0; i < diverts.length; i++) {
-            DivertControl divert = (DivertControl) diverts[i];
+         List<DivertControl> diverts = 
server.getManagementService().getDivertControls();
+         String[] names = new String[diverts.size()];
+         for (int i = 0; i < diverts.size(); i++) {
+            DivertControl divert = diverts.get(i);
             names[i] = divert.getUniqueName();
          }
 
@@ -3789,10 +3779,10 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
       clearIO();
       try {
-         Object[] bridges = 
server.getManagementService().getResources(BridgeControl.class);
-         String[] names = new String[bridges.length];
-         for (int i = 0; i < bridges.length; i++) {
-            BridgeControl bridge = (BridgeControl) bridges[i];
+         List<BridgeControl> bridges = 
server.getManagementService().getBridgeControls();
+         String[] names = new String[bridges.size()];
+         for (int i = 0; i < bridges.size(); i++) {
+            BridgeControl bridge = bridges.get(i);
             names[i] = bridge.getName();
          }
 
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/server/impl/RemotingServiceImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/server/impl/RemotingServiceImpl.java
index 932a5fb256..22753c4f19 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/server/impl/RemotingServiceImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/server/impl/RemotingServiceImpl.java
@@ -1081,9 +1081,9 @@ public class RemotingServiceImpl implements 
RemotingService, ServerConnectionLif
          server.getReloadManager().addCallback(storeURL, (uri) -> {
             // preference for Control to capture consistent audit logging
             if (managementService != null) {
-               Object targetControl = 
managementService.getResource(ResourceNames.ACCEPTOR + acceptorName);
-               if (targetControl instanceof AcceptorControl acceptorControl) {
-                  acceptorControl.reload();
+               AcceptorControl targetControl = 
managementService.getAcceptorControl(ResourceNames.ACCEPTOR + acceptorName);
+               if (targetControl != null) {
+                  targetControl.reload();
                }
             }
          });
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/ManagementService.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/ManagementService.java
index 8ad304fe80..6856596851 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/ManagementService.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/ManagementService.java
@@ -16,8 +16,10 @@
  */
 package org.apache.activemq.artemis.core.server.management;
 
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ScheduledExecutorService;
+import java.util.function.Predicate;
 
 import javax.management.ObjectName;
 
@@ -27,8 +29,12 @@ import org.apache.activemq.artemis.api.core.Message;
 import org.apache.activemq.artemis.api.core.RoutingType;
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.api.core.TransportConfiguration;
+import org.apache.activemq.artemis.api.core.management.AcceptorControl;
 import org.apache.activemq.artemis.api.core.management.AddressControl;
+import org.apache.activemq.artemis.api.core.management.BridgeControl;
+import org.apache.activemq.artemis.api.core.management.DivertControl;
 import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
+import org.apache.activemq.artemis.api.core.management.QueueControl;
 import org.apache.activemq.artemis.core.config.ClusterConnectionConfiguration;
 import org.apache.activemq.artemis.core.config.Configuration;
 import 
org.apache.activemq.artemis.core.management.impl.ActiveMQServerControlImpl;
@@ -92,10 +98,6 @@ public interface ManagementService extends 
NotificationService, ActiveMQComponen
 
    void unregisterFromJMX(ObjectName objectName) throws Exception;
 
-   void registerInRegistry(String resourceName, Object managedResource);
-
-   void unregisterFromRegistry(String resourceName);
-
    void registerAddress(AddressInfo addressInfo) throws Exception;
 
    void registerAddressMeters(AddressInfo addressInfo, AddressControl 
addressControl) throws Exception;
@@ -147,8 +149,6 @@ public interface ManagementService extends 
NotificationService, ActiveMQComponen
 
    Object getResource(String resourceName);
 
-   Object[] getResources(Class<?> resourceType);
-
    ICoreMessage handleMessage(SecurityAuth auth, Message message) throws 
Exception;
 
    void registerHawtioSecurity(GuardInvocationHandler guardInvocationHandler) 
throws Exception;
@@ -159,4 +159,23 @@ public interface ManagementService extends 
NotificationService, ActiveMQComponen
 
    Object invokeOperation(String resourceName, String operation, Object[] 
params, SecurityAuth auth) throws Exception;
 
+   List<QueueControl> getQueueControls();
+
+   List<QueueControl> getQueueControls(Predicate<QueueControl> predicate);
+
+   List<AddressControl> getAddressControls();
+
+   List<AddressControl> getAddressControls(Predicate<AddressControl> 
predicate);
+
+   AddressControl getAddressControl(String resourceName);
+
+   AcceptorControl getAcceptorControl(String resourceName);
+
+   void registerAMQPControl(String amqpResourceName, Object control);
+
+   void unRegisterAMQPControl(String amqpResourceName);
+
+   List<DivertControl> getDivertControls();
+
+   List<BridgeControl> getBridgeControls();
 }
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ControlRegistries.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ControlRegistries.java
new file mode 100644
index 0000000000..8a381366ad
--- /dev/null
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ControlRegistries.java
@@ -0,0 +1,384 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.artemis.core.server.management.impl;
+
+
+import org.apache.activemq.artemis.api.core.management.AcceptorControl;
+import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
+import org.apache.activemq.artemis.api.core.management.AddressControl;
+import 
org.apache.activemq.artemis.api.core.management.BaseBroadcastGroupControl;
+import org.apache.activemq.artemis.api.core.management.BridgeControl;
+import org.apache.activemq.artemis.api.core.management.BrokerConnectionControl;
+import 
org.apache.activemq.artemis.api.core.management.ClusterConnectionControl;
+import org.apache.activemq.artemis.api.core.management.ConnectionRouterControl;
+import org.apache.activemq.artemis.api.core.management.DivertControl;
+import org.apache.activemq.artemis.api.core.management.QueueControl;
+import 
org.apache.activemq.artemis.api.core.management.RemoteBrokerConnectionControl;
+import org.apache.activemq.artemis.api.core.management.ResourceNames;
+import 
org.apache.activemq.artemis.core.management.impl.ActiveMQServerControlImpl;
+import 
org.apache.activemq.artemis.core.server.management.HawtioSecurityControl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.invoke.MethodHandles;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+
+public class ControlRegistries {
+   private static final Logger logger = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+   public final Map<String, ActiveMQServerControl> serverControls;
+
+   public final Map<String, QueueControl> queueControls;
+
+   public final Map<String, AddressControl> addressControls;
+
+   public final Map<String, AcceptorControl> accepterControls;
+
+   public final Map<String, BaseBroadcastGroupControl> broadcastGroupControls;
+
+   public final Map<String, BrokerConnectionControl> brokerConnectionControls;
+
+   public final Map<String, RemoteBrokerConnectionControl> 
remoteBrokerConnectionControls;
+
+   public final Map<String, BridgeControl> bridgeControls;
+
+   public final Map<String, ClusterConnectionControl> clusterConnectionControl;
+
+   public final Map<String, ConnectionRouterControl> connectionRouterControls;
+
+   public final Map<String, HawtioSecurityControl> hawtioSecurityControls;
+
+   public final Map<String, DivertControl> divertControls;
+
+   public final Map<String, Object> amqpControls;
+
+   public ControlRegistries() {
+      serverControls = new ConcurrentHashMap<>();
+      queueControls = new ConcurrentHashMap<>();
+      addressControls = new ConcurrentHashMap<>();
+      accepterControls = new ConcurrentHashMap<>();
+      broadcastGroupControls = new ConcurrentHashMap<>();
+      brokerConnectionControls = new ConcurrentHashMap<>();
+      remoteBrokerConnectionControls = new ConcurrentHashMap<>();
+      bridgeControls = new ConcurrentHashMap<>();
+      clusterConnectionControl = new ConcurrentHashMap<>();
+      connectionRouterControls = new ConcurrentHashMap<>();
+      hawtioSecurityControls = new ConcurrentHashMap<>();
+      amqpControls = new ConcurrentHashMap<>();
+      divertControls = new ConcurrentHashMap<>();
+   }
+
+   public void unregisterQueueControls(final String resourceName) {
+      Object removed = queueControls.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   public void registerQueueControls(final String resourceName, final 
QueueControl queueControl) {
+      Object replaced = queueControls.put(resourceName, queueControl);
+      replaced(resourceName, replaced, queueControl);
+   }
+
+   public void unregisterAddressControls(final String resourceName) {
+      Object removed = addressControls.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   public void registerAddressControls(final String resourceName, final 
AddressControl addressControl) {
+      Object replaced = addressControls.put(resourceName, addressControl);
+      replaced(resourceName, replaced, addressControl);
+   }
+
+   public void registerAcceptor(String resourceName, AcceptorControl 
acceptorControl) {
+      Object replaced = accepterControls.put(resourceName, acceptorControl);
+      replaced(resourceName, replaced, acceptorControl);
+   }
+
+   public Set<String> getAcceptorNames() {
+      return accepterControls.keySet();
+   }
+
+   public void unregisterAcceptorControls(String resourceName) {
+      Object removed = accepterControls.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   public void registerBroadcastGroupControls(String resourceName, 
BaseBroadcastGroupControl control) {
+      Object replaced = broadcastGroupControls.put(resourceName, control);
+      replaced(resourceName, replaced, control);
+   }
+
+   public void unRegisterBroadcastGroupControls(String resourceName) {
+      Object removed = broadcastGroupControls.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   public void registerBrokerConnectionControl(String resourceName, 
BrokerConnectionControl control) {
+      Object replaced = brokerConnectionControls.put(resourceName, control);
+      replaced(resourceName, replaced, control);
+   }
+
+   public void unRegisterBrokerConnectionControl(String resourceName) {
+      Object removed = brokerConnectionControls.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   public void registerRemoteBrokerConnectionControl(String resourceName, 
RemoteBrokerConnectionControl control) {
+      Object replaced = remoteBrokerConnectionControls.put(resourceName, 
control);
+      replaced(resourceName, replaced, control);
+   }
+
+   public void unRegisterRemoteBrokerConnectionControl(String resourceName) {
+      Object removed = remoteBrokerConnectionControls.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   public void registerBridgeControl(String resourceName, BridgeControl 
control) {
+      Object replaced = bridgeControls.put(resourceName, control);
+      replaced(resourceName, replaced, control);
+   }
+
+   public void unRegisterBridgeControl(String resourceName) {
+      Object removed = bridgeControls.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   public void registerClusterConnectionControl(String resourceName, 
ClusterConnectionControl control) {
+      Object replaced = clusterConnectionControl.put(resourceName, control);
+      replaced(resourceName, replaced, control);
+   }
+
+   public void unRegisterClusterConnectionControl(String resourceName) {
+      Object removed = clusterConnectionControl.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   public void registerConnectionRouterControl(String resourceName, 
ConnectionRouterControl connectionRouterControl) {
+      Object replaced = connectionRouterControls.put(resourceName, 
connectionRouterControl);
+      replaced(resourceName, replaced, connectionRouterControl);
+   }
+
+   public void unRegisterConnectionRouterControl(String resourceName) {
+      Object removed = connectionRouterControls.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   public void registerHawtioSecurityControl(String resourceName, 
HawtioSecurityControl control) {
+      Object replaced = hawtioSecurityControls.put(resourceName, control);
+      replaced(resourceName, replaced, control);
+   }
+
+   public void unRegisterHawtioSecurityControl(String resourceName) {
+      Object removed = hawtioSecurityControls.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+   public void registerAMQPControl(String amqpResourceName, Object control) {
+      amqpControls.put(amqpResourceName, control);
+   }
+
+   public void unRegisterAMQPControl(String resourceName) {
+      Object removed = amqpControls.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   public void registerBroker(String resourceName, ActiveMQServerControlImpl 
messagingServerControl) {
+      Object replaced = serverControls.put(resourceName, 
messagingServerControl);
+      replaced(resourceName, replaced, messagingServerControl);
+   }
+
+   public void unRegisterBroker(String resourceName) {
+      Object removed = serverControls.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   public void registerDivertControl(String resourceName, DivertControl 
divertControl) {
+      Object replaced = divertControls.put(resourceName, divertControl);
+      replaced(resourceName, replaced, divertControl);
+   }
+
+   public void unRegisterDivertControl(String resourceName) {
+      Object removed = divertControls.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   public List<QueueControl> getQueueControls(Predicate<QueueControl> 
predicate) {
+      if (predicate == null) {
+         return queueControls.values().stream().toList();
+      }
+      return 
queueControls.values().stream().filter(predicate).collect(Collectors.toList());
+   }
+
+   public List<AddressControl> getAddressControls(Predicate<AddressControl> 
predicate) {
+      if (predicate == null) {
+         return addressControls.values().stream().toList();
+      }
+      return 
addressControls.values().stream().filter(predicate).collect(Collectors.toList());
+   }
+
+   public AddressControl getAddressControl(String resourceName) {
+      return addressControls.get(resourceName);
+   }
+
+   public AcceptorControl getAcceptorControl(String resourceName) {
+      return accepterControls.get(resourceName);
+   }
+
+   public void clear() {
+      serverControls.clear();
+      addressControls.clear();
+      queueControls.clear();
+      serverControls.clear();
+      accepterControls.clear();
+      serverControls.clear();
+      broadcastGroupControls.clear();
+      brokerConnectionControls.clear();
+      remoteBrokerConnectionControls.clear();
+      bridgeControls.clear();
+      clusterConnectionControl.clear();
+      connectionRouterControls.clear();
+      hawtioSecurityControls.clear();
+      divertControls.clear();
+      amqpControls.clear();
+   }
+
+   /**
+    * This is only used by tests for asserting, so performance is not an issue
+    */
+   public Object get(String resourceName) {
+      String resourceNamePrefix = resourceName;
+      int idx = resourceName.indexOf(".");
+      if (idx > 0) {
+         resourceNamePrefix = resourceName.substring(0, idx + 1);
+      }
+
+      return switch (resourceNamePrefix) {
+         case ResourceNames.BROKER -> serverControls.get(resourceName);
+         case ResourceNames.ADDRESS -> addressControls.get(resourceName);
+         case ResourceNames.QUEUE -> queueControls.get(resourceName);
+         case ResourceNames.ACCEPTOR -> accepterControls.get(resourceName);
+         case ResourceNames.BROADCAST_GROUP -> 
broadcastGroupControls.get(resourceName);
+         case ResourceNames.BROKER_CONNECTION -> 
brokerConnectionControls.get(resourceName);
+         case ResourceNames.REMOTE_BROKER_CONNECTION -> 
remoteBrokerConnectionControls.get(resourceName);
+         case ResourceNames.BRIDGE -> bridgeControls.get(resourceName);
+         case ResourceNames.CORE_CLUSTER_CONNECTION -> 
clusterConnectionControl.get(resourceName);
+         case ResourceNames.CONNECTION_ROUTER -> 
connectionRouterControls.get(resourceName);
+         case ResourceNames.MANAGEMENT_SECURITY -> 
hawtioSecurityControls.get(resourceName);
+         case ResourceNames.DIVERT -> divertControls.get(resourceName);
+         default -> {
+            if (amqpControls.containsKey(resourceName)) {
+               yield amqpControls.get(resourceName);
+            }
+            yield null;
+         }
+      };
+   }
+
+   /**
+    * This is only used by tests for asserting, so performance is not an issue
+    */
+   public Object legacyGetResource(String resourceName) {
+      Object resource = serverControls.get(resourceName);
+      if (resource == null)
+         resource = addressControls.get(resourceName);
+      if (resource == null)
+         resource = queueControls.get(resourceName);
+      if (resource == null)
+         resource = accepterControls.get(resourceName);
+      if (resource == null)
+         resource = broadcastGroupControls.get(resourceName);
+      if (resource == null)
+         resource = brokerConnectionControls.get(resourceName);
+      if (resource == null)
+         resource = remoteBrokerConnectionControls.get(resourceName);
+      if (resource == null)
+         resource = bridgeControls.get(resourceName);
+      if (resource == null)
+         resource = clusterConnectionControl.get(resourceName);
+      if (resource == null)
+         resource = connectionRouterControls.get(resourceName);
+      if (resource == null)
+         resource = hawtioSecurityControls.get(resourceName);
+      if (resource == null)
+         resource = divertControls.get(resourceName);
+      if (resource == null)
+         resource = amqpControls.get(resourceName);
+
+      return resource;
+   }
+
+   public List<DivertControl> getDivertControls() {
+      return divertControls.values().stream().toList();
+   }
+
+   public List<BridgeControl> getBridgeControls() {
+      return bridgeControls.values().stream().toList();
+   }
+
+   public Set<String> unRegisterAll() {
+      Set<String> names = new HashSet<>();
+      names.addAll(unregisterMap(serverControls));
+      names.addAll(unregisterMap(addressControls));
+      names.addAll(unregisterMap(queueControls));
+      names.addAll(unregisterMap(accepterControls));
+      names.addAll(unregisterMap(broadcastGroupControls));
+      names.addAll(unregisterMap(brokerConnectionControls));
+      names.addAll(unregisterMap(remoteBrokerConnectionControls));
+      names.addAll(unregisterMap(bridgeControls));
+      names.addAll(unregisterMap(clusterConnectionControl));
+      names.addAll(unregisterMap(connectionRouterControls));
+      names.addAll(unregisterMap(hawtioSecurityControls));
+      names.addAll(unregisterMap(amqpControls));
+      return names;
+   }
+
+   private Collection<String> unregisterMap(Map registry) {
+      Set<String> resourceNames = new HashSet<>(registry.keySet());
+      for (String resourceName : resourceNames) {
+         unregisterFromRegistry(resourceName, registry);
+      }
+      return resourceNames;
+   }
+
+   private void unregisterFromRegistry(final String resourceName, final 
Map<String, Object> registry) {
+      Object removed = registry.remove(resourceName);
+      extracted(resourceName, removed);
+   }
+
+   private static void extracted(String resourceName, Object removed) {
+      if (removed != null) {
+         logger.debug("Unregistered from management: {} as {}", resourceName, 
removed);
+      } else {
+         logger.debug("Attempted to unregister {} from management, but it was 
not registered.");
+      }
+   }
+
+   private static void replaced(String resourceName, Object replaced, Object 
managedResource) {
+      String addendum = "";
+      if (replaced != null) {
+         addendum = ". Replaced: " + replaced;
+      }
+      logger.debug("Registered in management: {} as {}{}", resourceName, 
managedResource, addendum);
+   }
+
+}
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java
index 561b9818d5..ae12844c4f 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ManagementServiceImpl.java
@@ -29,11 +29,10 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledExecutorService;
+import java.util.function.Predicate;
 import java.util.regex.Pattern;
 
 import io.micrometer.core.instrument.Tag;
@@ -132,7 +131,7 @@ public class ManagementServiceImpl implements 
ManagementService {
 
    private final boolean jmxManagementEnabled;
 
-   private final Map<String, Object> registry;
+   ControlRegistries registries = new ControlRegistries();
 
    private final NotificationBroadcasterSupport broadcaster;
 
@@ -180,8 +179,6 @@ public class ManagementServiceImpl implements 
ManagementService {
       messageCounterEnabled = configuration.isMessageCounterEnabled();
       managementAddress = configuration.getManagementAddress();
       managementNotificationAddress = 
configuration.getManagementNotificationAddress();
-
-      registry = new ConcurrentHashMap<>();
       broadcaster = new NotificationBroadcasterSupport();
       notificationsEnabled = true;
       objectNameBuilder = 
ObjectNameBuilder.create(configuration.getJMXDomain(), configuration.getName(), 
configuration.isJMXUseBrokerName());
@@ -236,7 +233,7 @@ public class ManagementServiceImpl implements 
ManagementService {
       messagingServerControl = new ActiveMQServerControlImpl(postOffice, 
configuration, resourceManager, remotingService, messagingServer, 
messageCounterManager, storageManager1, broadcaster);
       ObjectName objectName = objectNameBuilder.getActiveMQServerObjectName();
       registerInJMX(objectName, messagingServerControl);
-      registerInRegistry(ResourceNames.BROKER, messagingServerControl);
+      registries.registerBroker(ResourceNames.BROKER, messagingServerControl);
       registerBrokerMeters();
 
       return messagingServerControl;
@@ -266,7 +263,7 @@ public class ManagementServiceImpl implements 
ManagementService {
    @Override
    public void unregisterServer() throws Exception {
       unregisterFromJMX(objectNameBuilder.getActiveMQServerObjectName());
-      unregisterFromRegistry(ResourceNames.BROKER);
+      registries.unRegisterBroker(ResourceNames.BROKER);
       if (messagingServer != null) {
          unregisterMeters(ResourceNames.BROKER + "." + 
messagingServer.getConfiguration().getName());
       }
@@ -276,7 +273,7 @@ public class ManagementServiceImpl implements 
ManagementService {
    public void registerAddress(AddressInfo addressInfo) throws Exception {
       AddressControlImpl addressControl = new AddressControlImpl(addressInfo, 
messagingServer, pagingManager, storageManager, securityRepository, 
securityStore, this);
       
registerInJMX(objectNameBuilder.getAddressObjectName(addressInfo.getName()), 
addressControl);
-      registerInRegistry(ResourceNames.ADDRESS + addressInfo.getName(), 
addressControl);
+      registries.registerAddressControls(ResourceNames.ADDRESS + 
addressInfo.getName(), addressControl);
       registerAddressMeters(addressInfo, addressControl);
    }
 
@@ -299,7 +296,7 @@ public class ManagementServiceImpl implements 
ManagementService {
    @Override
    public void unregisterAddress(final SimpleString address) throws Exception {
       unregisterFromJMX(objectNameBuilder.getAddressObjectName(address));
-      unregisterFromRegistry(ResourceNames.ADDRESS + address);
+      registries.unregisterAddressControls(ResourceNames.ADDRESS + address);
       unregisterMeters(ResourceNames.ADDRESS + address);
    }
 
@@ -312,20 +309,60 @@ public class ManagementServiceImpl implements 
ManagementService {
          
messageCounterManager.registerMessageCounter(queue.getName().toString(), 
counter);
       }
       registerInJMX(objectNameBuilder.getQueueObjectName(address, 
queue.getName(), queue.getRoutingType()), queueControl);
-      registerInRegistry(ResourceNames.QUEUE + queue.getName(), queueControl);
+      registries.registerQueueControls(ResourceNames.QUEUE + queue.getName(), 
queueControl);
       registerQueueMeters(queue);
    }
 
    @Override
    public void unregisterQueue(final SimpleString name, final SimpleString 
address, RoutingType routingType) throws Exception {
       unregisterFromJMX(objectNameBuilder.getQueueObjectName(address, name, 
routingType));
-      unregisterFromRegistry(ResourceNames.QUEUE + name);
+      registries.unregisterQueueControls(ResourceNames.QUEUE + name);
       unregisterMeters(ResourceNames.QUEUE + name);
       if (messageCounterManager != null) {
          messageCounterManager.unregisterMessageCounter(name.toString());
       }
    }
 
+   @Override
+   public List<QueueControl> getQueueControls() {
+      return registries.getQueueControls(null);
+   }
+
+   @Override
+   public List<QueueControl> getQueueControls(Predicate<QueueControl> 
predicate) {
+      return registries.getQueueControls(predicate);
+   }
+
+   @Override
+   public List<AddressControl> getAddressControls() {
+      return registries.getAddressControls(null);
+   }
+
+   @Override
+   public List<AddressControl> getAddressControls(Predicate<AddressControl> 
predicate) {
+      return registries.getAddressControls(predicate);
+   }
+
+   @Override
+   public AddressControl getAddressControl(String resourceName) {
+      return registries.getAddressControl(resourceName);
+   }
+
+   @Override
+   public AcceptorControl getAcceptorControl(String resourceName) {
+      return registries.getAcceptorControl(resourceName);
+   }
+
+   @Override
+   public void registerAMQPControl(String amqpResourceName, Object control) {
+      registries.registerAMQPControl(amqpResourceName, control);
+   }
+
+   @Override
+   public void unRegisterAMQPControl(String amqpResourceName) {
+      registries.unRegisterAMQPControl(amqpResourceName);
+   }
+
    private void registerQueueMeters(final Queue queue) {
       if (messagingServer != null) { // messagingServer could be null on 
certain unit tests where metrics are not relevant
          MetricsManager metricsManager = messagingServer.getMetricsManager();
@@ -369,25 +406,25 @@ public class ManagementServiceImpl implements 
ManagementService {
    public void registerDivert(final Divert divert) throws Exception {
       DivertControl divertControl = new DivertControlImpl(divert, 
storageManager, messagingServer.getInternalNamingPrefix());
       
registerInJMX(objectNameBuilder.getDivertObjectName(divert.getUniqueName().toString(),
 divert.getAddress().toString()), divertControl);
-      registerInRegistry(ResourceNames.DIVERT + divert.getUniqueName(), 
divertControl);
+      registries.registerDivertControl(ResourceNames.DIVERT + 
divert.getUniqueName(), divertControl);
    }
 
    @Override
    public void unregisterDivert(final SimpleString name, final SimpleString 
address) throws Exception {
       unregisterFromJMX(objectNameBuilder.getDivertObjectName(name.toString(), 
address.toString()));
-      unregisterFromRegistry(ResourceNames.DIVERT + name);
+      registries.unRegisterDivertControl(ResourceNames.DIVERT + name);
    }
 
    @Override
    public void registerAcceptor(final Acceptor acceptor, final 
TransportConfiguration configuration) throws Exception {
       AcceptorControl control = new AcceptorControlImpl(acceptor, 
storageManager, configuration);
       
registerInJMX(objectNameBuilder.getAcceptorObjectName(configuration.getName()), 
control);
-      registerInRegistry(ResourceNames.ACCEPTOR + configuration.getName(), 
control);
+      registries.registerAcceptor(ResourceNames.ACCEPTOR + 
configuration.getName(), control);
    }
 
    @Override
    public void unregisterAcceptors() {
-      for (String resourceName : new HashSet<>(registry.keySet())) {
+      for (String resourceName : new HashSet<>(registries.getAcceptorNames())) 
{
          if (resourceName.startsWith(ResourceNames.ACCEPTOR)) {
             String name = 
resourceName.substring(ResourceNames.ACCEPTOR.length());
             try {
@@ -402,7 +439,7 @@ public class ManagementServiceImpl implements 
ManagementService {
    @Override
    public void unregisterAcceptor(final String name) throws Exception {
       unregisterFromJMX(objectNameBuilder.getAcceptorObjectName(name));
-      unregisterFromRegistry(ResourceNames.ACCEPTOR + name);
+      registries.unregisterAcceptorControls(ResourceNames.ACCEPTOR + name);
    }
 
    @Override
@@ -420,26 +457,26 @@ public class ManagementServiceImpl implements 
ManagementService {
          control = new BaseBroadcastGroupControlImpl(broadcastGroup, 
storageManager, configuration);
       }
       
registerInJMX(objectNameBuilder.getBroadcastGroupObjectName(configuration.getName()),
 control);
-      registerInRegistry(ResourceNames.BROADCAST_GROUP + 
configuration.getName(), control);
+      registries.registerBroadcastGroupControls(ResourceNames.BROADCAST_GROUP 
+ configuration.getName(), control);
    }
 
    @Override
    public void unregisterBroadcastGroup(final String name) throws Exception {
       unregisterFromJMX(objectNameBuilder.getBroadcastGroupObjectName(name));
-      unregisterFromRegistry(ResourceNames.BROADCAST_GROUP + name);
+      
registries.unRegisterBroadcastGroupControls(ResourceNames.BROADCAST_GROUP + 
name);
    }
 
    @Override
    public void registerBrokerConnection(BrokerConnection brokerConnection) 
throws Exception {
       BrokerConnectionControl control = new 
BrokerConnectionControlImpl(brokerConnection, storageManager);
       
registerInJMX(objectNameBuilder.getBrokerConnectionObjectName(brokerConnection.getName()),
 control);
-      registerInRegistry(ResourceNames.BROKER_CONNECTION + 
brokerConnection.getName(), control);
+      
registries.registerBrokerConnectionControl(ResourceNames.BROKER_CONNECTION + 
brokerConnection.getName(), control);
    }
 
    @Override
    public void unregisterBrokerConnection(String name) throws Exception {
       unregisterFromJMX(objectNameBuilder.getBrokerConnectionObjectName(name));
-      unregisterFromRegistry(ResourceNames.BROKER_CONNECTION + name);
+      
registries.unRegisterBrokerConnectionControl(ResourceNames.BROKER_CONNECTION + 
name);
    }
 
    @Override
@@ -460,13 +497,13 @@ public class ManagementServiceImpl implements 
ManagementService {
 
       RemoteBrokerConnectionControl control = new 
RemoteBrokerConnectionControlImpl(brokerConnection, storageManager);
       
registerInJMX(objectNameBuilder.getRemoteBrokerConnectionObjectName(nodeId, 
name), control);
-      registerInRegistry(ResourceNames.REMOTE_BROKER_CONNECTION + nodeId + "." 
+ name, control);
+      
registries.registerRemoteBrokerConnectionControl(ResourceNames.REMOTE_BROKER_CONNECTION
 + nodeId + "." + name, control);
    }
 
    @Override
    public void unregisterRemoteBrokerConnection(String nodeId, String name) 
throws Exception {
       
unregisterFromJMX(objectNameBuilder.getRemoteBrokerConnectionObjectName(nodeId, 
name));
-      unregisterFromRegistry(ResourceNames.REMOTE_BROKER_CONNECTION + nodeId + 
"." + name);
+      
registries.unRegisterRemoteBrokerConnectionControl(ResourceNames.REMOTE_BROKER_CONNECTION
 + nodeId + "." + name);
    }
 
    @Override
@@ -474,52 +511,52 @@ public class ManagementServiceImpl implements 
ManagementService {
       bridge.setNotificationService(this);
       BridgeControl control = new BridgeControlImpl(bridge, storageManager);
       
registerInJMX(objectNameBuilder.getBridgeObjectName(bridge.getConfiguration().getName()),
 control);
-      registerInRegistry(ResourceNames.BRIDGE + bridge.getName(), control);
+      registries.registerBridgeControl(ResourceNames.BRIDGE + 
bridge.getName(), control);
    }
 
    @Override
    public void unregisterBridge(final String name) throws Exception {
       unregisterFromJMX(objectNameBuilder.getBridgeObjectName(name));
-      unregisterFromRegistry(ResourceNames.BRIDGE + name);
+      registries.unRegisterBridgeControl(ResourceNames.BRIDGE + name);
    }
 
    @Override
    public void registerCluster(final ClusterConnection cluster, final 
ClusterConnectionConfiguration configuration) throws Exception {
       ClusterConnectionControl control = new 
ClusterConnectionControlImpl(cluster, storageManager, configuration);
       
registerInJMX(objectNameBuilder.getClusterConnectionObjectName(configuration.getName()),
 control);
-      registerInRegistry(ResourceNames.CORE_CLUSTER_CONNECTION + 
configuration.getName(), control);
+      
registries.registerClusterConnectionControl(ResourceNames.CORE_CLUSTER_CONNECTION
 + configuration.getName(), control);
    }
 
    @Override
    public void unregisterCluster(final String name) throws Exception {
       
unregisterFromJMX(objectNameBuilder.getClusterConnectionObjectName(name));
-      unregisterFromRegistry(ResourceNames.CORE_CLUSTER_CONNECTION + name);
+      
registries.unRegisterClusterConnectionControl(ResourceNames.CORE_CLUSTER_CONNECTION
 + name);
    }
 
    @Override
    public void registerConnectionRouter(final ConnectionRouter router) throws 
Exception {
       ConnectionRouterControl connectionRouterControl = new 
ConnectionRouterControlImpl(router, storageManager);
       
registerInJMX(objectNameBuilder.getConnectionRouterObjectName(router.getName()),
 connectionRouterControl);
-      registerInRegistry(ResourceNames.CONNECTION_ROUTER + router.getName(), 
connectionRouterControl);
+      
registries.registerConnectionRouterControl(ResourceNames.CONNECTION_ROUTER + 
router.getName(), connectionRouterControl);
    }
 
    @Override
    public void unregisterConnectionRouter(final String name) throws Exception {
       unregisterFromJMX(objectNameBuilder.getConnectionRouterObjectName(name));
-      unregisterFromRegistry(ResourceNames.CONNECTION_ROUTER + name);
+      
registries.unRegisterConnectionRouterControl(ResourceNames.CONNECTION_ROUTER + 
name);
    }
 
    @Override
    public void registerHawtioSecurity(GuardInvocationHandler guard) throws 
Exception {
       HawtioSecurityControl control = new HawtioSecurityControlImpl(guard, 
storageManager);
       registerInJMX(objectNameBuilder.getSecurityObjectName(), control);
-      registerInRegistry(ResourceNames.MANAGEMENT_SECURITY, control);
+      
registries.registerHawtioSecurityControl(ResourceNames.MANAGEMENT_SECURITY, 
control);
    }
 
    @Override
    public void unregisterHawtioSecurity() throws Exception {
       unregisterFromJMX(objectNameBuilder.getSecurityObjectName());
-      unregisterFromRegistry(ResourceNames.MANAGEMENT_SECURITY);
+      
registries.unRegisterHawtioSecurityControl(ResourceNames.MANAGEMENT_SECURITY);
    }
 
    @Override
@@ -607,20 +644,24 @@ public class ManagementServiceImpl implements 
ManagementService {
       return CheckType.EDIT;
    }
 
+   // This is only used by tests and left to avoid massive refactoring
    @Override
    public Object getResource(final String resourceName) {
-      return registry.get(resourceName);
+      Object resource = registries.get(resourceName);
+      if (resource == null) {
+         return registries.legacyGetResource(resourceName);
+      }
+      return resource;
    }
 
    @Override
-   public Object[] getResources(final Class<?> resourceType) {
-      List<Object> resources = new ArrayList<>();
-      for (Object entry : new ArrayList<>(registry.values())) {
-         if (resourceType.isAssignableFrom(entry.getClass())) {
-            resources.add(entry);
-         }
-      }
-      return resources.toArray(new Object[resources.size()]);
+   public List<DivertControl>  getDivertControls() {
+      return registries.getDivertControls();
+   }
+
+   @Override
+   public List<BridgeControl> getBridgeControls() {
+      return registries.getBridgeControls();
    }
 
    @Override
@@ -655,26 +696,6 @@ public class ManagementServiceImpl implements 
ManagementService {
       logger.debug("Unregistered from JMX: {}", objectName);
    }
 
-   @Override
-   public void registerInRegistry(final String resourceName, final Object 
managedResource) {
-      Object replaced = registry.put(resourceName, managedResource);
-      String addendum = "";
-      if (replaced != null) {
-         addendum = ". Replaced: " + replaced;
-      }
-      logger.debug("Registered in management: {} as {}{}", resourceName, 
managedResource, addendum);
-   }
-
-   @Override
-   public void unregisterFromRegistry(final String resourceName) {
-      Object removed = registry.remove(resourceName);
-      if (removed != null) {
-         logger.debug("Unregistered from management: {} as {}", resourceName, 
removed);
-      } else {
-         logger.debug("Attempted to unregister {} from management, but it was 
not registered.");
-      }
-   }
-
    @Override
    public void addNotificationListener(final NotificationListener listener) {
       listeners.add(listener);
@@ -734,10 +755,9 @@ public class ManagementServiceImpl implements 
ManagementService {
 
       started = false;
 
-      Set<String> resourceNames = new HashSet<>(registry.keySet());
+      Set<String> resourceNames = registries.unRegisterAll();//new 
HashSet<>(registry.keySet());
 
       for (String resourceName : resourceNames) {
-         unregisterFromRegistry(resourceName);
          unregisterMeters(resourceName);
       }
 
@@ -775,7 +795,7 @@ public class ManagementServiceImpl implements 
ManagementService {
 
       listeners.clear();
 
-      registry.clear();
+      registries.clear();
 
       messagingServer = null;
 
@@ -863,7 +883,10 @@ public class ManagementServiceImpl implements 
ManagementService {
    @Override
    public Object getAttribute(final String resourceName, final String 
attribute, SecurityAuth auth) {
       try {
-         Object resource = registry.get(resourceName);
+         Object resource = registries.get(resourceName);
+         if (resource == null) {
+            resource = registries.legacyGetResource(resourceName);
+         }
 
          if (resource == null) {
             throw 
ActiveMQMessageBundle.BUNDLE.cannotFindResource(resourceName);
@@ -897,7 +920,10 @@ public class ManagementServiceImpl implements 
ManagementService {
                                  final String operation,
                                  final Object[] params,
                                  SecurityAuth auth) throws Exception {
-      Object resource = registry.get(resourceName);
+      Object resource = registries.get(resourceName);
+      if (resource == null) {
+         resource = registries.legacyGetResource(resourceName);
+      }
 
       if (resource == null) {
          throw ActiveMQMessageBundle.BUNDLE.cannotFindResource(resourceName);
diff --git 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/group/impl/ClusteredResetMockTest.java
 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/group/impl/ClusteredResetMockTest.java
index 42a5e17588..e404fdf229 100644
--- 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/group/impl/ClusteredResetMockTest.java
+++ 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/group/impl/ClusteredResetMockTest.java
@@ -19,9 +19,11 @@ package org.apache.activemq.artemis.core.server.group.impl;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Predicate;
 
 import javax.management.ObjectName;
 
@@ -31,9 +33,13 @@ import org.apache.activemq.artemis.api.core.Message;
 import org.apache.activemq.artemis.api.core.RoutingType;
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.api.core.TransportConfiguration;
+import org.apache.activemq.artemis.api.core.management.AcceptorControl;
 import org.apache.activemq.artemis.api.core.management.AddressControl;
+import org.apache.activemq.artemis.api.core.management.BridgeControl;
+import org.apache.activemq.artemis.api.core.management.DivertControl;
 import org.apache.activemq.artemis.api.core.management.ManagementHelper;
 import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
+import org.apache.activemq.artemis.api.core.management.QueueControl;
 import org.apache.activemq.artemis.core.config.ClusterConnectionConfiguration;
 import org.apache.activemq.artemis.core.config.Configuration;
 import 
org.apache.activemq.artemis.core.management.impl.ActiveMQServerControlImpl;
@@ -228,27 +234,47 @@ public class ClusteredResetMockTest extends 
ServerTestBase {
       }
 
       @Override
-      public void unregisterServer() throws Exception {
+      public AddressControl getAddressControl(String resourceName) {
+         return null;
+      }
 
+      @Override
+      public AcceptorControl getAcceptorControl(String resourceName) {
+         return null;
       }
 
       @Override
-      public void registerInJMX(ObjectName objectName, Object managedResource) 
throws Exception {
+      public void registerAMQPControl(String amqpResourceName, Object control) 
{
 
       }
 
       @Override
-      public void unregisterFromJMX(ObjectName objectName) throws Exception {
+      public void unRegisterAMQPControl(String amqpResourceName) {
+
+      }
 
+      @Override
+      public List<DivertControl> getDivertControls() {
+         return List.of();
       }
 
       @Override
-      public void registerInRegistry(String resourceName, Object 
managedResource) {
+      public List<BridgeControl> getBridgeControls() {
+         return List.of();
+      }
+
+      @Override
+      public void unregisterServer() throws Exception {
 
       }
 
       @Override
-      public void unregisterFromRegistry(String resourceName) {
+      public void registerInJMX(ObjectName objectName, Object managedResource) 
throws Exception {
+
+      }
+
+      @Override
+      public void unregisterFromJMX(ObjectName objectName) throws Exception {
 
       }
 
@@ -349,11 +375,6 @@ public class ClusteredResetMockTest extends ServerTestBase 
{
          return null;
       }
 
-      @Override
-      public Object[] getResources(Class<?> resourceType) {
-         return new Object[0];
-      }
-
       @Override
       public ICoreMessage handleMessage(SecurityAuth auth, Message message) 
throws Exception {
          return null;
@@ -379,6 +400,26 @@ public class ClusteredResetMockTest extends ServerTestBase 
{
          return null;
       }
 
+      @Override
+      public List<QueueControl> getQueueControls() {
+         return List.of();
+      }
+
+      @Override
+      public List<QueueControl> getQueueControls(Predicate<QueueControl> 
predicate) {
+         return List.of();
+      }
+
+      @Override
+      public List<AddressControl> getAddressControls() {
+         return List.of();
+      }
+
+      @Override
+      public List<AddressControl> getAddressControls(Predicate<AddressControl> 
predicate) {
+         return List.of();
+      }
+
       @Override
       public void registerBrokerConnection(BrokerConnection brokerConnection) {
 
diff --git 
a/tests/compatibility-tests/src/main/resources/metrics/queueMetrics.groovy 
b/tests/compatibility-tests/src/main/resources/metrics/queueMetrics.groovy
index b8e105d0df..50e246da77 100644
--- a/tests/compatibility-tests/src/main/resources/metrics/queueMetrics.groovy
+++ b/tests/compatibility-tests/src/main/resources/metrics/queueMetrics.groovy
@@ -1,4 +1,7 @@
 package metrics
+
+import org.apache.activemq.artemis.core.version.Version
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements. See the NOTICE file distributed with
@@ -27,9 +30,8 @@ import 
org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
 import org.apache.activemq.artemis.api.core.management.QueueControl;
 
 //validate metrics are recovered
-Object[] queueControls = 
server.getJMSServerManager().getActiveMQServer().getManagementService().getResources(QueueControl.class);
-for (Object o : queueControls) {
-    QueueControl c = (QueueControl) o;
+List<QueueControl> queueControls = 
server.getJMSServerManager().getActiveMQServer().getManagementService().getQueueControls();
+for (QueueControl c : queueControls) {
     if (c.isInternalQueue()) {
         continue;
     }
@@ -38,4 +40,5 @@ for (Object o : queueControls) {
     GroovyRun.assertTrue(c.getDurablePersistentSize() > 0);
     GroovyRun.assertEquals(33l, c.getMessageCount());
     GroovyRun.assertEquals(33l, c.getDurableMessageCount());
- }
+}
+
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationServerToServerTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationServerToServerTest.java
index 693799da18..6faf80eae8 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationServerToServerTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationServerToServerTest.java
@@ -59,7 +59,6 @@ import 
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFedera
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
 import 
org.apache.activemq.artemis.core.server.ComponentConfigurationRoutingType;
 import org.apache.activemq.artemis.core.server.impl.AddressInfo;
-import 
org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConsumerControlType;
 import org.apache.activemq.artemis.protocol.amqp.proton.AmqpSupport;
 import 
org.apache.activemq.artemis.tests.integration.amqp.AmqpClientTestSupport;
 import org.apache.activemq.artemis.tests.util.CFUtil;
@@ -1702,9 +1701,9 @@ public class AMQPFederationServerToServerTest extends 
AmqpClientTestSupport {
       producerR.send(message);
 
       server.start();
-
+      String resourceName = "brokerconnection." + getTestName() + 
".federation." + getTestName();
       // check federation has reconnected
-      Wait.assertTrue(() -> 
server.getManagementService().getResources(AMQPFederationConsumerControlType.class).length
 == 1);
+      Wait.assertTrue(() -> 
server.getManagementService().getResource(resourceName) != null);
       Wait.assertTrue(() -> 
server.bindingQuery(SimpleString.of(getTestName()), 
false).getQueueNames().size() >= 1);
       Wait.assertTrue(() -> 
remoteServer.bindingQuery(SimpleString.of(getTestName()), 
false).getQueueNames().size() >= 1);
 
@@ -1795,9 +1794,9 @@ public class AMQPFederationServerToServerTest extends 
AmqpClientTestSupport {
       producerL.send(message);
 
       remoteServer.start();
-
+      String resourceName = "brokerconnection." + getTestName() + 
".federation." + getTestName() + ".policy.test-policy.consumer." + 
getTestName();
       // check federation has reconnected
-      Wait.assertTrue(() -> 
remoteServer.getManagementService().getResources(AMQPFederationConsumerControlType.class).length
 == 1);
+      Wait.assertTrue(() -> 
remoteServer.getManagementService().getResource(resourceName) != null);
       Wait.assertTrue(() -> 
server.bindingQuery(SimpleString.of(getTestName()), 
false).getQueueNames().size() >= 1);
       Wait.assertTrue(() -> 
remoteServer.bindingQuery(SimpleString.of(getTestName()), 
false).getQueueNames().size() >= 1);
 
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/bridge/BridgeTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/bridge/BridgeTest.java
index 181e6809db..acd400207a 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/bridge/BridgeTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/bridge/BridgeTest.java
@@ -58,7 +58,6 @@ import 
org.apache.activemq.artemis.api.core.client.ClientProducer;
 import org.apache.activemq.artemis.api.core.client.ClientSession;
 import org.apache.activemq.artemis.api.core.client.ClientSessionFactory;
 import org.apache.activemq.artemis.api.core.client.ServerLocator;
-import org.apache.activemq.artemis.api.core.management.BridgeControl;
 import org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl;
 import org.apache.activemq.artemis.core.config.BridgeConfiguration;
 import org.apache.activemq.artemis.core.config.Configuration;
@@ -2148,10 +2147,10 @@ public class BridgeTest extends ActiveMQTestBase {
          .setStaticConnectors(connectors)
          .setConcurrency(concurrency);
       server.deployBridge(config);
-      assertEquals(concurrency, 
server.getManagementService().getResources(BridgeControl.class).length);
+      assertEquals(concurrency, 
server.getManagementService().getBridgeControls().size());
       server.destroyBridge(config.getName());
 
-      assertEquals(0, 
server.getManagementService().getResources(BridgeControl.class).length);
+      assertEquals(0, 
server.getManagementService().getBridgeControls().size());
    }
 
    @TestTemplate
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementServiceImplTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementServiceImplTest.java
index 10583ed8c8..dac15268b4 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementServiceImplTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementServiceImplTest.java
@@ -46,6 +46,8 @@ import org.apache.activemq.artemis.utils.UUID;
 import org.apache.activemq.artemis.utils.UUIDGenerator;
 import org.junit.jupiter.api.Test;
 
+import java.util.List;
+
 public class ManagementServiceImplTest extends ActiveMQTestBase {
 
    @Test
@@ -148,16 +150,16 @@ public class ManagementServiceImplTest extends 
ActiveMQTestBase {
       Queue queue = new FakeQueue(RandomUtil.randomUUIDSimpleString());
       managementService.registerQueue(queue, 
RandomUtil.randomUUIDSimpleString(), new FakeStorageManager());
 
-      Object[] addresses = 
managementService.getResources(AddressControl.class);
-      assertEquals(1, addresses.length);
-      assertInstanceOf(AddressControl.class, addresses[0]);
-      AddressControl addressControl = (AddressControl) addresses[0];
+      List<AddressControl> addresses = managementService.getAddressControls();
+      assertEquals(1, addresses.size());
+      assertInstanceOf(AddressControl.class, addresses.get(0));
+      AddressControl addressControl = (AddressControl) addresses.get(0);
       assertEquals(address.toString(), addressControl.getAddress());
 
-      Object[] queues = managementService.getResources(QueueControl.class);
-      assertEquals(1, queues.length);
-      assertInstanceOf(QueueControl.class, queues[0]);
-      QueueControl queueControl = (QueueControl) queues[0];
+      List<QueueControl> queues = managementService.getQueueControls();
+      assertEquals(1, queues.size());
+      assertInstanceOf(QueueControl.class, queues.get(0));
+      QueueControl queueControl = (QueueControl) queues.get(0);
       assertEquals(queue.getName().toString(), queueControl.getName());
    }
 
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/AdvisoryOpenWireTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/AdvisoryOpenWireTest.java
index f2daf45179..f6c3e86a32 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/AdvisoryOpenWireTest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/AdvisoryOpenWireTest.java
@@ -30,6 +30,7 @@ import javax.jms.Connection;
 import javax.jms.Session;
 import javax.jms.TemporaryQueue;
 import javax.jms.TemporaryTopic;
+import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -78,11 +79,11 @@ public class AdvisoryOpenWireTest extends BasicOpenWireTest 
{
 
    private AddressControl assertNonNullAddressControl(String match) {
       AddressControl advisoryAddressControl = null;
-      Object[] addressResources = 
server.getManagementService().getResources(AddressControl.class);
+      List<AddressControl> addressResources = 
server.getManagementService().getAddressControls();
 
-      for (Object addressResource : addressResources) {
-         if (((AddressControl) addressResource).getAddress().equals(match)) {
-            advisoryAddressControl = (AddressControl) addressResource;
+      for (AddressControl addressResource : addressResources) {
+         if (addressResource.getAddress().equals(match)) {
+            advisoryAddressControl = addressResource;
          }
       }
       assertNotNull(advisoryAddressControl, "addressControl for temp 
advisory");


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to