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]
