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 115f194a6a9..0090c421ef9 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 @@ -37,7 +37,6 @@ import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.TransportConfiguration; import org.apache.activemq.artemis.api.core.management.AddressControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient; import org.apache.activemq.artemis.api.jms.JMSFactoryType; import org.apache.activemq.artemis.core.config.Configuration; @@ -783,7 +782,7 @@ public synchronized boolean destroyTopic(final String name) throws Exception { @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(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 9b8344a50d9..172853a4607 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 static void registerBridgeManager(AMQPBridgeManager bridge) throws Except 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.registerUntypedControl(getBridgeManagerResourceName(brokerConnectionName, bridgeName), + control, + getBridgeManagerObjectName(management, brokerConnectionName, bridgeName)); } /** @@ -127,8 +128,8 @@ public static void unregisterBridgeManager(AMQPBridgeManager bridge) throws Exce final ActiveMQServer server = bridge.getServer(); final ManagementService management = server.getManagementService(); - management.unregisterFromJMX(getBridgeManagerObjectName(management, brokerConnectionName, bridgeName)); - management.unregisterFromRegistry(getBridgeManagerResourceName(brokerConnectionName, bridgeName)); + management.unregisterUntypedControl(getBridgeManagerResourceName(brokerConnectionName, bridgeName), + getBridgeManagerObjectName(management, brokerConnectionName, bridgeName)); } public static String getBridgeManagerResourceName(String brokerConnectionName, String bridgeName) { @@ -159,8 +160,9 @@ public static void registerBridgePolicyManager(AMQPBridgePolicyManager manager) final String bridgeName = bridgeManager.getName(); final String policyName = manager.getPolicyName(); - management.registerInJMX(getBridgePolicyManagerObjectName(management, brokerConnectionName, bridgeName, manager.getPolicyType().toString(), policyName), control); - management.registerInRegistry(getBridgePolicyManagerResourceName(brokerConnectionName, bridgeName, policyName), control); + management.registerUntypedControl(getBridgePolicyManagerResourceName(brokerConnectionName, bridgeName, policyName), + control, + getBridgePolicyManagerObjectName(management, brokerConnectionName, bridgeName, manager.getPolicyType().toString(), policyName)); } /** @@ -179,8 +181,8 @@ public static void unregisterBridgePolicyManager(AMQPBridgePolicyManager manager final String bridgeName = bridgeManager.getName(); final String policyName = manager.getPolicyName(); - management.unregisterFromJMX(getBridgePolicyManagerObjectName(management, brokerConnectionName, bridgeName, manager.getPolicyType().toString(), policyName)); - management.unregisterFromRegistry(getBridgePolicyManagerResourceName(brokerConnectionName, bridgeName, policyName)); + management.unregisterUntypedControl(getBridgePolicyManagerResourceName(brokerConnectionName, bridgeName, policyName), + getBridgePolicyManagerObjectName(management, brokerConnectionName, bridgeName, manager.getPolicyType().toString(), policyName)); } public static String getBridgePolicyManagerResourceName(String brokerConnectionName, String bridgeName, String policyName) { @@ -215,11 +217,13 @@ public static void registerBridgeReceiver(AMQPBridgeReceiver receiver) throws Ex final String policyName = manager.getPolicyName(); 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.registerUntypedControl(getBridgeAddressReceiverResourceName(brokerConnectionName, bridgeName, policyName, receiver.getReceiverInfo().getLocalAddress()), + control, + getBridgeAddressReceiverObjectName(management, brokerConnectionName, bridgeName, manager.getPolicyType().toString(), policyName, receiver.getReceiverInfo().getLocalAddress())); } 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.registerUntypedControl(getBridgeQueueReceiverResourceName(brokerConnectionName, bridgeName, policyName, receiver.getReceiverInfo().getLocalFqqn()), + control, + getBridgeQueueReceiverObjectName(management, brokerConnectionName, bridgeName, manager.getPolicyType().toString(), policyName, receiver.getReceiverInfo().getLocalFqqn())); } } @@ -241,11 +245,11 @@ public static void unregisterBridgeReceiver(AMQPBridgeReceiver receiver) throws final String policyName = manager.getPolicyName(); 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.unregisterUntypedControl(getBridgeAddressReceiverResourceName(brokerConnectionName, bridgeName, policyName, receiver.getReceiverInfo().getLocalAddress()), + getBridgeAddressReceiverObjectName(management, brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 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.unregisterUntypedControl(getBridgeQueueReceiverResourceName(brokerConnectionName, bridgeName, policyName, receiver.getReceiverInfo().getLocalFqqn()), + getBridgeQueueReceiverObjectName(management, brokerConnectionName, bridgeName, manager.getPolicyType().toString(), policyName, receiver.getReceiverInfo().getLocalFqqn())); } } @@ -298,13 +302,15 @@ public static void registerBridgeSender(AMQPBridgeToSenderController sender) thr if (sender.getRole() == SenderRole.ADDRESS_SENDER) { 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.registerUntypedControl(getBridgeAddressSenderResourceName(brokerConnectionName, bridgeName, policyName, address), + control, + getBridgeAddressSenderObjectName(management, brokerConnectionName, bridgeName, manager.getPolicyType().toString(), policyName, address)); } 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.registerUntypedControl(getBridgeQueueSenderResourceName(brokerConnectionName, bridgeName, policyName, fqqn), + control, + getBridgeQueueSenderObjectName(management, brokerConnectionName, bridgeName, manager.getPolicyType().toString(), policyName, fqqn)); } } @@ -328,13 +334,13 @@ public static void unregisterBridgeSender(AMQPBridgeToSenderController sender) t if (sender.getRole() == SenderRole.ADDRESS_SENDER) { 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.unregisterUntypedControl(getBridgeAddressSenderResourceName(brokerConnectionName, bridgeName, policyName, address), + getBridgeAddressSenderObjectName(management, brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 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.unregisterUntypedControl(getBridgeQueueSenderResourceName(brokerConnectionName, bridgeName, policyName, fqqn), + getBridgeQueueSenderObjectName(management, brokerConnectionName, bridgeName, manager.getPolicyType().toString(), 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 6413182f3c8..c42f9715c0a 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 @@ -135,8 +135,9 @@ public static void registerFederationSource(AMQPFederationSource federation) thr final ManagementService management = server.getManagementService(); final AMQPFederationSourceControlType control = new AMQPFederationSourceControlType(server, federation); - management.registerInJMX(getFederationSourceObjectName(management, brokerConnectionName, federationName), control); - management.registerInRegistry(getFederationSourceResourceName(brokerConnectionName, federationName), control); + management.registerUntypedControl(getFederationSourceResourceName(brokerConnectionName, federationName), + control, + getFederationSourceObjectName(management, brokerConnectionName, federationName)); } /** @@ -151,8 +152,8 @@ public static void unregisterFederationSource(AMQPFederationSource federation) t final ActiveMQServer server = federation.getServer(); final ManagementService management = server.getManagementService(); - management.unregisterFromJMX(getFederationSourceObjectName(management, brokerConnectionName, federationName)); - management.unregisterFromRegistry(getFederationSourceResourceName(brokerConnectionName, federationName)); + management.unregisterUntypedControl(getFederationSourceResourceName(brokerConnectionName, federationName), + getFederationSourceObjectName(management, brokerConnectionName, federationName)); } public static String getFederationSourceResourceName(String brokerConnectionName, String federationName) { @@ -178,8 +179,9 @@ public static void registerFederationTarget(String remoteNodeId, String brokerCo final ManagementService management = server.getManagementService(); final AMQPFederationTargetControlType control = new AMQPFederationTargetControlType(server, federation); - management.registerInJMX(getFederationTargetObjectName(management, remoteNodeId, brokerConnectionName, federationName), control); - management.registerInRegistry(getFederationTargetResourceName(remoteNodeId, brokerConnectionName, federationName), control); + management.registerUntypedControl(getFederationTargetResourceName(remoteNodeId, brokerConnectionName, federationName), + control, + getFederationTargetObjectName(management, remoteNodeId, brokerConnectionName, federationName)); } /** @@ -193,8 +195,8 @@ public static void unregisterFederationTarget(String remoteNodeId, String broker final ActiveMQServer server = federation.getServer(); final ManagementService management = server.getManagementService(); - management.unregisterFromJMX(getFederationTargetObjectName(management, remoteNodeId, brokerConnectionName, federationName)); - management.unregisterFromRegistry(getFederationTargetResourceName(remoteNodeId, brokerConnectionName, federationName)); + management.unregisterUntypedControl(getFederationTargetResourceName(remoteNodeId, brokerConnectionName, federationName), + getFederationTargetObjectName(management, remoteNodeId, brokerConnectionName, federationName)); } public static String getFederationTargetResourceName(String remoteNodeId, String brokerConnectionName, String federationName) { @@ -225,8 +227,9 @@ public static void registerLocalPolicyOnSource(String brokerConnectionName, AMQP final String federationName = federation.getName(); final String policyName = manager.getPolicyName(); - management.registerInJMX(getFederationSourcePolicyObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName), control); - management.registerInRegistry(getFederationSourcePolicyResourceName(brokerConnectionName, federationName, policyName), control); + management.registerUntypedControl(getFederationSourcePolicyResourceName(brokerConnectionName, federationName, policyName), + control, + getFederationSourcePolicyObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName)); } /** @@ -243,8 +246,8 @@ public static void unregisterLocalPolicyOnSource(String brokerConnectionName, AM final String federationName = federation.getName(); final String policyName = manager.getPolicyName(); - management.unregisterFromJMX(getFederationSourcePolicyObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName)); - management.unregisterFromRegistry(getFederationSourcePolicyResourceName(brokerConnectionName, federationName, policyName)); + management.unregisterUntypedControl(getFederationSourcePolicyResourceName(brokerConnectionName, federationName, policyName), + getFederationSourcePolicyObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName)); } /** @@ -262,8 +265,9 @@ public static void registerRemotePolicyOnSource(String brokerConnectionName, AMQ final String federationName = federation.getName(); final String policyName = manager.getPolicyName(); - management.registerInJMX(getFederationSourcePolicyObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName), control); - management.registerInRegistry(getFederationSourcePolicyResourceName(brokerConnectionName, federationName, policyName), control); + management.registerUntypedControl(getFederationSourcePolicyResourceName(brokerConnectionName, federationName, policyName), + control, + getFederationSourcePolicyObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName)); } /** @@ -280,8 +284,8 @@ public static void unregisterRemotePolicyOnSource(String brokerConnectionName, A final String federationName = federation.getName(); final String policyName = manager.getPolicyName(); - management.unregisterFromJMX(getFederationSourcePolicyObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName)); - management.unregisterFromRegistry(getFederationSourcePolicyResourceName(brokerConnectionName, federationName, policyName)); + management.unregisterUntypedControl(getFederationSourcePolicyResourceName(brokerConnectionName, federationName, policyName), + getFederationSourcePolicyObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName)); } public static String getFederationSourcePolicyResourceName(String brokerConnectionName, String federationName, String policyName) { @@ -313,8 +317,9 @@ public static void registerLocalPolicyOnTarget(String remoteNodeId, String broke final String federationName = federation.getName(); 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.registerUntypedControl(getFederationTargetPolicyResourceName(remoteNodeId, brokerConnectionName, federationName, policyName), + control, + getFederationTargetPolicyObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName)); } /** @@ -332,8 +337,8 @@ public static void unregisterLocalPolicyOnTarget(String remoteNodeId, String bro final String federationName = federation.getName(); final String policyName = manager.getPolicyName(); - management.unregisterFromJMX(getFederationTargetPolicyObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName)); - management.unregisterFromRegistry(getFederationTargetPolicyResourceName(remoteNodeId, brokerConnectionName, federationName, policyName)); + management.unregisterUntypedControl(getFederationTargetPolicyResourceName(remoteNodeId, brokerConnectionName, federationName, policyName), + getFederationTargetPolicyObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName)); } /** @@ -352,8 +357,9 @@ public static void registerRemotePolicyOnTarget(String remoteNodeId, String brok final String federationName = federation.getName(); 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.registerUntypedControl(getFederationTargetPolicyResourceName(remoteNodeId, brokerConnectionName, federationName, policyName), + control, + getFederationTargetPolicyObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName)); } /** @@ -371,8 +377,8 @@ public static void unregisterRemotePolicyOnTarget(String remoteNodeId, String br final String federationName = federation.getName(); final String policyName = manager.getPolicyName(); - management.unregisterFromJMX(getFederationTargetPolicyObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName)); - management.unregisterFromRegistry(getFederationTargetPolicyResourceName(remoteNodeId, brokerConnectionName, federationName, policyName)); + management.unregisterUntypedControl(getFederationTargetPolicyResourceName(remoteNodeId, brokerConnectionName, federationName, policyName), + getFederationTargetPolicyObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName)); } public static String getFederationTargetPolicyResourceName(String remoteNodeId, String brokerConnectionName, String federationName, String policyName) { @@ -407,11 +413,13 @@ public static void registerFederationSourceConsumer(String brokerConnectionName, final String policyName = manager.getPolicyName(); 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.registerUntypedControl(getFederationSourceAddressConsumerResourceName(brokerConnectionName, federationName, policyName, consumer.getConsumerInfo().getAddress()), + control, + getFederationSourceAddressConsumerObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName, consumer.getConsumerInfo().getAddress())); } 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.registerUntypedControl(getFederationSourceQueueConsumerResourceName(brokerConnectionName, federationName, policyName, consumer.getConsumerInfo().getFqqn()), + control, + getFederationSourceQueueConsumerObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName, consumer.getConsumerInfo().getFqqn())); } } @@ -431,11 +439,11 @@ public static void unregisterFederationSourceConsumer(String brokerConnectionNam final String policyName = manager.getPolicyName(); 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.unregisterUntypedControl(getFederationSourceAddressConsumerResourceName(brokerConnectionName, federationName, policyName, consumer.getConsumerInfo().getAddress()), + getFederationSourceAddressConsumerObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), 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.unregisterUntypedControl(getFederationSourceQueueConsumerResourceName(brokerConnectionName, federationName, policyName, consumer.getConsumerInfo().getFqqn()), + getFederationSourceQueueConsumerObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName, consumer.getConsumerInfo().getFqqn())); } } @@ -457,14 +465,14 @@ public static void registerFederationSourceProducer(String brokerConnectionName, if (sender.getRole() == Role.ADDRESS_PRODUCER) { 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.registerUntypedControl(getFederationSourceAddressProducerResourceName(brokerConnectionName, federationName, policyName, address), + control, + getFederationSourceAddressProducerObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName, address)); } 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.registerUntypedControl(getFederationSourceQueueProducerResourceName(brokerConnectionName, federationName, policyName, fqqn), + control, + getFederationSourceQueueProducerObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName, fqqn)); } } @@ -485,14 +493,12 @@ public static void unregisterFederationSourceProducer(String brokerConnectionNam if (sender.getRole() == Role.ADDRESS_PRODUCER) { 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.unregisterUntypedControl(getFederationSourceAddressProducerResourceName(brokerConnectionName, federationName, policyName, address), + getFederationSourceAddressProducerObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), 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.unregisterUntypedControl(getFederationSourceQueueProducerResourceName(brokerConnectionName, federationName, policyName, fqqn), + getFederationSourceQueueProducerObjectName(management, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName, fqqn)); } } @@ -569,11 +575,13 @@ public static void registerFederationTargetConsumer(String remoteNodeId, String final String policyName = manager.getPolicyName(); 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.registerUntypedControl(getFederationTargetAddressConsumerResourceName(remoteNodeId, brokerConnectionName, federationName, policyName, consumer.getConsumerInfo().getAddress()), + control, + getFederationTargetAddressConsumerObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName, consumer.getConsumerInfo().getAddress())); } 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.registerUntypedControl(getFederationTargetQueueConsumerResourceName(remoteNodeId, brokerConnectionName, federationName, policyName, consumer.getConsumerInfo().getFqqn()), + control, + getFederationTargetQueueConsumerObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName, consumer.getConsumerInfo().getFqqn())); } } @@ -593,11 +601,11 @@ public static void unregisterFederationTargetConsumer(String remoteNodeId, Strin final String policyName = manager.getPolicyName(); 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.unregisterUntypedControl(getFederationTargetAddressConsumerResourceName(remoteNodeId, brokerConnectionName, federationName, policyName, consumer.getConsumerInfo().getAddress()), + getFederationTargetAddressConsumerObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), 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.unregisterUntypedControl(getFederationTargetQueueConsumerResourceName(remoteNodeId, brokerConnectionName, federationName, policyName, consumer.getConsumerInfo().getFqqn()), + getFederationTargetQueueConsumerObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName, consumer.getConsumerInfo().getFqqn())); } } @@ -619,14 +627,14 @@ public static void registerFederationTargetProducer(String remoteNodeId, String if (sender.getRole() == Role.ADDRESS_PRODUCER) { 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.registerUntypedControl(getFederationTargetAddressProducerResourceName(remoteNodeId, brokerConnectionName, federationName, policyName, address), + control, + getFederationTargetAddressProducerObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName, address)); } 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.registerUntypedControl(getFederationTargetQueueProducerResourceName(remoteNodeId, brokerConnectionName, federationName, policyName, fqqn), + control, + getFederationTargetQueueProducerObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), policyName, fqqn)); } } @@ -647,14 +655,12 @@ public static void unregisterFederationTargetProducer(String remoteNodeId, Strin if (sender.getRole() == Role.ADDRESS_PRODUCER) { 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.unregisterUntypedControl(getFederationTargetAddressProducerResourceName(remoteNodeId, brokerConnectionName, federationName, policyName, address), + getFederationTargetAddressProducerObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), 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.unregisterUntypedControl(getFederationTargetQueueProducerResourceName(remoteNodeId, brokerConnectionName, federationName, policyName, fqqn), + getFederationTargetQueueProducerObjectName(management, remoteNodeId, brokerConnectionName, federationName, manager.getPolicyType().toString(), 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 f93d86f089c..7f72ed455c8 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 @@ -63,10 +63,7 @@ import org.apache.activemq.artemis.api.core.TransportConfiguration; import org.apache.activemq.artemis.api.core.client.ActiveMQClient; 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.BridgeControl; import org.apache.activemq.artemis.api.core.management.CoreNotificationType; -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.Parameter; import org.apache.activemq.artemis.api.core.management.QueueControl; @@ -84,8 +81,12 @@ import org.apache.activemq.artemis.core.management.impl.view.ConsumerField; import org.apache.activemq.artemis.core.management.impl.view.ConsumerView; import org.apache.activemq.artemis.core.management.impl.view.ProducerView; +import org.apache.activemq.artemis.core.management.impl.view.QueueField; import org.apache.activemq.artemis.core.management.impl.view.QueueView; import org.apache.activemq.artemis.core.management.impl.view.SessionView; +import org.apache.activemq.artemis.core.management.impl.view.predicate.ActiveMQFilterPredicate; +import org.apache.activemq.artemis.core.management.impl.view.predicate.QueueFilterPredicate; +import org.apache.activemq.artemis.core.management.impl.view.predicate.QueuePredicateFilterPart; import org.apache.activemq.artemis.core.messagecounter.MessageCounterManager; import org.apache.activemq.artemis.core.messagecounter.impl.MessageCounterManagerImpl; import org.apache.activemq.artemis.core.persistence.StorageManager; @@ -1457,8 +1458,7 @@ public int getQueueCount() { clearIO(); try { - Object[] queueControls = server.getManagementService().getResources(QueueControl.class); - return queueControls.length; + return server.getManagementService().getQueueControlCount(); } finally { blockOnIO(); } @@ -1478,19 +1478,20 @@ public String[] getQueueNames(String routingType) { clearIO(); try { - Object[] queueControls = server.getManagementService().getResources(QueueControl.class); - List names = new ArrayList<>(); - for (int i = 0; i < queueControls.length; i++) { - QueueControl queueControl = (QueueControl) queueControls[i]; - if (routingType != null && routingType.length() > 1 && queueControl.getRoutingType().equals(routingType.toUpperCase())) { - names.add(queueControl.getName()); - } else if (routingType == null || routingType.isEmpty()) { - names.add(queueControl.getName()); + if (routingType == null || routingType.isEmpty()) { + List queueNames = server.getManagementService().getQueueControlNames(); + return queueNames.toArray(new String[queueNames.size()]); + } else { + QueueFilterPredicate predicate = new QueueFilterPredicate(null); + predicate.addFilterPart(new QueuePredicateFilterPart(null, QueueField.ROUTING_TYPE.name(), ActiveMQFilterPredicate.Operation.EQUALS.name(), routingType)); + List queueControls = server.getManagementService().getQueueControls(predicate); + String[] names = new String[queueControls.size()]; + for (int i = 0; i < queueControls.size(); i++) { + names[i] = queueControls.get(i).getName(); } - } - String[] result = new String[names.size()]; - return names.toArray(result); + return names; + } } finally { blockOnIO(); } @@ -1505,13 +1506,8 @@ public String[] getClusterConnectionNames() { clearIO(); try { - List names = new ArrayList<>(); - for (ClusterConnection clusterConnection : server.getClusterManager().getClusterConnections()) { - names.add(clusterConnection.getName().toString()); - } - - String[] result = new String[names.size()]; - return names.toArray(result); + List clusterConnectionNames = server.getManagementService().getClusterConnectionControlNames(); + return clusterConnectionNames.toArray(new String[clusterConnectionNames.size()]); } finally { blockOnIO(); } @@ -1571,8 +1567,7 @@ public int getAddressCount() { clearIO(); try { - Object[] addresses = server.getManagementService().getResources(AddressControl.class); - return addresses.length; + return server.getManagementService().getAddressControlCount(); } finally { blockOnIO(); } @@ -1587,13 +1582,8 @@ public String[] getAddressNames() { 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]; - names[i] = address.getAddress(); - } - return names; + List addressNames = server.getManagementService().getAddressControlNames(); + return addressNames.toArray(new String[addressNames.size()]); } finally { blockOnIO(); } @@ -2608,14 +2598,9 @@ public String listAddresses(String options, int page, int pageSize) throws Excep checkStarted(); clearIO(); try { - List 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 +2616,10 @@ public String listQueues(String options, int page, int pageSize) throws Exceptio clearIO(); try { - List 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,14 +3620,8 @@ public String[] getDivertNames() { 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]; - names[i] = divert.getUniqueName(); - } - - return names; + List divertNames = server.getManagementService().getDivertControlNames(); + return divertNames.toArray(new String[divertNames.size()]); } finally { blockOnIO(); } @@ -3789,14 +3763,8 @@ public String[] getBridgeNames() { 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]; - names[i] = bridge.getName(); - } - - return names; + List bridgeNames = server.getManagementService().getBridgeControlNames(); + return bridgeNames.toArray(new String[bridgeNames.size()]); } finally { blockOnIO(); } diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/DivertControlImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/DivertControlImpl.java index ab22f15b034..b15eb4d8c59 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/DivertControlImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/DivertControlImpl.java @@ -18,7 +18,6 @@ import javax.management.MBeanAttributeInfo; import javax.management.MBeanOperationInfo; - import java.util.Collections; import java.util.Map; diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java index 6522c2e1a86..9ba2ea64ad5 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java @@ -20,6 +20,7 @@ import javax.management.MBeanOperationInfo; import javax.management.openmbean.CompositeData; import javax.transaction.xa.Xid; +import java.lang.invoke.MethodHandles; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -27,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.NoSuchElementException; +import java.util.Objects; import org.apache.activemq.artemis.api.core.ActiveMQException; import org.apache.activemq.artemis.api.core.ActiveMQInvalidFilterExpressionException; @@ -43,7 +45,6 @@ import org.apache.activemq.artemis.core.messagecounter.impl.MessageCounterHelper; import org.apache.activemq.artemis.core.persistence.StorageManager; import org.apache.activemq.artemis.core.postoffice.Binding; -import org.apache.activemq.artemis.core.security.SecurityStore; import org.apache.activemq.artemis.core.server.ActiveMQMessageBundle; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.Consumer; @@ -66,8 +67,6 @@ import org.apache.activemq.artemis.utils.collections.LinkedListIterator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.lang.invoke.MethodHandles; -import java.util.Objects; public class QueueControlImpl extends AbstractControl implements QueueControl { @@ -75,15 +74,12 @@ public class QueueControlImpl extends AbstractControl implements QueueControl { public static final int FLUSH_LIMIT = 500; - private final Queue queue; private final String address; private final ActiveMQServer server; - private final StorageManager storageManager; - private final SecurityStore securityStore; private final HierarchicalRepository addressSettingsRepository; private MessageCounter counter; @@ -118,14 +114,11 @@ public QueueControlImpl(final Queue queue, final String address, final ActiveMQServer server, final StorageManager storageManager, - final SecurityStore securityStore, final HierarchicalRepository addressSettingsRepository) throws Exception { super(QueueControl.class, storageManager); this.queue = queue; this.address = address; this.server = server; - this.storageManager = storageManager; - this.securityStore = securityStore; this.addressSettingsRepository = addressSettingsRepository; } diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ActiveMQAbstractView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ActiveMQAbstractView.java index 3aa2bf09a7c..00c55267132 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ActiveMQAbstractView.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ActiveMQAbstractView.java @@ -16,9 +16,8 @@ */ package org.apache.activemq.artemis.core.management.impl.view; -import org.apache.activemq.artemis.json.JsonArrayBuilder; -import org.apache.activemq.artemis.json.JsonObject; -import org.apache.activemq.artemis.json.JsonObjectBuilder; +import org.apache.activemq.artemis.core.management.impl.view.predicate.PredicateFilterPart; + import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -30,13 +29,20 @@ import org.apache.activemq.artemis.api.core.JsonUtil; import org.apache.activemq.artemis.core.management.impl.view.predicate.ActiveMQFilterPredicate; +import org.apache.activemq.artemis.json.JsonArray; +import org.apache.activemq.artemis.json.JsonArrayBuilder; +import org.apache.activemq.artemis.json.JsonObject; +import org.apache.activemq.artemis.json.JsonObjectBuilder; +import org.apache.activemq.artemis.json.JsonValue; import org.apache.activemq.artemis.utils.JsonLoader; -public abstract class ActiveMQAbstractView { +public abstract class ActiveMQAbstractView> { // use this for values which couldn't be retrieved (e.g. an exception was thrown) protected static final String N_A = "n/a"; + private static final String FILTER_ARRAY_FIELD = "searchFilters"; + private static final String FILTER_FIELD = "field"; private static final String FILTER_OPERATION = "operation"; @@ -58,7 +64,7 @@ public abstract class ActiveMQAbstractView { protected Collection collection; - protected ActiveMQFilterPredicate predicate; + protected ActiveMQFilterPredicate predicate; protected String sortField; @@ -73,6 +79,11 @@ public void setCollection(Collection collection) { this.collection = collection; } + public List filter() { + List collect = collection.stream().filter(getPredicate()).collect(Collectors.toList()); + return collect; + } + public String getResultsAsJson(int page, int pageSize) { JsonObjectBuilder obj = JsonLoader.createObjectBuilder(); JsonArrayBuilder array = JsonLoader.createArrayBuilder(); @@ -89,6 +100,21 @@ public String getResultsAsJson(int page, int pageSize) { return obj.build().toString(); } + public String AsJson(int page, int pageSize) { + JsonObjectBuilder obj = JsonLoader.createObjectBuilder(); + JsonArrayBuilder array = JsonLoader.createArrayBuilder(); + for (T element : getPagedResult(page, pageSize)) { + JsonObjectBuilder jsonObjectBuilder = toJson(element); + //toJson() may return a null + if (jsonObjectBuilder != null) { + array.add(jsonObjectBuilder); + } + } + obj.add("data", array); + obj.add("count", collection.size()); + return obj.build().toString(); + } + public List getPagedResult(int page, int pageSize) { List builder = new ArrayList<>(); final int start; @@ -144,9 +170,7 @@ public void setOptions(String options) { json = JsonUtil.readJsonObject(options); } if (predicate != null) { - predicate.setField(json.getString(FILTER_FIELD)); - predicate.setOperation(json.getString(FILTER_OPERATION)); - predicate.setValue(json.getString(FILTER_VALUE)); + predicate.addFilterParts(createFilterPredicates(json)); if ((json.containsKey(SORT_COLUMN) || json.containsKey(SORT_FIELD)) && json.containsKey(SORT_ORDER)) { if (json.containsKey(SORT_COLUMN)) { this.sortField = json.getString(SORT_COLUMN); @@ -158,6 +182,19 @@ public void setOptions(String options) { } } + private List createFilterPredicates(JsonObject json) { + ArrayList predicates = new ArrayList<>(); + JsonArray jsonArray = json.getJsonArray(FILTER_ARRAY_FIELD); + if (jsonArray == null) { + predicates.add(predicate.createFilterPart(json.getString(FILTER_FIELD), json.getString(FILTER_OPERATION), json.getString(FILTER_VALUE))); + } else { + for (JsonValue jsonValue : jsonArray) { + predicates.add(predicate.createFilterPart(((JsonObject)jsonValue).getString(FILTER_FIELD), ((JsonObject)jsonValue).getString(FILTER_OPERATION), ((JsonObject)jsonValue).getString(FILTER_VALUE))); + } + } + return predicates; + } + public abstract Class getClassT(); public abstract JsonObjectBuilder toJson(T obj); diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/AddressView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/AddressView.java index 34635dfe6f7..f6f6cd8d579 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/AddressView.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/AddressView.java @@ -17,12 +17,13 @@ package org.apache.activemq.artemis.core.management.impl.view; import org.apache.activemq.artemis.api.core.management.AddressControl; +import org.apache.activemq.artemis.core.management.impl.view.predicate.AddressPredicateFilterPart; import org.apache.activemq.artemis.json.JsonObjectBuilder; import org.apache.activemq.artemis.core.management.impl.view.predicate.AddressFilterPredicate; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.utils.JsonLoader; -public class AddressView extends ActiveMQAbstractView { +public class AddressView extends ActiveMQAbstractView { private static final String defaultSortField = AddressField.ID.getName(); @@ -31,7 +32,7 @@ public class AddressView extends ActiveMQAbstractView { public AddressView(ActiveMQServer server) { super(); this.server = server; - this.predicate = new AddressFilterPredicate(server); + this.predicate = new AddressFilterPredicate(); } @Override diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConnectionView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConnectionView.java index 3a1fc012000..f16508bf1ce 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConnectionView.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConnectionView.java @@ -22,6 +22,7 @@ import java.util.Set; import java.util.TreeSet; +import org.apache.activemq.artemis.core.management.impl.view.predicate.ConnectionPredicateFilterPart; import org.apache.activemq.artemis.core.management.impl.view.predicate.ConnectionFilterPredicate; import org.apache.activemq.artemis.core.remoting.impl.netty.NettyServerConnection; import org.apache.activemq.artemis.core.server.ActiveMQServer; @@ -31,7 +32,7 @@ import org.apache.activemq.artemis.utils.JsonLoader; import org.apache.activemq.artemis.utils.StringUtil; -public class ConnectionView extends ActiveMQAbstractView { +public class ConnectionView extends ActiveMQAbstractView { private static final String defaultSortField = ConnectionField.CONNECTION_ID.getName(); diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java index a64f30aac90..3f21b5e0871 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java @@ -19,6 +19,7 @@ import java.util.Date; import org.apache.activemq.artemis.core.management.impl.ActiveMQServerControlImpl; +import org.apache.activemq.artemis.core.management.impl.view.predicate.ConsumerPredicateFilterPart; import org.apache.activemq.artemis.core.management.impl.view.predicate.ConsumerFilterPredicate; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.ServerConsumer; @@ -26,7 +27,7 @@ import org.apache.activemq.artemis.json.JsonObjectBuilder; import org.apache.activemq.artemis.utils.JsonLoader; -public class ConsumerView extends ActiveMQAbstractView { +public class ConsumerView extends ActiveMQAbstractView { public static final String CONSUMER_STATUS_OK = "OK"; public static final String CONSUMER_STATUS_ORPHANED = "Orphaned"; diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java index b08e6076f80..71df507b32e 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java @@ -18,6 +18,7 @@ import java.util.Objects; +import org.apache.activemq.artemis.core.management.impl.view.predicate.ProducerPredicateFilterPart; import org.apache.activemq.artemis.core.management.impl.view.predicate.ProducerFilterPredicate; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.ServerProducer; @@ -25,7 +26,7 @@ import org.apache.activemq.artemis.json.JsonObjectBuilder; import org.apache.activemq.artemis.utils.JsonLoader; -public class ProducerView extends ActiveMQAbstractView { +public class ProducerView extends ActiveMQAbstractView { private static final String defaultSortField = ProducerField.CREATION_TIME.getName(); diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java index 80e20014f59..e3d74f4e289 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java @@ -16,6 +16,7 @@ */ package org.apache.activemq.artemis.core.management.impl.view; +import org.apache.activemq.artemis.core.management.impl.view.predicate.QueuePredicateFilterPart; import org.apache.activemq.artemis.json.JsonObjectBuilder; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.management.QueueControl; @@ -24,7 +25,7 @@ import org.apache.activemq.artemis.core.server.Queue; import org.apache.activemq.artemis.utils.JsonLoader; -public class QueueView extends ActiveMQAbstractView { +public class QueueView extends ActiveMQAbstractView { private static final String defaultSortField = QueueField.NAME.getName(); diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java index c9c5369fcde..60205cbb74e 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java @@ -16,6 +16,7 @@ */ package org.apache.activemq.artemis.core.management.impl.view; +import org.apache.activemq.artemis.core.management.impl.view.predicate.SessionPredicateFilterPart; import org.apache.activemq.artemis.json.JsonObjectBuilder; import java.util.Date; import java.util.Objects; @@ -24,7 +25,7 @@ import org.apache.activemq.artemis.core.server.ServerSession; import org.apache.activemq.artemis.utils.JsonLoader; -public class SessionView extends ActiveMQAbstractView { +public class SessionView extends ActiveMQAbstractView { private static final String defaultSortField = SessionField.ID.getName(); diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ActiveMQFilterPredicate.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ActiveMQFilterPredicate.java index c9a680bbd9a..ceda159124a 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ActiveMQFilterPredicate.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ActiveMQFilterPredicate.java @@ -16,170 +16,48 @@ */ package org.apache.activemq.artemis.core.management.impl.view.predicate; -import java.util.Collection; +import java.util.ArrayList; +import java.util.List; import java.util.function.Predicate; - -public class ActiveMQFilterPredicate implements Predicate { +public abstract class ActiveMQFilterPredicate> implements Predicate { public enum Operation { CONTAINS, NOT_CONTAINS, EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN; } - protected String field; - - protected String value; - - protected Operation operation; + private final List filterParts = new ArrayList<>(); public ActiveMQFilterPredicate() { } @Override public boolean test(T input) { - return true; - } - - public String getField() { - return field; - } - - public void setField(String field) { - this.field = field; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public Operation getOperation() { - return operation; - } - - public void setOperation(String operation) { - if (operation != null && !operation.isBlank()) { - this.operation = Operation.valueOf(operation); - } - } - - public boolean matches(Object field) { - if (operation != null) { - return switch (operation) { - case EQUALS -> equals(field, value); - case NOT_EQUALS -> !equals(field, value); - case CONTAINS -> contains(field, value); - case NOT_CONTAINS -> !contains(field, value); - case GREATER_THAN -> false; - case LESS_THAN -> false; - }; - } - return true; - } - - public boolean matchAny(Collection objects) { - for (Object o : objects) { - if (matches(o)) - return true; - } - return false; - } - - public boolean matches(long field) { - long longValue; - if (operation != null) { - - try { - longValue = Long.parseLong(value); - } catch (NumberFormatException ex) { - //cannot compare - if (operation == Operation.NOT_EQUALS || operation == Operation.NOT_CONTAINS) { - return true; - } else { - return false; + if (filterParts.isEmpty()) + return true; + try { + boolean matches = true; + for (V filterPart : filterParts) { + matches = filter(input, filterPart); + if (!matches) { + return matches; } } - - return switch (operation) { - case EQUALS -> field == longValue; - case NOT_EQUALS -> field != longValue; - case CONTAINS -> false; - case NOT_CONTAINS -> true; - case LESS_THAN -> field < longValue; - case GREATER_THAN -> field > longValue; - }; + return matches; + } catch (Exception e) { + return true; } - return true; } - public boolean matches(int field) { - int intValue; - if (operation != null) { - - try { - intValue = Integer.parseInt(value); - } catch (NumberFormatException ex) { - //cannot compare - if (operation == Operation.NOT_EQUALS || operation == Operation.NOT_CONTAINS) { - return true; - } else { - return false; - } - } - - return switch (operation) { - case EQUALS -> field == intValue; - case NOT_EQUALS -> field != intValue; - case CONTAINS -> false; - case NOT_CONTAINS -> true; - case LESS_THAN -> field < intValue; - case GREATER_THAN -> field > intValue; - }; - } - return true; + public void addFilterParts(List filterParts) { + this.filterParts.addAll(filterParts); } - public boolean matches(float field) { - float floatValue; - if (operation != null) { - - try { - floatValue = Float.parseFloat(value); - } catch (NumberFormatException ex) { - //cannot compare - if (operation == Operation.NOT_EQUALS || operation == Operation.NOT_CONTAINS) { - return true; - } else { - return false; - } - } - - return switch (operation) { - case EQUALS -> field == floatValue; - case NOT_EQUALS -> field != floatValue; - case CONTAINS -> false; - case NOT_CONTAINS -> true; - case LESS_THAN -> field < floatValue; - case GREATER_THAN -> field > floatValue; - }; - } - return true; + public void addFilterPart(V filterPart) { + this.filterParts.add(filterPart); } - private boolean equals(Object field, Object value) { - if (field == null) { - return (value == null || value.equals("")); - } - return field.toString().equals(value); - } + protected abstract boolean filter(T input, V filterPart) throws Exception; - private boolean contains(Object field, Object value) { - if (field == null) { - return (value == null || value.equals("")); - } - return field.toString().contains(value.toString()); - } + public abstract V createFilterPart(String field, String operation, String value); } diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/AddressFilterPredicate.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/AddressFilterPredicate.java index af0077a009c..c0cccdc7872 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/AddressFilterPredicate.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/AddressFilterPredicate.java @@ -16,66 +16,20 @@ */ package org.apache.activemq.artemis.core.management.impl.view.predicate; -import java.util.Arrays; - import org.apache.activemq.artemis.api.core.management.AddressControl; -import org.apache.activemq.artemis.core.management.impl.view.AddressField; -import org.apache.activemq.artemis.core.server.ActiveMQServer; - -public class AddressFilterPredicate extends ActiveMQFilterPredicate { - - private AddressField f; - private final ActiveMQServer server; - - public AddressFilterPredicate(ActiveMQServer server) { +public class AddressFilterPredicate extends ActiveMQFilterPredicate { + public AddressFilterPredicate() { super(); - this.server = server; } @Override - public boolean test(AddressControl address) { - if (f == null) - return true; - try { - return switch (f) { - case ID -> matches(address.getId()); - case NAME -> matches(address.getAddress()); - case ROUTING_TYPES -> matchAny(Arrays.asList(address.getRoutingTypes())); - case QUEUE_COUNT -> matches(address.getQueueCount()); - case INTERNAL -> matches(address.isInternal()); - case TEMPORARY -> matches(address.isTemporary()); - case AUTO_CREATED -> matches(address.isAutoCreated()); - case PAUSED -> matches(address.isPaused()); - case CURRENT_DUPLICATE_ID_CACHE_SIZE -> matches(address.getCurrentDuplicateIdCacheSize()); - case RETROACTIVE_RESOURCE -> matches(address.isRetroactiveResource()); - case UNROUTED_MESSAGE_COUNT -> matches(address.getUnRoutedMessageCount()); - case ROUTED_MESSAGE_COUNT -> matches(address.getRoutedMessageCount()); - case MESSAGE_COUNT -> matches(address.getMessageCount()); - case NUMBER_OF_BYTES_PER_PAGE -> matches(address.getNumberOfBytesPerPage()); - case ADDRESS_LIMIT_PERCENT -> matches(address.getAddressLimitPercent()); - case PAGING -> matches(address.isPaging()); - case NUMBER_OF_PAGES -> matches(address.getNumberOfPages()); - case ADDRESS_SIZE -> matches(address.getAddressSize()); - case MAX_PAGE_READ_BYTES -> matches(address.getMaxPageReadBytes()); - case MAX_PAGE_READ_MESSAGES -> matches(address.getMaxPageReadMessages()); - case PREFETCH_PAGE_BYTES -> matches(address.getPrefetchPageBytes()); - case PREFETCH_PAGE_MESSAGES -> matches(address.getPrefetchPageBytes()); - }; - } catch (Exception e) { - return false; - } + protected boolean filter(AddressControl address, AddressPredicateFilterPart filterPart) throws Exception { + return filterPart.filterPart(address); } @Override - public void setField(String field) { - if (field != null && !field.isEmpty()) { - this.f = AddressField.valueOfName(field); - - //for backward compatibility - if (this.f == null) { - this.f = AddressField.valueOf(field); - } - } + public AddressPredicateFilterPart createFilterPart(String field, String operation, String value) { + return new AddressPredicateFilterPart(this, field, operation, value); } } diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/AddressPredicateFilterPart.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/AddressPredicateFilterPart.java new file mode 100644 index 00000000000..2898e06d7e6 --- /dev/null +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/AddressPredicateFilterPart.java @@ -0,0 +1,69 @@ +/* + * 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.management.impl.view.predicate; + +import org.apache.activemq.artemis.api.core.management.AddressControl; +import org.apache.activemq.artemis.core.management.impl.view.AddressField; + +import java.util.Arrays; + +public class AddressPredicateFilterPart extends PredicateFilterPart { + private final AddressFilterPredicate addressFilterPredicate; + private AddressField f; + + public AddressPredicateFilterPart(AddressFilterPredicate addressFilterPredicate, String field, String operation, String value) { + super(operation, value); + this.addressFilterPredicate = addressFilterPredicate; + if (field != null && !field.isEmpty()) { + f = AddressField.valueOfName(field); + + //for backward compatibility + if (f == null) { + f = AddressField.valueOf(field); + } + + } + } + + @Override + public boolean filterPart(AddressControl address) throws Exception { + return switch (f) { + case ID -> matchesLong(address.getId()); + case NAME -> matches(address.getAddress()); + case ROUTING_TYPES -> matchAny(Arrays.asList(address.getRoutingTypes())); + case QUEUE_COUNT -> matchesLong(address.getQueueCount()); + case INTERNAL -> matches(address.isInternal()); + case TEMPORARY -> matches(address.isTemporary()); + case AUTO_CREATED -> matches(address.isAutoCreated()); + case PAUSED -> matches(address.isPaused()); + case CURRENT_DUPLICATE_ID_CACHE_SIZE -> matchesLong(address.getCurrentDuplicateIdCacheSize()); + case RETROACTIVE_RESOURCE -> matches(address.isRetroactiveResource()); + case UNROUTED_MESSAGE_COUNT -> matchesLong(address.getUnRoutedMessageCount()); + case ROUTED_MESSAGE_COUNT -> matchesLong(address.getRoutedMessageCount()); + case MESSAGE_COUNT -> matchesLong(address.getMessageCount()); + case NUMBER_OF_BYTES_PER_PAGE -> matchesLong(address.getNumberOfBytesPerPage()); + case ADDRESS_LIMIT_PERCENT -> matchesLong(address.getAddressLimitPercent()); + case PAGING -> matches(address.isPaging()); + case NUMBER_OF_PAGES -> matchesLong(address.getNumberOfPages()); + case ADDRESS_SIZE -> matchesLong(address.getAddressSize()); + case MAX_PAGE_READ_BYTES -> matchesLong(address.getMaxPageReadBytes()); + case MAX_PAGE_READ_MESSAGES -> matchesLong(address.getMaxPageReadMessages()); + case PREFETCH_PAGE_BYTES -> matchesLong(address.getPrefetchPageBytes()); + case PREFETCH_PAGE_MESSAGES -> matchesLong(address.getPrefetchPageBytes()); + }; + } +} diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConnectionFilterPredicate.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConnectionFilterPredicate.java index b997353d07e..9b6c486f1cf 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConnectionFilterPredicate.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConnectionFilterPredicate.java @@ -16,21 +16,10 @@ */ package org.apache.activemq.artemis.core.management.impl.view.predicate; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; -import java.util.function.Function; - -import org.apache.activemq.artemis.core.management.impl.view.ConnectionField; -import org.apache.activemq.artemis.core.remoting.impl.netty.NettyServerConnection; import org.apache.activemq.artemis.core.server.ActiveMQServer; -import org.apache.activemq.artemis.core.server.ServerSession; import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection; -public class ConnectionFilterPredicate extends ActiveMQFilterPredicate { - - private ConnectionField f; +public class ConnectionFilterPredicate extends ActiveMQFilterPredicate { private ActiveMQServer server; @@ -39,46 +28,12 @@ public ConnectionFilterPredicate(ActiveMQServer server) { } @Override - public boolean test(RemotingConnection connection) { - // Using switch over enum vs string comparison is better for perf. - if (f == null) - return true; - return switch (f) { - case CONNECTION_ID -> matches(connection.getID()); - case CLIENT_ID -> matches(connection.getClientID()); - case USERS -> matchAny(collectFromSessions(connection.getID().toString(), s -> s.getUsername())); - case PROTOCOL -> matches(connection.getProtocolName()); - case SESSION_COUNT -> matches(server.getSessions(connection.getID().toString()).size()); - case REMOTE_ADDRESS -> matches(connection.getTransportConnection().getRemoteAddress()); - case LOCAL_ADDRESS -> matches(connection.getTransportConnection().getLocalAddress()); - case SESSION_ID -> matchAny(server.getSessions(connection.getID().toString())); - case CREATION_TIME -> matches(connection.getCreationTime()); - case IMPLEMENTATION -> matches(connection.getClass().getSimpleName()); - case PROXY_ADDRESS -> matches(NettyServerConnection.getProxyAddress(connection.getTransportConnection())); - case PROXY_PROTOCOL_VERSION -> matches(NettyServerConnection.getProxyProtocolVersion(connection.getTransportConnection())); - }; - } - - Set collectFromSessions(String connectionId, Function getter) { - List sessions = server.getSessions(connectionId); - Set sessionAttributes = new HashSet<>(); - for (ServerSession session : sessions) { - String value = getter.apply(session); - String string = Objects.requireNonNullElse(value, ""); - sessionAttributes.add(string); - } - return sessionAttributes; + protected boolean filter(RemotingConnection input, ConnectionPredicateFilterPart filterPart) throws Exception { + return filterPart.filterPart(input); } @Override - public void setField(String field) { - if (field != null && !field.isEmpty()) { - this.f = ConnectionField.valueOfName(field); - - //for backward compatibility - if (this.f == null) { - this.f = ConnectionField.valueOf(field); - } - } + public ConnectionPredicateFilterPart createFilterPart(String field, String operation, String value) { + return new ConnectionPredicateFilterPart(server, field, operation, value); } } diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConnectionPredicateFilterPart.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConnectionPredicateFilterPart.java new file mode 100644 index 00000000000..47a352258e8 --- /dev/null +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConnectionPredicateFilterPart.java @@ -0,0 +1,78 @@ +/* + * 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.management.impl.view.predicate; + +import org.apache.activemq.artemis.core.management.impl.view.ConnectionField; +import org.apache.activemq.artemis.core.remoting.impl.netty.NettyServerConnection; +import org.apache.activemq.artemis.core.server.ActiveMQServer; +import org.apache.activemq.artemis.core.server.ServerSession; +import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection; + +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.function.Function; + +public class ConnectionPredicateFilterPart extends PredicateFilterPart { + private final ActiveMQServer server; + + private ConnectionField f; + + public ConnectionPredicateFilterPart(ActiveMQServer server, String field, String operation, String value) { + super(operation, value); + this.server = server; + if (field != null && !field.isEmpty()) { + this.f = ConnectionField.valueOfName(field); + + //for backward compatibility + if (this.f == null) { + this.f = ConnectionField.valueOf(field); + } + } + } + + @Override + public boolean filterPart(RemotingConnection connection) throws Exception { + return switch (f) { + case CONNECTION_ID -> matches(connection.getID()); + case CLIENT_ID -> matches(connection.getClientID()); + case USERS -> matchAny(collectFromSessions(connection.getID().toString(), s -> s.getUsername())); + case PROTOCOL -> matches(connection.getProtocolName()); + case SESSION_COUNT -> matchesLong(server.getSessions(connection.getID().toString()).size()); + case REMOTE_ADDRESS -> matches(connection.getTransportConnection().getRemoteAddress()); + case LOCAL_ADDRESS -> matches(connection.getTransportConnection().getLocalAddress()); + case SESSION_ID -> matchAny(server.getSessions(connection.getID().toString())); + case CREATION_TIME -> matchesLong(connection.getCreationTime()); + case IMPLEMENTATION -> matches(connection.getClass().getSimpleName()); + case PROXY_ADDRESS -> matches(NettyServerConnection.getProxyAddress(connection.getTransportConnection())); + case PROXY_PROTOCOL_VERSION -> matches(NettyServerConnection.getProxyProtocolVersion(connection.getTransportConnection())); + }; + } + + Set collectFromSessions(String connectionId, Function getter) { + List sessions = server.getSessions(connectionId); + Set sessionAttributes = new HashSet<>(); + for (ServerSession session : sessions) { + String value = getter.apply(session); + String string = Objects.requireNonNullElse(value, ""); + sessionAttributes.add(string); + } + return sessionAttributes; + } + +} diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConsumerFilterPredicate.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConsumerFilterPredicate.java index 50f4f573cce..216e2075eaf 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConsumerFilterPredicate.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConsumerFilterPredicate.java @@ -16,13 +16,10 @@ */ package org.apache.activemq.artemis.core.management.impl.view.predicate; -import org.apache.activemq.artemis.core.management.impl.view.ConsumerField; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.ServerConsumer; -public class ConsumerFilterPredicate extends ActiveMQFilterPredicate { - - private ConsumerField f; +public class ConsumerFilterPredicate extends ActiveMQFilterPredicate { private final ActiveMQServer server; @@ -32,47 +29,12 @@ public ConsumerFilterPredicate(ActiveMQServer server) { } @Override - public boolean test(ServerConsumer consumer) { - // Using switch over enum vs string comparison is better for perf. - if (f == null) - return true; - return switch (f) { - case ID -> matches(consumer.getSequentialID()); - case SESSION -> matches(consumer.getSessionID()); - case USER -> matches(server.getSessionByID(consumer.getSessionID()).getUsername()); - case VALIDATED_USER -> matches(server.getSessionByID(consumer.getSessionID()).getValidatedUser()); - case ADDRESS -> matches(consumer.getQueue().getAddress()); - case QUEUE -> matches(consumer.getQueue().getName()); - case FILTER -> matches(consumer.getFilterString()); - case PROTOCOL -> - matches(server.getSessionByID(consumer.getSessionID()).getRemotingConnection().getProtocolName()); - case CLIENT_ID -> - matches(server.getSessionByID(consumer.getSessionID()).getRemotingConnection().getClientID()); - case LOCAL_ADDRESS -> - matches(server.getSessionByID(consumer.getSessionID()).getRemotingConnection().getTransportConnection().getLocalAddress()); - case REMOTE_ADDRESS -> - matches(server.getSessionByID(consumer.getSessionID()).getRemotingConnection().getTransportConnection().getRemoteAddress()); - case MESSAGES_IN_TRANSIT -> matches(consumer.getMessagesInTransit()); - case MESSAGES_IN_TRANSIT_SIZE -> matches(consumer.getMessagesInTransitSize()); - case MESSAGES_DELIVERED -> matches(consumer.getMessagesDelivered()); - case MESSAGES_DELIVERED_SIZE -> matches(consumer.getMessagesDeliveredSize()); - case MESSAGES_ACKNOWLEDGED -> matches(consumer.getMessagesAcknowledged()); - case MESSAGES_ACKNOWLEDGED_AWAITING_COMMIT -> matches(consumer.getMessagesAcknowledgedAwaitingCommit()); - case LAST_ACKNOWLEDGED_TIME -> matches(consumer.getLastAcknowledgedTime()); - case LAST_DELIVERED_TIME -> matches(consumer.getLastDeliveredTime()); - default -> true; - }; + protected boolean filter(ServerConsumer consumer, ConsumerPredicateFilterPart filterPart) throws Exception { + return filterPart.filterPart(consumer); } @Override - public void setField(String field) { - if (field != null && !field.isEmpty()) { - this.f = ConsumerField.valueOfName(field); - - //for backward compatibility - if (this.f == null) { - this.f = ConsumerField.valueOf(field); - } - } + public ConsumerPredicateFilterPart createFilterPart(String field, String operation, String value) { + return new ConsumerPredicateFilterPart(server, field, operation, value); } } diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConsumerPredicateFilterPart.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConsumerPredicateFilterPart.java new file mode 100644 index 00000000000..4f81baa4f64 --- /dev/null +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ConsumerPredicateFilterPart.java @@ -0,0 +1,67 @@ +/* + * 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.management.impl.view.predicate; + +import org.apache.activemq.artemis.core.management.impl.view.ConsumerField; +import org.apache.activemq.artemis.core.server.ActiveMQServer; +import org.apache.activemq.artemis.core.server.ServerConsumer; + +public class ConsumerPredicateFilterPart extends PredicateFilterPart { + + private final ActiveMQServer server; + + private ConsumerField f; + + public ConsumerPredicateFilterPart(ActiveMQServer server, String field, String operation, String value) { + super(operation, value); + this.server = server; + if (field != null && !field.isEmpty()) { + this.f = ConsumerField.valueOfName(field); + + //for backward compatibility + if (this.f == null) { + this.f = ConsumerField.valueOf(field); + } + } + } + + @Override + public boolean filterPart(ServerConsumer consumer) throws Exception { + return switch (f) { + case ID -> matchesLong(consumer.getSequentialID()); + case SESSION -> matches(consumer.getSessionID()); + case USER -> matches(server.getSessionByID(consumer.getSessionID()).getUsername()); + case VALIDATED_USER -> matches(server.getSessionByID(consumer.getSessionID()).getValidatedUser()); + case ADDRESS -> matches(consumer.getQueue().getAddress()); + case QUEUE -> matches(consumer.getQueue().getName()); + case FILTER -> matches(consumer.getFilterString()); + case PROTOCOL -> matches(server.getSessionByID(consumer.getSessionID()).getRemotingConnection().getProtocolName()); + case CLIENT_ID -> matches(server.getSessionByID(consumer.getSessionID()).getRemotingConnection().getClientID()); + case LOCAL_ADDRESS -> matches(server.getSessionByID(consumer.getSessionID()).getRemotingConnection().getTransportConnection().getLocalAddress()); + case REMOTE_ADDRESS -> matches(server.getSessionByID(consumer.getSessionID()).getRemotingConnection().getTransportConnection().getRemoteAddress()); + case MESSAGES_IN_TRANSIT -> matchesLong(consumer.getMessagesInTransit()); + case MESSAGES_IN_TRANSIT_SIZE -> matchesLong(consumer.getMessagesInTransitSize()); + case MESSAGES_DELIVERED -> matches(consumer.getMessagesDelivered()); + case MESSAGES_DELIVERED_SIZE -> matchesLong(consumer.getMessagesDeliveredSize()); + case MESSAGES_ACKNOWLEDGED -> matchesLong(consumer.getMessagesAcknowledged()); + case MESSAGES_ACKNOWLEDGED_AWAITING_COMMIT -> matchesLong(consumer.getMessagesAcknowledgedAwaitingCommit()); + case LAST_ACKNOWLEDGED_TIME -> matchesLong(consumer.getLastAcknowledgedTime()); + case LAST_DELIVERED_TIME -> matchesLong(consumer.getLastDeliveredTime()); + default -> true; + }; + } +} diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/PredicateFilterPart.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/PredicateFilterPart.java new file mode 100644 index 00000000000..b1f3ff01838 --- /dev/null +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/PredicateFilterPart.java @@ -0,0 +1,171 @@ +/* + * 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.management.impl.view.predicate; + +import java.util.Collection; + +public class PredicateFilterPart { + + private final String value; + + private final String operation; + + private final ActiveMQFilterPredicate.Operation filterOperation; + + public PredicateFilterPart(String operation, String value) { + this.value = value; + this.operation = operation; + if (operation != null && !operation.isBlank()) { + this.filterOperation = ActiveMQFilterPredicate.Operation.valueOf(operation); + } else { + filterOperation = null; + } + } + + public String getOperation() { + return operation; + } + + public String getValue() { + return value; + } + + public ActiveMQFilterPredicate.Operation getFilterOperation() { + return filterOperation; + } + + public boolean filterPart(T input) throws Exception { + return true; + } + public boolean matchesLong(long field) { + long longValue; + if (operation != null) { + + try { + longValue = Long.parseLong(value); + } catch (NumberFormatException ex) { + //cannot compare + if (filterOperation == ActiveMQFilterPredicate.Operation.NOT_EQUALS || filterOperation == ActiveMQFilterPredicate.Operation.NOT_CONTAINS) { + return true; + } else { + return false; + } + } + + return switch (filterOperation) { + case EQUALS -> field == longValue; + case NOT_EQUALS -> field != longValue; + case CONTAINS -> false; + case NOT_CONTAINS -> true; + case LESS_THAN -> field < longValue; + case GREATER_THAN -> field > longValue; + }; + } + return true; + } + + public boolean matches(Object field) { + if (filterOperation != null) { + return switch (filterOperation) { + case EQUALS -> equals(field, value); + case NOT_EQUALS -> !equals(field, value); + case CONTAINS -> contains(field, value); + case NOT_CONTAINS -> !contains(field, value); + case GREATER_THAN -> false; + case LESS_THAN -> false; + }; + } + return true; + } + + + public boolean matchesInt(int field) { + int intValue; + if (filterOperation != null) { + + try { + intValue = Integer.parseInt(value); + } catch (NumberFormatException ex) { + //cannot compare + if (filterOperation == ActiveMQFilterPredicate.Operation.NOT_EQUALS || filterOperation == ActiveMQFilterPredicate.Operation.NOT_CONTAINS) { + return true; + } else { + return false; + } + } + + return switch (filterOperation) { + case EQUALS -> field == intValue; + case NOT_EQUALS -> field != intValue; + case CONTAINS -> false; + case NOT_CONTAINS -> true; + case LESS_THAN -> field < intValue; + case GREATER_THAN -> field > intValue; + }; + } + return true; + } + + + public boolean matchesFloat(float field) { + float floatValue; + if (operation != null) { + + try { + floatValue = Float.parseFloat(value); + } catch (NumberFormatException ex) { + //cannot compare + if (filterOperation == ActiveMQFilterPredicate.Operation.NOT_EQUALS || filterOperation == ActiveMQFilterPredicate.Operation.NOT_CONTAINS) { + return true; + } else { + return false; + } + } + + return switch (filterOperation) { + case EQUALS -> field == floatValue; + case NOT_EQUALS -> field != floatValue; + case CONTAINS -> false; + case NOT_CONTAINS -> true; + case LESS_THAN -> field < floatValue; + case GREATER_THAN -> field > floatValue; + }; + } + return true; + } + public boolean matchAny(Collection objects) { + for (Object o : objects) { + if (matches(o)) + return true; + } + return false; + } + + private boolean equals(Object field, Object value) { + if (field == null) { + return (value == null || value.equals("")); + } + return field.toString().equals(value); + } + + private boolean contains(Object field, Object value) { + if (field == null) { + return (value == null || value.equals("")); + } + return field.toString().contains(value.toString()); + } +} diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ProducerFilterPredicate.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ProducerFilterPredicate.java index 6552e734fe1..5669469c6d8 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ProducerFilterPredicate.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ProducerFilterPredicate.java @@ -16,13 +16,10 @@ */ package org.apache.activemq.artemis.core.management.impl.view.predicate; -import org.apache.activemq.artemis.core.management.impl.view.ProducerField; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.ServerProducer; -public class ProducerFilterPredicate extends ActiveMQFilterPredicate { - - private ProducerField f; +public class ProducerFilterPredicate extends ActiveMQFilterPredicate { private final ActiveMQServer server; @@ -32,38 +29,12 @@ public ProducerFilterPredicate(ActiveMQServer server) { } @Override - public boolean test(ServerProducer producer) { - // Using switch over enum vs string comparison is better for perf. - if (f == null) - return true; - return switch (f) { - case ID -> matches(producer.getID()); - case CONNECTION_ID -> matches(producer.getConnectionID()); - case SESSION -> matches(producer.getSessionID()); - case USER -> matches(server.getSessionByID(producer.getSessionID()).getUsername()); - case VALIDATED_USER -> matches(server.getSessionByID(producer.getSessionID()).getValidatedUser()); - case ADDRESS -> - matches(producer.getAddress() != null ? producer.getAddress() : server.getSessionByID(producer.getSessionID()).getDefaultAddress()); - case PROTOCOL -> matches(producer.getProtocol()); - case CLIENT_ID -> - matches(server.getSessionByID(producer.getSessionID()).getRemotingConnection().getClientID()); - case LOCAL_ADDRESS -> - matches(server.getSessionByID(producer.getSessionID()).getRemotingConnection().getTransportConnection().getLocalAddress()); - case REMOTE_ADDRESS -> - matches(server.getSessionByID(producer.getSessionID()).getRemotingConnection().getTransportConnection().getRemoteAddress()); - default -> true; - }; + protected boolean filter(ServerProducer producer, ProducerPredicateFilterPart filterPart) throws Exception { + return filterPart.filterPart(producer); } @Override - public void setField(String field) { - if (field != null && !field.isEmpty()) { - this.f = ProducerField.valueOfName(field); - - //for backward compatibility - if (this.f == null) { - this.f = ProducerField.valueOf(field); - } - } + public ProducerPredicateFilterPart createFilterPart(String field, String operation, String value) { + return new ProducerPredicateFilterPart(server, field, operation, value); } } diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ProducerPredicateFilterPart.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ProducerPredicateFilterPart.java new file mode 100644 index 00000000000..35aa06794d5 --- /dev/null +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/ProducerPredicateFilterPart.java @@ -0,0 +1,58 @@ +/* + * 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.management.impl.view.predicate; + +import org.apache.activemq.artemis.core.management.impl.view.ProducerField; +import org.apache.activemq.artemis.core.server.ActiveMQServer; +import org.apache.activemq.artemis.core.server.ServerProducer; + +public class ProducerPredicateFilterPart extends PredicateFilterPart { + + private final ActiveMQServer server; + + private ProducerField f; + + public ProducerPredicateFilterPart(ActiveMQServer server, String field, String operation, String value) { + super(operation, value); + this.server = server; + if (field != null && !field.isEmpty()) { + this.f = ProducerField.valueOfName(field); + + //for backward compatibility + if (this.f == null) { + this.f = ProducerField.valueOf(field); + } + } + } + + @Override + public boolean filterPart(ServerProducer producer) throws Exception { + return switch (f) { + case ID -> matchesLong(producer.getID()); + case CONNECTION_ID -> matches(producer.getConnectionID()); + case SESSION -> matches(producer.getSessionID()); + case USER -> matches(server.getSessionByID(producer.getSessionID()).getUsername()); + case VALIDATED_USER -> matches(server.getSessionByID(producer.getSessionID()).getValidatedUser()); + case ADDRESS -> matches(producer.getAddress() != null ? producer.getAddress() : server.getSessionByID(producer.getSessionID()).getDefaultAddress()); + case PROTOCOL -> matches(producer.getProtocol()); + case CLIENT_ID -> matches(server.getSessionByID(producer.getSessionID()).getRemotingConnection().getClientID()); + case LOCAL_ADDRESS -> matches(server.getSessionByID(producer.getSessionID()).getRemotingConnection().getTransportConnection().getLocalAddress()); + case REMOTE_ADDRESS -> matches(server.getSessionByID(producer.getSessionID()).getRemotingConnection().getTransportConnection().getRemoteAddress()); + default -> true; + }; + } +} diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/QueueFilterPredicate.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/QueueFilterPredicate.java index 87314db48ce..0d846e3a085 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/QueueFilterPredicate.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/QueueFilterPredicate.java @@ -16,14 +16,11 @@ */ package org.apache.activemq.artemis.core.management.impl.view.predicate; -import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.management.QueueControl; import org.apache.activemq.artemis.core.management.impl.view.QueueField; import org.apache.activemq.artemis.core.server.ActiveMQServer; -import org.apache.activemq.artemis.core.server.Consumer; -import org.apache.activemq.artemis.core.server.Queue; -public class QueueFilterPredicate extends ActiveMQFilterPredicate { +public class QueueFilterPredicate extends ActiveMQFilterPredicate { private QueueField f; @@ -35,58 +32,12 @@ public QueueFilterPredicate(ActiveMQServer server) { } @Override - public boolean test(QueueControl queue) { - if (f == null) - return true; - try { - return switch (f) { - case ID -> matches(queue.getID()); - case NAME -> matches(queue.getName()); - case CONSUMER_ID -> { - Queue q = server.locateQueue(SimpleString.of(queue.getName())); - for (Consumer consumer : q.getConsumers()) { - if (matches(consumer.sequentialID())) - yield true; - } - yield false; - } - case MAX_CONSUMERS -> matches(queue.getMaxConsumers()); - case ADDRESS -> matches(queue.getAddress()); - case FILTER -> matches(queue.getFilter()); - case MESSAGE_COUNT -> matches(queue.getMessageCount()); - case CONSUMER_COUNT -> matches(queue.getConsumerCount()); - case DELIVERING_COUNT -> matches(queue.getDeliveringCount()); - case MESSAGES_ADDED -> matches(queue.getMessagesAdded()); - case MESSAGES_ACKED -> matches(queue.getMessagesAcknowledged()); - case MESSAGES_EXPIRED -> matches(queue.getMessagesExpired()); - case ROUTING_TYPE -> matches(queue.getRoutingType()); - case AUTO_CREATED -> matches(server.locateQueue(SimpleString.of(queue.getName())).isAutoCreated()); - case DURABLE -> matches(queue.isDurable()); - case PAUSED -> matches(queue.isPaused()); - case TEMPORARY -> matches(queue.isTemporary()); - case PURGE_ON_NO_CONSUMERS -> matches(queue.isPurgeOnNoConsumers()); - case MESSAGES_KILLED -> matches(queue.getMessagesKilled()); - case EXCLUSIVE -> matches(queue.isExclusive()); - case LAST_VALUE -> matches(queue.isLastValue()); - case SCHEDULED_COUNT -> matches(queue.getScheduledCount()); - case USER -> matches(queue.getUser()); - case INTERNAL_QUEUE -> matches(queue.isInternalQueue()); - default -> true; - }; - } catch (Exception e) { - return true; - } + protected boolean filter(QueueControl queue, QueuePredicateFilterPart filterPart) throws Exception { + return filterPart.filterPart(queue); } @Override - public void setField(String field) { - if (field != null && !field.isEmpty()) { - this.f = QueueField.valueOfName(field); - - //for backward compatibility - if (this.f == null) { - this.f = QueueField.valueOf(field); - } - } + public QueuePredicateFilterPart createFilterPart(String field, String operation, String value) { + return new QueuePredicateFilterPart(server, field, operation, value); } } diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/QueuePredicateFilterPart.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/QueuePredicateFilterPart.java new file mode 100644 index 00000000000..abb7d4a3a7b --- /dev/null +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/QueuePredicateFilterPart.java @@ -0,0 +1,80 @@ +/* + * 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.management.impl.view.predicate; + +import org.apache.activemq.artemis.api.core.SimpleString; +import org.apache.activemq.artemis.api.core.management.QueueControl; +import org.apache.activemq.artemis.core.management.impl.view.QueueField; +import org.apache.activemq.artemis.core.server.ActiveMQServer; +import org.apache.activemq.artemis.core.server.Consumer; +import org.apache.activemq.artemis.core.server.Queue; + +public class QueuePredicateFilterPart extends PredicateFilterPart { + private final ActiveMQServer server; + private QueueField f; + + public QueuePredicateFilterPart(ActiveMQServer server, String field, String operation, String value) { + super(operation, value); + this.server = server; + if (field != null && !field.isEmpty()) { + f = QueueField.valueOfName(field); + + //for backward compatibility + if (f == null) { + f = QueueField.valueOf(field); + } + } + } + + @Override + public boolean filterPart(QueueControl queue) { + return switch (f) { + case ID -> matchesLong(queue.getID()); + case NAME -> matches(queue.getName()); + case CONSUMER_ID -> { + Queue q = server.locateQueue(SimpleString.of(queue.getName())); + for (Consumer consumer : q.getConsumers()) { + if (matchesLong(consumer.sequentialID())) + yield true; + } + yield false; + } + case MAX_CONSUMERS -> matchesInt(queue.getMaxConsumers()); + case ADDRESS -> matches(queue.getAddress()); + case FILTER -> matches(queue.getFilter()); + case MESSAGE_COUNT -> matchesLong(queue.getMessageCount()); + case CONSUMER_COUNT -> matchesInt(queue.getConsumerCount()); + case DELIVERING_COUNT -> matchesInt(queue.getDeliveringCount()); + case MESSAGES_ADDED -> matchesLong(queue.getMessagesAdded()); + case MESSAGES_ACKED -> matchesLong(queue.getMessagesAcknowledged()); + case MESSAGES_EXPIRED -> matchesLong(queue.getMessagesExpired()); + case ROUTING_TYPE -> matches(queue.getRoutingType()); + case AUTO_CREATED -> matches(server.locateQueue(SimpleString.of(queue.getName())).isAutoCreated()); + case DURABLE -> matches(queue.isDurable()); + case PAUSED -> matches(queue.isPaused()); + case TEMPORARY -> matches(queue.isTemporary()); + case PURGE_ON_NO_CONSUMERS -> matches(queue.isPurgeOnNoConsumers()); + case MESSAGES_KILLED -> matchesLong(queue.getMessagesKilled()); + case EXCLUSIVE -> matches(queue.isExclusive()); + case LAST_VALUE -> matches(queue.isLastValue()); + case SCHEDULED_COUNT -> matchesLong(queue.getScheduledCount()); + case USER -> matches(queue.getUser()); + case INTERNAL_QUEUE -> matches(queue.isInternalQueue()); + default -> true; + }; + } +} diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/SessionFilterPredicate.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/SessionFilterPredicate.java index 50a40ae6f9b..d95b9eb2f35 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/SessionFilterPredicate.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/SessionFilterPredicate.java @@ -16,44 +16,21 @@ */ package org.apache.activemq.artemis.core.management.impl.view.predicate; -import org.apache.activemq.artemis.core.management.impl.view.SessionField; import org.apache.activemq.artemis.core.server.ServerSession; -public class SessionFilterPredicate extends ActiveMQFilterPredicate { - - private SessionField f; +public class SessionFilterPredicate extends ActiveMQFilterPredicate { public SessionFilterPredicate() { super(); } @Override - public boolean test(ServerSession session) { - // Using switch over enum vs string comparison is better for perf. - if (f == null) - return true; - return switch (f) { - case ID -> matches(session.getName()); - case CONNECTION_ID -> matches(session.getConnectionID()); - case CONSUMER_COUNT -> matches(session.getServerConsumers().size()); - case PRODUCER_COUNT -> matches(session.getServerProducers().size()); - case PROTOCOL -> matches(session.getRemotingConnection().getProtocolName()); - case CLIENT_ID -> matches(session.getRemotingConnection().getClientID()); - case LOCAL_ADDRESS -> matches(session.getRemotingConnection().getTransportConnection().getLocalAddress()); - case REMOTE_ADDRESS -> matches(session.getRemotingConnection().getTransportConnection().getRemoteAddress()); - default -> true; - }; + public SessionPredicateFilterPart createFilterPart(String field, String operation, String value) { + return new SessionPredicateFilterPart(field, operation, value); } @Override - public void setField(String field) { - if (field != null && !field.isEmpty()) { - this.f = SessionField.valueOfName(field); - - //for backward compatibility - if (this.f == null) { - this.f = SessionField.valueOf(field); - } - } + protected boolean filter(ServerSession session, SessionPredicateFilterPart filterPart) throws Exception { + return filterPart.filterPart(session); } } diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/SessionPredicateFilterPart.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/SessionPredicateFilterPart.java new file mode 100644 index 00000000000..0cc5c4b8df7 --- /dev/null +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/predicate/SessionPredicateFilterPart.java @@ -0,0 +1,52 @@ +/* + * 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.management.impl.view.predicate; + +import org.apache.activemq.artemis.core.management.impl.view.SessionField; +import org.apache.activemq.artemis.core.server.ServerSession; + +public class SessionPredicateFilterPart extends PredicateFilterPart { + + private SessionField f; + + public SessionPredicateFilterPart(String field, String operation, String value) { + super(operation, value); + if (field != null && !field.isEmpty()) { + f = SessionField.valueOfName(field); + + //for backward compatibility + if (f == null) { + f = SessionField.valueOf(field); + } + } + } + + @Override + public boolean filterPart(ServerSession session) throws Exception { + return switch (f) { + case ID -> matches(session.getName()); + case CONNECTION_ID -> matches(session.getConnectionID()); + case CONSUMER_COUNT -> matchesLong(session.getServerConsumers().size()); + case PRODUCER_COUNT -> matchesLong(session.getServerProducers().size()); + case PROTOCOL -> matches(session.getRemotingConnection().getProtocolName()); + case CLIENT_ID -> matches(session.getRemotingConnection().getClientID()); + case LOCAL_ADDRESS -> matches(session.getRemotingConnection().getTransportConnection().getLocalAddress()); + case REMOTE_ADDRESS -> matches(session.getRemotingConnection().getTransportConnection().getRemoteAddress()); + default -> true; + }; + } +} 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 932a5fb2567..d9c5780f4cf 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 @@ -56,7 +56,6 @@ import org.apache.activemq.artemis.api.core.Pair; 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.ResourceNames; import org.apache.activemq.artemis.core.config.Configuration; import org.apache.activemq.artemis.core.config.ConfigurationUtils; import org.apache.activemq.artemis.core.protocol.core.CoreRemotingConnection; @@ -1081,9 +1080,9 @@ private void addAcceptorStoreReloadCallback(String acceptorName, URL storeURL, S 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(acceptorName); + if (targetControl != null) { + targetControl.reload(); } } }); diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java index 14435225418..04618745cb6 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java @@ -19,7 +19,6 @@ import javax.naming.NamingException; import javax.transaction.xa.Xid; import java.io.File; -import java.util.List; import java.util.concurrent.ExecutorService; import io.netty.channel.Channel; @@ -51,7 +50,7 @@ /** * Logger Codes 220000 - 228999 */ -@LogBundle(projectCode = "AMQ", regexID = "22[0-8][0-9]{3}", retiredIDs = {221026, 221052, 222003, 222012, 222015, 222020, 222021, 222022, 222024, 222027, 222028, 222029, 222048, 222052, 222058, 222064, 222071, 222078, 222079, 222083, 222084, 222088, 222090, 222102, 222105, 222110, 222128, 222134, 222135, 222152, 222159, 222163, 222167, 222170, 222171, 222182, 222190, 222192, 222193, 222204, 222249, 222252, 222255, 222257, 222259, 222260, 222276, 222277, 222288, 224001, 224002, 224003, 224005, 224013, 224031, 224035, 224070, 224100, 224121}) +@LogBundle(projectCode = "AMQ", regexID = "22[0-8][0-9]{3}", retiredIDs = {221026, 221052, 222003, 222012, 222015, 222020, 222021, 222022, 222024, 222027, 222028, 222029, 222048, 222052, 222058, 222064, 222071, 222078, 222079, 222083, 222084, 222088, 222090, 222102, 222105, 222110, 222113, 222128, 222134, 222135, 222152, 222159, 222163, 222167, 222170, 222171, 222182, 222190, 222192, 222193, 222204, 222249, 222252, 222255, 222257, 222259, 222260, 222276, 222277, 222288, 224001, 224002, 224003, 224005, 224013, 224031, 224035, 224070, 224100, 224121}) public interface ActiveMQServerLogger { // Note: logger ID 224127 uses "org.apache.activemq.artemis.core.server.Queue" for its logger category, rather than ActiveMQServerLogger.class.getPackage().getName() @@ -582,9 +581,6 @@ void slowConsumerDetected(String sessionID, @LogMessage(id = 222112, value = "exception while retrieving attribute {} on {}", level = LogMessage.Level.TRACE) void managementAttributeError(String att, String resourceName, Exception e); - @LogMessage(id = 222113, value = "On ManagementService stop, there are {} unexpected registered MBeans: {}", level = LogMessage.Level.WARN) - void managementStopError(Integer size, List unexpectedResourceNames); - @LogMessage(id = 222114, value = "Unable to delete group binding info {}", level = LogMessage.Level.WARN) void unableToDeleteGroupBindings(SimpleString groupId, Exception e); 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 8ad304fe80f..099b363610e 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,10 +16,11 @@ */ package org.apache.activemq.artemis.core.server.management; +import javax.management.ObjectName; +import java.util.List; import java.util.Set; import java.util.concurrent.ScheduledExecutorService; - -import javax.management.ObjectName; +import java.util.function.Predicate; import org.apache.activemq.artemis.api.core.BroadcastGroupConfiguration; import org.apache.activemq.artemis.api.core.ICoreMessage; @@ -27,8 +28,19 @@ 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.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.ObjectNameBuilder; +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.config.ClusterConnectionConfiguration; import org.apache.activemq.artemis.core.config.Configuration; import org.apache.activemq.artemis.core.management.impl.ActiveMQServerControlImpl; @@ -58,7 +70,6 @@ import org.apache.activemq.artemis.spi.core.remoting.Acceptor; public interface ManagementService extends NotificationService, ActiveMQComponent { - // Configuration MessageCounterManager getMessageCounterManager(); @@ -68,10 +79,51 @@ public interface ManagementService extends NotificationService, ActiveMQComponen ObjectNameBuilder getObjectNameBuilder(); - // Resource Registration - void setStorageManager(StorageManager storageManager); + /** + * @deprecated use one of the other register methods instead, they will register the control in JMX assuming it is + * enabled: + *
    + *
  • {@link #registerServer} + *
  • {@link #registerAddress} + *
  • {@link #registerQueue} + *
  • {@link #registerAcceptor} + *
  • {@link #registerDivert} + *
  • {@link #registerBroadcastGroup} + *
  • {@link #registerBridge} + *
  • {@link #registerCluster} + *
  • {@link #registerConnectionRouter} + *
  • {@link #registerBrokerConnection} + *
  • {@link #registerRemoteBrokerConnection} + *
  • {@link #registerHawtioSecurity} + *
  • {@link #registerUntypedControl} + *
+ */ + @Deprecated(forRemoval = true) + void registerInJMX(ObjectName objectName, Object managedResource) throws Exception; + + /** + * @deprecated use one of the other unregister methods instead: + *
    + *
  • {@link #unregisterServer} + *
  • {@link #unregisterAddress} + *
  • {@link #unregisterQueue} + *
  • {@link #unregisterAcceptor} + *
  • {@link #unregisterDivert} + *
  • {@link #unregisterBroadcastGroup} + *
  • {@link #unregisterBridge} + *
  • {@link #unregisterCluster} + *
  • {@link #unregisterConnectionRouter} + *
  • {@link #unregisterBrokerConnection} + *
  • {@link #unregisterRemoteBrokerConnection} + *
  • {@link #unregisterHawtioSecurity} + *
  • {@link #unregisterUntypedControl} + *
+ */ + @Deprecated(forRemoval = true) + void unregisterFromJMX(ObjectName objectName) throws Exception; + ActiveMQServerControlImpl registerServer(PostOffice postOffice, SecurityStore securityStore, StorageManager storageManager, @@ -88,75 +140,182 @@ ActiveMQServerControlImpl registerServer(PostOffice postOffice, void unregisterServer() throws Exception; - void registerInJMX(ObjectName objectName, Object managedResource) throws Exception; + ActiveMQServerControl getServerControl(); - void unregisterFromJMX(ObjectName objectName) throws Exception; + void registerAddress(AddressInfo addressInfo) throws Exception; - void registerInRegistry(String resourceName, Object managedResource); + void unregisterAddress(SimpleString address) throws Exception; - void unregisterFromRegistry(String resourceName); + int getAddressControlCount(); - void registerAddress(AddressInfo addressInfo) throws Exception; + List getAddressControls(); - void registerAddressMeters(AddressInfo addressInfo, AddressControl addressControl) throws Exception; + List getAddressControls(Predicate predicate); - void unregisterAddress(SimpleString address) throws Exception; + AddressControl getAddressControl(String name); void registerQueue(Queue queue, SimpleString address, StorageManager storageManager) throws Exception; void unregisterQueue(SimpleString name, SimpleString address, RoutingType routingType) throws Exception; + int getQueueControlCount(); + + List getQueueControls(); + + List getQueueControls(Predicate predicate); + + QueueControl getQueueControl(String name); + + List getQueueControlNames(); + void registerAcceptor(Acceptor acceptor, TransportConfiguration configuration) throws Exception; void unregisterAcceptor(String acceptorName) throws Exception; void unregisterAcceptors(); + List getAcceptorControls(); + + AcceptorControl getAcceptorControl(String name); + + List getAddressControlNames(); + void registerDivert(Divert divert) throws Exception; void unregisterDivert(SimpleString name, SimpleString address) throws Exception; - void registerBroadcastGroup(BroadcastGroup broadcastGroup, - BroadcastGroupConfiguration configuration) throws Exception; + List getDivertControls(); - void unregisterBroadcastGroup(String name) throws Exception; + List getDivertControlNames(); - // void registerDiscoveryGroup(DiscoveryGroup discoveryGroup, DiscoveryGroupConfiguration configuration) throws Exception; + void registerBroadcastGroup(BroadcastGroup broadcastGroup, BroadcastGroupConfiguration configuration) throws Exception; - //void unregisterDiscoveryGroup(String name) throws Exception; + void unregisterBroadcastGroup(String name) throws Exception; + + List getBroadcastGroupControls(); void registerBridge(Bridge bridge) throws Exception; void unregisterBridge(String name) throws Exception; + List getBridgeControls(); + + List getBridgeControlNames(); + + int getBridgeControlCount(); + void registerCluster(ClusterConnection cluster, ClusterConnectionConfiguration configuration) throws Exception; void unregisterCluster(String name) throws Exception; + List getClusterConnectionControls(); + + List getClusterConnectionControlNames(); + void registerConnectionRouter(ConnectionRouter router) throws Exception; void unregisterConnectionRouter(String name) throws Exception; + List getConnectionRouterControls(); + + ConnectionRouterControl getConnectionRouterControl(String name); + void registerBrokerConnection(BrokerConnection brokerConnection) throws Exception; void unregisterBrokerConnection(String name) throws Exception; + List getBrokerConnectionControls(); + + BrokerConnectionControl getBrokerConnectionControl(String name); + + RemoteBrokerConnectionControl getRemoteBrokerConnectionControl(String name); + void registerRemoteBrokerConnection(RemoteBrokerConnection brokerConnection) throws Exception; void unregisterRemoteBrokerConnection(String nodeId, String name) throws Exception; + List getRemoteBrokerConnectionControls(); + + void registerHawtioSecurity(GuardInvocationHandler guardInvocationHandler) throws Exception; + + void unregisterHawtioSecurity() throws Exception; + + HawtioSecurityControl getHawtioSecurity(); + + /** + * Registers an untyped control with the specified name, control object, and associated ObjectName. + *

+ * Use this for management controls not explicitly supported by other typed methods. + * + * @param name the unique name used to identify the untyped control; must not be null or empty + * @param control the untyped control object to be registered; must not be null + * @param objectName the MBean object name to be associated with the control; must not be null + * @throws Exception if an error occurs during registration + */ + void registerUntypedControl(String name, Object control, ObjectName objectName) throws Exception; + + /** + * Unregisters an untyped control associated with the specified name and ObjectName. + * + * @param name the name of the control to be unregistered + * @param objectName the ObjectName associated with the control to be unregistered + * @throws Exception if an error occurs during the unregistration process + */ + void unregisterUntypedControl(String name, ObjectName objectName) throws Exception; + + Object getUntypedControl(String name); + + List getUntypedControls(Class resourceType); + + /** + * Retrieves a resource identified by the given name. + * + * @param resourceName the name of the resource to retrieve; must not be null or empty; should be prefixed with a + * value from {@link ResourceNames} unless using an "untyped" control + * @return the resource object associated with the specified name or null if the resource is not found + * @deprecated use one of the strongly typed "get" methods or {@link #getUntypedControl(String)} instead if no type + * is desired + */ + @Deprecated(forRemoval = true) Object getResource(String resourceName); + @Deprecated(forRemoval = true) Object[] getResources(Class resourceType); ICoreMessage handleMessage(SecurityAuth auth, Message message) throws Exception; - void registerHawtioSecurity(GuardInvocationHandler guardInvocationHandler) throws Exception; - - void unregisterHawtioSecurity() throws Exception; - + /** + * Retrieves the value of a specified attribute from a management control. The inputs to and output from this method + * are intentionally vague to support management messages and other use cases where types are not known ahead of + * time. + *

+ * If possible, use the strongly typed methods instead as performance will be better. + * + * @param resourceName the name of the resource from which the attribute is to be retrieved; should be prefixed with + * a value from {@link ResourceNames} unless using an "untyped" control + * @param attribute the name of the attribute whose value is to be retrieved + * @param auth the security authorization context used to validate permissions for retrieving the attribute + * @return the value of the specified attribute + * @throws IllegalStateException if the resource cannot be found, the getter method does not exist, if there are + * security issues, or if any error occurs during method invocation + */ Object getAttribute(String resourceName, String attribute, SecurityAuth auth); + /** + * Invokes a specified operation on a managed control identified by its name. The inputs to and output from this + * method are intentionally vague to support management messages and other use cases where types are not known ahead + * of time. + *

+ * If possible, use the strongly typed methods instead as performance will be better. + * + * @param resourceName the name of the resource on which the operation will be invoked; should be prefixed with a + * value from {@link ResourceNames} unless using an "untyped" control + * @param operation the name of the operation to invoke + * @param params an array of parameters to pass to the operation being invoked + * @param auth the security authentication object used to validate access permissions + * @return the result of the invoked operation + * @throws Exception if the resource is not found, the operation is invalid, or an error occurs during the invocation + * process + */ Object invokeOperation(String resourceName, String operation, Object[] params, SecurityAuth auth) throws Exception; - } 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 00000000000..1092877c65a --- /dev/null +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/management/impl/ControlRegistries.java @@ -0,0 +1,428 @@ +/* + * 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 java.lang.invoke.MethodHandles; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Predicate; + +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; + + +public class ControlRegistries { + private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + + private ActiveMQServerControl serverControl; + + public final Map queueControls; + + public final Map addressControls; + + public final Map accepterControls; + + public final Map broadcastGroupControls; + + public final Map brokerConnectionControls; + + public final Map remoteBrokerConnectionControls; + + public final Map bridgeControls; + + public final Map clusterConnectionControl; + + public final Map connectionRouterControls; + + public HawtioSecurityControl hawtioSecurityControl; + + public final Map divertControls; + + public final Map untypedControls; + + public ControlRegistries() { + 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<>(); + untypedControls = new ConcurrentHashMap<>(); + divertControls = new ConcurrentHashMap<>(); + } + + public void registerQueueControl(final String name, final QueueControl queueControl) { + Object replaced = queueControls.put(name, queueControl); + logRegistration(name, replaced, queueControl); + } + + public void unregisterQueueControl(final String name) { + Object removed = queueControls.remove(name); + logUnregistration(name, removed); + } + + public int getQueueControlCount() { + return queueControls.size(); + } + + public List getQueueControls(Predicate predicate) { + if (predicate == null) { + return List.copyOf(queueControls.values()); + } + return queueControls.values().stream().filter(predicate).toList(); + } + + public QueueControl getQueueControl(String name) { + return queueControls.get(name); + } + + public List getQueueControlNames() { + return List.copyOf(queueControls.keySet()); + } + + public void registerAddressControl(final String name, final AddressControl addressControl) { + Object replaced = addressControls.put(name, addressControl); + logRegistration(name, replaced, addressControl); + } + + public void unregisterAddressControl(final String name) { + Object removed = addressControls.remove(name); + logUnregistration(name, removed); + } + + public int getAddressControlCount() { + return addressControls.size(); + } + + public List getAddressControls(Predicate predicate) { + if (predicate == null) { + return List.copyOf(addressControls.values()); + } + return addressControls.values().stream().filter(predicate).toList(); + } + + public AddressControl getAddressControl(String name) { + return addressControls.get(name); + } + + public List getAddressControlNames() { + return List.copyOf(addressControls.keySet()); + } + + public void registerAcceptor(String name, AcceptorControl acceptorControl) { + Object replaced = accepterControls.put(name, acceptorControl); + logRegistration(name, replaced, acceptorControl); + } + + public void unregisterAcceptorControl(String name) { + Object removed = accepterControls.remove(name); + logUnregistration(name, removed); + } + + public AcceptorControl getAcceptorControl(String name) { + return accepterControls.get(name); + } + + public List getAcceptorControls() { + return List.copyOf(accepterControls.values()); + } + + public List getAcceptorControlNames() { + return List.copyOf(accepterControls.keySet()); + } + + public void registerBroadcastGroupControl(String name, BaseBroadcastGroupControl control) { + Object replaced = broadcastGroupControls.put(name, control); + logRegistration(name, replaced, control); + } + + public void unregisterBroadcastGroupControls(String name) { + Object removed = broadcastGroupControls.remove(name); + logUnregistration(name, removed); + } + + public List getBroadcastGroupControls() { + return List.copyOf(broadcastGroupControls.values()); + } + + public List getBroadcastGroupControlNames() { + return List.copyOf(broadcastGroupControls.keySet()); + } + + public void registerBrokerConnectionControl(String name, BrokerConnectionControl control) { + Object replaced = brokerConnectionControls.put(name, control); + logRegistration(name, replaced, control); + } + + public void unregisterBrokerConnectionControl(String name) { + Object removed = brokerConnectionControls.remove(name); + logUnregistration(name, removed); + } + + public List getBrokerConnectionControls() { + return List.copyOf(brokerConnectionControls.values()); + } + + public BrokerConnectionControl getBrokerConnectionControl(String name) { + return brokerConnectionControls.get(name); + } + + public List getBrokerConnectionControlNames() { + return List.copyOf(brokerConnectionControls.keySet()); + } + + public void registerRemoteBrokerConnectionControl(String name, RemoteBrokerConnectionControl control) { + Object replaced = remoteBrokerConnectionControls.put(name, control); + logRegistration(name, replaced, control); + } + + public void unregisterRemoteBrokerConnectionControl(String name) { + Object removed = remoteBrokerConnectionControls.remove(name); + logUnregistration(name, removed); + } + + public List getRemoteBrokerConnectionControls() { + return List.copyOf(remoteBrokerConnectionControls.values()); + } + + public RemoteBrokerConnectionControl getRemoteBrokerConnectionControl(String name) { + return remoteBrokerConnectionControls.get(name); + } + + public List getRemoteBrokerConnectionControlNames() { + return List.copyOf(remoteBrokerConnectionControls.keySet()); + } + + public void registerBridgeControl(String name, BridgeControl control) { + Object replaced = bridgeControls.put(name, control); + logRegistration(name, replaced, control); + } + + public void unregisterBridgeControl(String name) { + Object removed = bridgeControls.remove(name); + logUnregistration(name, removed); + } + + public List getBridgeControls() { + return List.copyOf(bridgeControls.values()); + } + + public List getBridgeControlNames() { + return List.copyOf(bridgeControls.keySet()); + } + + public int getBridgeControlCount() { + return bridgeControls.size(); + } + + public void registerClusterConnectionControl(String name, ClusterConnectionControl control) { + Object replaced = clusterConnectionControl.put(name, control); + logRegistration(name, replaced, control); + } + + public void unregisterClusterConnectionControl(String name) { + Object removed = clusterConnectionControl.remove(name); + logUnregistration(name, removed); + } + + public List getClusterConnectionControls() { + return List.copyOf(clusterConnectionControl.values()); + } + + public List getClusterConnectionControlNames() { + return List.copyOf(clusterConnectionControl.keySet()); + } + + public void registerConnectionRouterControl(String name, ConnectionRouterControl connectionRouterControl) { + Object replaced = connectionRouterControls.put(name, connectionRouterControl); + logRegistration(name, replaced, connectionRouterControl); + } + + public void unregisterConnectionRouterControl(String name) { + Object removed = connectionRouterControls.remove(name); + logUnregistration(name, removed); + } + + public List getConnectionRouterControls() { + return List.copyOf(connectionRouterControls.values()); + } + + public ConnectionRouterControl getConnectionRouterControl(String name) { + return connectionRouterControls.get(name); + } + + public List getConnectionRouterControlNames() { + return List.copyOf(connectionRouterControls.keySet()); + } + + public void registerHawtioSecurityControl(HawtioSecurityControl hawtioSecurityControl) { + Object original = this.hawtioSecurityControl; + this.hawtioSecurityControl = hawtioSecurityControl; + logRegistration(ResourceNames.MANAGEMENT_SECURITY, original, hawtioSecurityControl); + } + + public void unregisterHawtioSecurityControl() { + Object removed = hawtioSecurityControl; + hawtioSecurityControl = null; + logUnregistration(ResourceNames.MANAGEMENT_SECURITY, removed); + } + + public HawtioSecurityControl getHawtioSecurity() { + return hawtioSecurityControl; + } + + public void registerUntypedControl(String name, Object control) { + untypedControls.put(name, control); + } + + public void unregisterUntypedControl(String name) { + Object removed = untypedControls.remove(name); + logUnregistration(name, removed); + } + + public Object getUntypedControl(String name) { + return untypedControls.get(name); + } + + public List getUntypedControlNames() { + return List.copyOf(untypedControls.keySet()); + } + + public List getUntypedControls(Class resourceType) { + return untypedControls.values().stream().filter(resourceType::isInstance).toList(); + } + + public void registerServer(ActiveMQServerControlImpl serverControl) { + Object original = this.serverControl; + this.serverControl = serverControl; + logRegistration(ResourceNames.BROKER, original, serverControl); + } + + public void unregisterServer() { + Object removed = serverControl; + serverControl = null; + logUnregistration(ResourceNames.BROKER, removed); + } + + public ActiveMQServerControl getServerControl() { + return serverControl; + } + + public void registerDivertControl(String name, DivertControl divertControl) { + Object replaced = divertControls.put(name, divertControl); + logRegistration(name, replaced, divertControl); + } + + public void unregisterDivertControl(String name) { + Object removed = divertControls.remove(name); + logUnregistration(name, removed); + } + + public List getDivertControls() { + return List.copyOf(divertControls.values()); + } + + public List getDivertControlNames() { + return List.copyOf(divertControls.keySet()); + } + + public void clear() { + serverControl = null; + addressControls.clear(); + queueControls.clear(); + accepterControls.clear(); + broadcastGroupControls.clear(); + brokerConnectionControls.clear(); + remoteBrokerConnectionControls.clear(); + bridgeControls.clear(); + clusterConnectionControl.clear(); + connectionRouterControls.clear(); + hawtioSecurityControl = null; + divertControls.clear(); + untypedControls.clear(); + } + + /** + * Retrieves the management control object associated with the provided resource name. This method determines the + * type of the resource based on its prefix and returns the corresponding control object if available. If possible, + * use the strongly typed methods instead as performance will be better. + * + * @param name The full name of the resource for which a control object is to be retrieved. The name may include a + * prefix indicating the type of the resource (e.g., "queue.", "address.", "broker", etc.). + * @return the management control object associated with the specified resource name, or {@code null} if no control + * object is registered for the resource. + */ + public Object getByName(String name) { + String namePrefix = name; + String unprefixedName = name; + int idx = name.indexOf("."); + if (idx > 0) { + namePrefix = name.substring(0, idx + 1); + unprefixedName = name.substring(idx + 1); + } + + return switch (namePrefix) { + case ResourceNames.BROKER -> serverControl; + case ResourceNames.ADDRESS -> addressControls.get(unprefixedName); + case ResourceNames.QUEUE -> queueControls.get(unprefixedName); + case ResourceNames.ACCEPTOR -> accepterControls.get(unprefixedName); + case ResourceNames.BROADCAST_GROUP -> broadcastGroupControls.get(unprefixedName); + case ResourceNames.BROKER_CONNECTION -> brokerConnectionControls.get(unprefixedName); + case ResourceNames.REMOTE_BROKER_CONNECTION -> remoteBrokerConnectionControls.get(unprefixedName); + case ResourceNames.BRIDGE -> bridgeControls.get(unprefixedName); + case ResourceNames.CORE_CLUSTER_CONNECTION -> clusterConnectionControl.get(unprefixedName); + case ResourceNames.CONNECTION_ROUTER -> connectionRouterControls.get(unprefixedName); + case ResourceNames.MANAGEMENT_SECURITY -> hawtioSecurityControl; + case ResourceNames.DIVERT -> divertControls.get(unprefixedName); + default -> untypedControls.get(name); + }; + } + + private static void logUnregistration(String name, Object removed) { + if (removed != null) { + logger.debug("Unregistered from management: {} as {}", name, removed); + } else { + logger.debug("Attempted to unregister {} from management, but it was not registered."); + } + } + + private static void logRegistration(String name, Object replaced, Object managedResource) { + String addendum = ""; + if (replaced != null) { + addendum = ". Replaced: " + replaced; + } + logger.debug("Registered in management: {} as {}{}", name, 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 561b9818d5d..f7e6734d0bf 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 @@ -27,13 +27,11 @@ import java.util.ArrayList; 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 +130,7 @@ public class ManagementServiceImpl implements ManagementService { private final boolean jmxManagementEnabled; - private final Map registry; + ControlRegistries registries = new ControlRegistries(); private final NotificationBroadcasterSupport broadcaster; @@ -180,8 +178,6 @@ public ManagementServiceImpl(final MBeanServer mbeanServer, final Configuration 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()); @@ -234,9 +230,8 @@ public ActiveMQServerControlImpl registerServer(final PostOffice postOffice, messageCounterManager.reschedule(configuration.getMessageCounterSamplePeriod()); messagingServerControl = new ActiveMQServerControlImpl(postOffice, configuration, resourceManager, remotingService, messagingServer, messageCounterManager, storageManager1, broadcaster); - ObjectName objectName = objectNameBuilder.getActiveMQServerObjectName(); - registerInJMX(objectName, messagingServerControl); - registerInRegistry(ResourceNames.BROKER, messagingServerControl); + registerInJMX(objectNameBuilder.getActiveMQServerObjectName(), messagingServerControl); + registries.registerServer(messagingServerControl); registerBrokerMeters(); return messagingServerControl; @@ -266,22 +261,26 @@ private void registerBrokerMeters() { @Override public void unregisterServer() throws Exception { unregisterFromJMX(objectNameBuilder.getActiveMQServerObjectName()); - unregisterFromRegistry(ResourceNames.BROKER); + registries.unregisterServer(); if (messagingServer != null) { unregisterMeters(ResourceNames.BROKER + "." + messagingServer.getConfiguration().getName()); } } + @Override + public ActiveMQServerControl getServerControl() { + return registries.getServerControl(); + } + @Override 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.registerAddressControl(addressInfo.getName().toString(), addressControl); registerAddressMeters(addressInfo, addressControl); } - @Override - public void registerAddressMeters(AddressInfo addressInfo, AddressControl addressControl) { + private void registerAddressMeters(AddressInfo addressInfo, AddressControl addressControl) { if (messagingServer != null) { // it could be null on tests, but never on a real server MetricsManager metricsManager = messagingServer.getMetricsManager(); if (metricsManager != null) { @@ -299,33 +298,112 @@ public void registerAddressMeters(AddressInfo addressInfo, AddressControl addres @Override public void unregisterAddress(final SimpleString address) throws Exception { unregisterFromJMX(objectNameBuilder.getAddressObjectName(address)); - unregisterFromRegistry(ResourceNames.ADDRESS + address); + registries.unregisterAddressControl(address.toString()); unregisterMeters(ResourceNames.ADDRESS + address); } @Override public void registerQueue(final Queue queue, final SimpleString address, final StorageManager storageManager) throws Exception { - QueueControlImpl queueControl = new QueueControlImpl(queue, address.toString(), messagingServer, storageManager, securityStore, addressSettingsRepository); + QueueControlImpl queueControl = new QueueControlImpl(queue, address.toString(), messagingServer, storageManager, addressSettingsRepository); if (messageCounterManager != null) { MessageCounter counter = new MessageCounter(queue.getName().toString(), null, queue, false, queue.isDurable(), messageCounterManager.getMaxDayCount()); queueControl.setMessageCounter(counter); messageCounterManager.registerMessageCounter(queue.getName().toString(), counter); } registerInJMX(objectNameBuilder.getQueueObjectName(address, queue.getName(), queue.getRoutingType()), queueControl); - registerInRegistry(ResourceNames.QUEUE + queue.getName(), queueControl); + registries.registerQueueControl(queue.getName().toString(), 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.unregisterQueueControl(name.toString()); unregisterMeters(ResourceNames.QUEUE + name); if (messageCounterManager != null) { messageCounterManager.unregisterMessageCounter(name.toString()); } } + @Override + public int getQueueControlCount() { + return registries.getQueueControlCount(); + } + + @Override + public List getQueueControls() { + return registries.getQueueControls(null); + } + + @Override + public List getQueueControls(Predicate predicate) { + return registries.getQueueControls(predicate); + } + + @Override + public QueueControl getQueueControl(String name) { + return registries.getQueueControl(name); + } + + @Override + public List getQueueControlNames() { + return registries.getQueueControlNames(); + } + + @Override + public int getAddressControlCount() { + return registries.getAddressControlCount(); + } + + @Override + public List getAddressControls() { + return registries.getAddressControls(null); + } + + @Override + public List getAddressControls(Predicate predicate) { + return registries.getAddressControls(predicate); + } + + @Override + public AddressControl getAddressControl(String name) { + return registries.getAddressControl(name); + } + + @Override + public List getAcceptorControls() { + return registries.getAcceptorControls(); + } + + @Override + public List getAddressControlNames() { + return registries.getAddressControlNames(); + } + + @Override + public AcceptorControl getAcceptorControl(String name) { + return registries.getAcceptorControl(name); + } + + @Override + public ConnectionRouterControl getConnectionRouterControl(String name) { + return registries.getConnectionRouterControl(name); + } + + @Override + public void registerUntypedControl(String name, Object control, ObjectName objectName) throws Exception { + registerInJMX(objectName, control); + registries.registerUntypedControl(name, control); + } + + @Override + public void unregisterUntypedControl(String name, ObjectName objectName) throws Exception { + if (objectName != null) { + unregisterFromJMX(objectName); + } + registries.unregisterUntypedControl(name); + } + 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,32 +447,29 @@ private void unregisterMeters(final String name) { 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(divert.getUniqueName().toString(), 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(name.toString()); } @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(configuration.getName(), control); } @Override public void unregisterAcceptors() { - for (String resourceName : new HashSet<>(registry.keySet())) { - if (resourceName.startsWith(ResourceNames.ACCEPTOR)) { - String name = resourceName.substring(ResourceNames.ACCEPTOR.length()); - try { - unregisterAcceptor(name); - } catch (Exception e) { - ActiveMQServerLogger.LOGGER.failedToUnregisterAcceptor(name, e); - } + for (String acceptorName : registries.getAcceptorControlNames()) { + try { + unregisterAcceptor(acceptorName); + } catch (Exception e) { + ActiveMQServerLogger.LOGGER.failedToUnregisterAcceptor(acceptorName, e); } } } @@ -402,14 +477,14 @@ public void unregisterAcceptors() { @Override public void unregisterAcceptor(final String name) throws Exception { unregisterFromJMX(objectNameBuilder.getAcceptorObjectName(name)); - unregisterFromRegistry(ResourceNames.ACCEPTOR + name); + registries.unregisterAcceptorControl(name); } @Override public void registerBroadcastGroup(final BroadcastGroup broadcastGroup, final BroadcastGroupConfiguration configuration) throws Exception { broadcastGroup.setNotificationService(this); BroadcastEndpointFactory endpointFactory = configuration.getEndpointFactory(); - BaseBroadcastGroupControl control = null; + BaseBroadcastGroupControl control; if (endpointFactory instanceof UDPBroadcastEndpointFactory factory) { control = new BroadcastGroupControlImpl(broadcastGroup, storageManager, configuration, factory); } else if (endpointFactory instanceof JGroupsFileBroadcastEndpointFactory factory) { @@ -420,26 +495,36 @@ public void registerBroadcastGroup(final BroadcastGroup broadcastGroup, final Br control = new BaseBroadcastGroupControlImpl(broadcastGroup, storageManager, configuration); } registerInJMX(objectNameBuilder.getBroadcastGroupObjectName(configuration.getName()), control); - registerInRegistry(ResourceNames.BROADCAST_GROUP + configuration.getName(), control); + registries.registerBroadcastGroupControl(configuration.getName(), control); } @Override public void unregisterBroadcastGroup(final String name) throws Exception { unregisterFromJMX(objectNameBuilder.getBroadcastGroupObjectName(name)); - unregisterFromRegistry(ResourceNames.BROADCAST_GROUP + name); + registries.unregisterBroadcastGroupControls(name); + } + + @Override + public List getBroadcastGroupControls() { + return registries.getBroadcastGroupControls(); } @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(brokerConnection.getName(), control); } @Override public void unregisterBrokerConnection(String name) throws Exception { unregisterFromJMX(objectNameBuilder.getBrokerConnectionObjectName(name)); - unregisterFromRegistry(ResourceNames.BROKER_CONNECTION + name); + registries.unregisterBrokerConnectionControl(name); + } + + @Override + public List getBrokerConnectionControls() { + return registries.getBrokerConnectionControls(); } @Override @@ -460,13 +545,18 @@ public void registerRemoteBrokerConnection(RemoteBrokerConnection brokerConnecti RemoteBrokerConnectionControl control = new RemoteBrokerConnectionControlImpl(brokerConnection, storageManager); registerInJMX(objectNameBuilder.getRemoteBrokerConnectionObjectName(nodeId, name), control); - registerInRegistry(ResourceNames.REMOTE_BROKER_CONNECTION + nodeId + "." + name, control); + registries.registerRemoteBrokerConnectionControl(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(nodeId + "." + name); + } + + @Override + public List getRemoteBrokerConnectionControls() { + return registries.getRemoteBrokerConnectionControls(); } @Override @@ -474,52 +564,87 @@ public void registerBridge(final Bridge bridge) throws Exception { bridge.setNotificationService(this); BridgeControl control = new BridgeControlImpl(bridge, storageManager); registerInJMX(objectNameBuilder.getBridgeObjectName(bridge.getConfiguration().getName()), control); - registerInRegistry(ResourceNames.BRIDGE + bridge.getName(), control); + registries.registerBridgeControl(bridge.getName().toString(), control); } @Override public void unregisterBridge(final String name) throws Exception { - unregisterFromJMX(objectNameBuilder.getBridgeObjectName(name)); - unregisterFromRegistry(ResourceNames.BRIDGE + name); + unregisterFromJMX(objectNameBuilder.getBridgeObjectName(name.toString())); + registries.unregisterBridgeControl(name); + } + + @Override + public List getBridgeControls() { + return registries.getBridgeControls(); + } + + @Override + public List getBridgeControlNames() { + return registries.getBridgeControlNames(); + } + + @Override + public int getBridgeControlCount() { + return registries.getBridgeControlCount(); } @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(configuration.getName(), control); } @Override public void unregisterCluster(final String name) throws Exception { - unregisterFromJMX(objectNameBuilder.getClusterConnectionObjectName(name)); - unregisterFromRegistry(ResourceNames.CORE_CLUSTER_CONNECTION + name); + unregisterFromJMX(objectNameBuilder.getClusterConnectionObjectName(name.toString())); + registries.unregisterClusterConnectionControl(name); + } + + @Override + public List getClusterConnectionControls() { + return registries.getClusterConnectionControls(); + } + + @Override + public List getClusterConnectionControlNames() { + return registries.getClusterConnectionControlNames(); } @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(router.getName(), connectionRouterControl); } @Override public void unregisterConnectionRouter(final String name) throws Exception { unregisterFromJMX(objectNameBuilder.getConnectionRouterObjectName(name)); - unregisterFromRegistry(ResourceNames.CONNECTION_ROUTER + name); + registries.unregisterConnectionRouterControl(name); + } + + @Override + public List getConnectionRouterControls() { + return registries.getConnectionRouterControls(); } @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(control); } @Override public void unregisterHawtioSecurity() throws Exception { unregisterFromJMX(objectNameBuilder.getSecurityObjectName()); - unregisterFromRegistry(ResourceNames.MANAGEMENT_SECURITY); + registries.unregisterHawtioSecurityControl(); + } + + @Override + public HawtioSecurityControl getHawtioSecurity() { + return registries.getHawtioSecurity(); } @Override @@ -608,19 +733,70 @@ protected CheckType permissionForInvoke(String method) { } @Override - public Object getResource(final String resourceName) { - return registry.get(resourceName); + public List getDivertControls() { + return registries.getDivertControls(); + } + + @Override + public List getDivertControlNames() { + return registries.getDivertControlNames(); + } + + @Override + public BrokerConnectionControl getBrokerConnectionControl(String name) { + return registries.getBrokerConnectionControl(name); + } + + @Override + public RemoteBrokerConnectionControl getRemoteBrokerConnectionControl(String name) { + return registries.getRemoteBrokerConnectionControl(name); + } + + @Override + public Object getUntypedControl(String name) { + return registries.getUntypedControl(name); + } + + @Override + public List getUntypedControls(final Class resourceType) { + return registries.getUntypedControls(resourceType); + } + + @Override + public Object getResource(String resourceName) { + return registries.getByName(resourceName); } @Override public Object[] getResources(final Class resourceType) { List resources = new ArrayList<>(); - for (Object entry : new ArrayList<>(registry.values())) { + if (resourceType.isAssignableFrom(getServerControl().getClass())) { + resources.add(getServerControl()); + } + getResources(resourceType, getAddressControls(), resources); + getResources(resourceType, getQueueControls(), resources); + getResources(resourceType, getAcceptorControls(), resources); + getResources(resourceType, getBroadcastGroupControls(), resources); + getResources(resourceType, getBrokerConnectionControls(), resources); + getResources(resourceType, getRemoteBrokerConnectionControls(), resources); + getResources(resourceType, getBridgeControls(), resources); + getResources(resourceType, getClusterConnectionControls(), resources); + getResources(resourceType, getConnectionRouterControls(), resources); + getResources(resourceType, getDivertControls(), resources); + if (resourceType.isAssignableFrom(getHawtioSecurity().getClass())) { + resources.add(getHawtioSecurity()); + } + resources.addAll(getUntypedControls(resourceType)); + + return resources.toArray(new Object[resources.size()]); + } + + private void getResources(final Class resourceType, List source, List target) { + for (Object entry : source) { if (resourceType.isAssignableFrom(entry.getClass())) { - resources.add(entry); + target.add(entry); } } - return resources.toArray(new Object[resources.size()]); } @Override @@ -655,26 +831,6 @@ public void unregisterFromJMX(final ObjectName objectName) throws MBeanRegistrat 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,31 +890,56 @@ public synchronized void stop() throws Exception { started = false; - Set resourceNames = new HashSet<>(registry.keySet()); - - for (String resourceName : resourceNames) { - unregisterFromRegistry(resourceName); - unregisterMeters(resourceName); + unregisterServer(); + unregisterHawtioSecurity(); + for (QueueControl queueControl : registries.getQueueControls(null)) { + unregisterQueue(SimpleString.of(queueControl.getName()), SimpleString.of(queueControl.getAddress()), RoutingType.valueOf(queueControl.getRoutingType())); + } + for (String name : registries.getAddressControlNames()) { + unregisterAddress(SimpleString.of(name)); + } + for (String name : registries.getBrokerConnectionControlNames()) { + unregisterBrokerConnection(name); + } + for (String name : registries.getRemoteBrokerConnectionControlNames()) { + String nodeId = name; + String controlName = name; + int idx = name.indexOf("."); + if (idx > 0) { + nodeId = name.substring(0, idx + 1); + controlName = name.substring(idx + 1); + } + unregisterRemoteBrokerConnection(nodeId, controlName); + } + for (String name : registries.getBridgeControlNames()) { + unregisterBridge(name); + } + for (String name : registries.getAcceptorControlNames()) { + unregisterAcceptor(name); + } + for (DivertControl divert : registries.getDivertControls()) { + unregisterDivert(SimpleString.of(divert.getUniqueName()), SimpleString.of(divert.getAddress())); + } + for (String name : registries.getClusterConnectionControlNames()) { + unregisterCluster(name); + } + for (String name : registries.getBroadcastGroupControlNames()) { + unregisterBroadcastGroup(name); + } + for (String name : registries.getConnectionRouterControlNames()) { + unregisterConnectionRouter(name); + } + for (String name : registries.getUntypedControlNames()) { + // we do not know the ObjectName at this point so we pass null here knowing that any missed MBean will be + // unregistered by checking registeredNames later + unregisterUntypedControl(name, null); } if (jmxManagementEnabled) { - if (!registeredNames.isEmpty()) { - List unexpectedResourceNames = new ArrayList<>(); - for (String name : resourceNames) { - // only addresses, queues, and diverts should still be registered - if (!(name.startsWith(ResourceNames.ADDRESS) || name.startsWith(ResourceNames.QUEUE) || name.startsWith(ResourceNames.DIVERT))) { - unexpectedResourceNames.add(name); - } - } - if (!unexpectedResourceNames.isEmpty()) { - ActiveMQServerLogger.LOGGER.managementStopError(unexpectedResourceNames.size(), unexpectedResourceNames); - } - - for (ObjectName on : registeredNames) { - try { - mbeanServer.unregisterMBean(on); - } catch (Exception ignore) { - } + for (ObjectName on : registeredNames) { + try { + mbeanServer.unregisterMBean(on); + } catch (Exception ignore) { } } } @@ -775,7 +956,7 @@ public synchronized void stop() throws Exception { listeners.clear(); - registry.clear(); + registries.clear(); messagingServer = null; @@ -863,7 +1044,7 @@ public void enableNotifications(final boolean enabled) { @Override public Object getAttribute(final String resourceName, final String attribute, SecurityAuth auth) { try { - Object resource = registry.get(resourceName); + Object resource = registries.getByName(resourceName); if (resource == null) { throw ActiveMQMessageBundle.BUNDLE.cannotFindResource(resourceName); @@ -897,7 +1078,7 @@ public Object invokeOperation(final String resourceName, final String operation, final Object[] params, SecurityAuth auth) throws Exception { - Object resource = registry.get(resourceName); + Object resource = registries.getByName(resourceName); if (resource == null) { throw ActiveMQMessageBundle.BUNDLE.cannotFindResource(resourceName); diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/management/impl/view/predicate/PredicateTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/management/impl/view/predicate/PredicateTest.java index bc2c5181f92..e7f7726e711 100644 --- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/management/impl/view/predicate/PredicateTest.java +++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/management/impl/view/predicate/PredicateTest.java @@ -33,74 +33,62 @@ public class PredicateTest { @Test public void testBasePredicateEquals() { String string = RandomUtil.randomUUIDString(); - ActiveMQFilterPredicate predicate = new ActiveMQFilterPredicate<>(); - predicate.setOperation(EQUALS.name()); - predicate.setValue(string); + PredicateFilterPart predicate = new PredicateFilterPart<>(EQUALS.name(), string); assertTrue(predicate.matches(string)); assertFalse(predicate.matches(RandomUtil.randomUUIDString())); - assertFalse(predicate.matches(0L)); - assertFalse(predicate.matches(0f)); - assertFalse(predicate.matches(0)); + assertFalse(predicate.matchesLong(0L)); + assertFalse(predicate.matchesFloat(0f)); + assertFalse(predicate.matchesInt(0)); } @Test public void testBasePredicateNotEquals() { String string = RandomUtil.randomUUIDString(); - ActiveMQFilterPredicate predicate = new ActiveMQFilterPredicate<>(); - predicate.setOperation(NOT_EQUALS.name()); - predicate.setValue(string); + PredicateFilterPart predicate = new PredicateFilterPart<>(NOT_EQUALS.name(), string); assertFalse(predicate.matches(string)); assertTrue(predicate.matches(RandomUtil.randomUUIDString())); - assertTrue(predicate.matches(0L)); - assertTrue(predicate.matches(0f)); - assertTrue(predicate.matches(0)); + assertTrue(predicate.matchesLong(0L)); + assertTrue(predicate.matchesFloat(0f)); + assertTrue(predicate.matchesInt(0)); } @Test public void testBasePredicateContains() { - ActiveMQFilterPredicate predicate = new ActiveMQFilterPredicate<>(); - predicate.setOperation(CONTAINS.name()); - predicate.setValue("12"); + PredicateFilterPart predicate = new PredicateFilterPart<>(CONTAINS.name(), "12"); assertTrue(predicate.matches("0123")); assertFalse(predicate.matches("43")); - assertFalse(predicate.matches(0L)); - assertFalse(predicate.matches(0f)); - assertFalse(predicate.matches(0)); + assertFalse(predicate.matchesLong(0L)); + assertFalse(predicate.matchesFloat(0f)); + assertFalse(predicate.matchesInt(0)); } @Test public void testBasePredicateNotContains() { - ActiveMQFilterPredicate predicate = new ActiveMQFilterPredicate<>(); - predicate.setOperation(NOT_CONTAINS.name()); - predicate.setValue("12"); + PredicateFilterPart predicate = new PredicateFilterPart<>(NOT_CONTAINS.name(), "12"); assertFalse(predicate.matches("0123")); assertTrue(predicate.matches("42")); - assertTrue(predicate.matches(0L)); - assertTrue(predicate.matches(0f)); - assertTrue(predicate.matches(0)); + assertTrue(predicate.matchesLong(0L)); + assertTrue(predicate.matchesFloat(0f)); + assertTrue(predicate.matchesInt(0)); } @Test public void testBasePredicateLessThan() { - ActiveMQFilterPredicate predicate = new ActiveMQFilterPredicate<>(); - predicate.setOperation(LESS_THAN.name()); - predicate.setValue("12"); + PredicateFilterPart predicate = new PredicateFilterPart<>(LESS_THAN.name(), "12"); assertFalse(predicate.matches("foo")); - assertFalse(predicate.matches(42)); - assertTrue(predicate.matches(0L)); - assertTrue(predicate.matches(0f)); - assertTrue(predicate.matches(0)); + assertFalse(predicate.matchesInt(42)); + assertTrue(predicate.matchesLong(0L)); + assertTrue(predicate.matchesFloat(0f)); + assertTrue(predicate.matchesInt(0)); } @Test public void testBasePredicateGreaterThan() { - ActiveMQFilterPredicate predicate = new ActiveMQFilterPredicate<>(); - predicate.setOperation(GREATER_THAN.name()); - predicate.setValue("12"); + PredicateFilterPart predicate = new PredicateFilterPart<>(GREATER_THAN.name(), "12"); assertFalse(predicate.matches("foo")); - assertTrue(predicate.matches(42)); - assertFalse(predicate.matches(0L)); - assertFalse(predicate.matches(0f)); - assertFalse(predicate.matches(0)); + assertTrue(predicate.matchesInt(42)); + assertFalse(predicate.matchesLong(0L)); + assertFalse(predicate.matchesFloat(0f)); + assertFalse(predicate.matchesInt(0)); } } 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 42a5e17588c..2858ddb278b 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 @@ 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,19 @@ 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.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.ManagementHelper; import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder; +import org.apache.activemq.artemis.api.core.management.QueueControl; +import org.apache.activemq.artemis.api.core.management.RemoteBrokerConnectionControl; 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; @@ -56,6 +68,7 @@ import org.apache.activemq.artemis.core.server.cluster.ClusterConnection; import org.apache.activemq.artemis.core.server.impl.AddressInfo; import org.apache.activemq.artemis.core.server.management.GuardInvocationHandler; +import org.apache.activemq.artemis.core.server.management.HawtioSecurityControl; import org.apache.activemq.artemis.core.server.management.ManagementService; import org.apache.activemq.artemis.core.server.management.Notification; import org.apache.activemq.artemis.core.server.management.NotificationListener; @@ -228,37 +241,112 @@ public ActiveMQServerControlImpl registerServer(PostOffice postOffice, } @Override - public void unregisterServer() throws Exception { + public AddressControl getAddressControl(String name) { + return null; + } + @Override + public List getAddressControlNames() { + return List.of(); } @Override - public void registerInJMX(ObjectName objectName, Object managedResource) throws Exception { + public AcceptorControl getAcceptorControl(String name) { + return null; + } + @Override + public ConnectionRouterControl getConnectionRouterControl(String name) { + return null; } @Override - public void unregisterFromJMX(ObjectName objectName) throws Exception { + public void registerUntypedControl(String name, Object control, ObjectName objectName) { } @Override - public void registerInRegistry(String resourceName, Object managedResource) { + public void unregisterUntypedControl(String name, ObjectName objectName) { } @Override - public void unregisterFromRegistry(String resourceName) { + public List getDivertControls() { + return List.of(); + } + @Override + public List getDivertControlNames() { + return List.of(); } @Override - public void registerAddress(AddressInfo addressInfo) throws Exception { + public List getBridgeControls() { + return List.of(); + } + + @Override + public List getBridgeControlNames() { + return List.of(); + } + + @Override + public int getBridgeControlCount() { + return 0; + } + + @Override + public BrokerConnectionControl getBrokerConnectionControl(String name) { + return null; + } + + @Override + public RemoteBrokerConnectionControl getRemoteBrokerConnectionControl(String name) { + return null; + } + + @Override + public Object getUntypedControl(String name) { + return null; + } + @Override + public List getUntypedControls(Class resourceType) { + return List.of(); } @Override - public void registerAddressMeters(AddressInfo addressInfo, AddressControl addressControl) throws Exception { + public Object getResource(String resourceName) { + return null; + } + + @Override + public Object[] getResources(Class resourceType) { + return new Object[0]; + } + + @Override + public ActiveMQServerControl getServerControl() { + return null; + } + + @Override + public void unregisterServer() throws Exception { + + } + + @Override + public void registerInJMX(ObjectName objectName, Object managedResource) throws Exception { + + } + + @Override + public void unregisterFromJMX(ObjectName objectName) throws Exception { + + } + + @Override + public void registerAddress(AddressInfo addressInfo) throws Exception { } @@ -292,6 +380,11 @@ public void unregisterAcceptors() { } + @Override + public List getAcceptorControls() { + return List.of(); + } + @Override public void registerDivert(Divert divert) throws Exception { @@ -313,6 +406,11 @@ public void unregisterBroadcastGroup(String name) throws Exception { } + @Override + public List getBroadcastGroupControls() { + return List.of(); + } + @Override public void registerBridge(Bridge bridge) throws Exception { @@ -335,23 +433,28 @@ public void unregisterCluster(String name) throws Exception { } @Override - public void registerConnectionRouter(ConnectionRouter router) throws Exception { + public List getClusterConnectionControls() { + return List.of(); + } + @Override + public List getClusterConnectionControlNames() { + return List.of(); } @Override - public void unregisterConnectionRouter(String name) throws Exception { + public void registerConnectionRouter(ConnectionRouter router) throws Exception { } @Override - public Object getResource(String resourceName) { - return null; + public void unregisterConnectionRouter(String name) throws Exception { + } @Override - public Object[] getResources(Class resourceType) { - return new Object[0]; + public List getConnectionRouterControls() { + return List.of(); } @Override @@ -369,6 +472,11 @@ public void unregisterHawtioSecurity() throws Exception { } + @Override + public HawtioSecurityControl getHawtioSecurity() { + return null; + } + @Override public Object getAttribute(String resourceName, String attribute, SecurityAuth auth) { return null; @@ -379,6 +487,46 @@ public Object invokeOperation(String resourceName, String operation, Object[] pa return null; } + @Override + public int getQueueControlCount() { + return 0; + } + + @Override + public List getQueueControls() { + return List.of(); + } + + @Override + public List getQueueControls(Predicate predicate) { + return List.of(); + } + + @Override + public QueueControl getQueueControl(String name) { + return null; + } + + @Override + public List getQueueControlNames() { + return List.of(); + } + + @Override + public int getAddressControlCount() { + return 0; + } + + @Override + public List getAddressControls() { + return List.of(); + } + + @Override + public List getAddressControls(Predicate predicate) { + return List.of(); + } + @Override public void registerBrokerConnection(BrokerConnection brokerConnection) { @@ -389,6 +537,11 @@ public void unregisterBrokerConnection(String name) { } + @Override + public List getBrokerConnectionControls() { + return List.of(); + } + @Override public void start() throws Exception { @@ -434,5 +587,10 @@ public void registerRemoteBrokerConnection(RemoteBrokerConnection brokerConnecti public void unregisterRemoteBrokerConnection(String nodeId, String name) throws Exception { } + + @Override + public List getRemoteBrokerConnectionControls() { + return List.of(); + } } } diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverBackupLeakTest.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverBackupLeakTest.java index 5b5295d0e7a..863eb54612b 100644 --- a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverBackupLeakTest.java +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/transport/failover/FailoverBackupLeakTest.java @@ -103,7 +103,7 @@ private void check(String connectionProperties) throws Exception { private int getConnectionCount(EmbeddedJMS server) throws Exception { ManagementService managementService = server.getActiveMQServer().getManagementService(); - ActiveMQServerControl jmsControl = (ActiveMQServerControl) managementService.getResource(ResourceNames.BROKER); + ActiveMQServerControl jmsControl = (ActiveMQServerControl) managementService.getServerControl(); String[] ids = jmsControl.listConnectionIDs(); if (ids != null) { return ids.length; diff --git a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java index ec04976e669..8fa7e16b7b3 100644 --- a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java +++ b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java @@ -2483,6 +2483,65 @@ public String createJsonFilter(String fieldName, String operationName, String va return jsonFilterObject.toString(); } + public String createJsonFilter(String fieldName, String operationName, String value, boolean legacy) throws Exception { + Map filterMap = new HashMap<>(); + filterMap.put("field", fieldName); + filterMap.put("operation", operationName); + filterMap.put("value", value); + if (legacy) { + JsonObject jsonFilterObject = JsonUtil.toJsonObject(filterMap); + return jsonFilterObject.toString(); + } else { + Map[] filtersArray = new HashMap[1]; + filtersArray[0] = filterMap; + Map filtersMap = new HashMap<>(); + filtersMap.put("searchFilters", filtersArray); + JsonObject jsonFiltersObject = JsonUtil.toJsonObject(filtersMap); + return jsonFiltersObject.toString(); + } + } + + public String createJsonArrayFilter(String fieldName, String operationName, String value, String fieldName2, String operationName2, String value2) throws Exception { + Map filterMap = new HashMap<>(); + filterMap.put("field", fieldName); + filterMap.put("operation", operationName); + filterMap.put("value", value); + Map filterMap2 = new HashMap<>(); + filterMap2.put("field", fieldName2); + filterMap2.put("operation", operationName2); + filterMap2.put("value", value2); + Map[] filtersArray = new HashMap[2]; + filtersArray[0] = filterMap; + filtersArray[1] = filterMap2; + Map filtersMap = new HashMap<>(); + filtersMap.put("searchFilters", filtersArray); + JsonObject jsonFiltersObject = JsonUtil.toJsonObject(filtersMap); + return jsonFiltersObject.toString(); + } + + public String createJsonArrayFilter(String fieldName, String operationName, String value, String fieldName2, String operationName2, String value2, String fieldName3, String operationName3, String value3) throws Exception { + Map filterMap = new HashMap<>(); + filterMap.put("field", fieldName); + filterMap.put("operation", operationName); + filterMap.put("value", value); + Map filterMap2 = new HashMap<>(); + filterMap2.put("field", fieldName2); + filterMap2.put("operation", operationName2); + filterMap2.put("value", value2); + Map filterMap3 = new HashMap<>(); + filterMap3.put("field", fieldName3); + filterMap3.put("operation", operationName3); + filterMap3.put("value", value3); + Map[] filtersArray = new HashMap[3]; + filtersArray[0] = filterMap; + filtersArray[1] = filterMap2; + filtersArray[2] = filterMap3; + Map filtersMap = new HashMap<>(); + filtersMap.put("searchFilters", filtersArray); + JsonObject jsonFiltersObject = JsonUtil.toJsonObject(filtersMap); + return jsonFiltersObject.toString(); + } + protected static ReplicationEndpoint getReplicationEndpoint(ActiveMQServer server) { final Activation activation = server.getActivation(); if (activation instanceof SharedNothingBackupActivation backupActivation) { diff --git a/tests/compatibility-tests/src/main/resources/metrics/queueMetrics.groovy b/tests/compatibility-tests/src/main/resources/metrics/queueMetrics.groovy index b8e105d0dfe..d1b3246f2e7 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 queueControls = server.getJMSServerManager().getActiveMQServer().getManagementService().getQueueControls(); +for (QueueControl c : queueControls) { if (c.isInternalQueue()) { continue; } @@ -38,4 +40,4 @@ for (Object o : queueControls) { GroovyRun.assertTrue(c.getDurablePersistentSize() > 0); GroovyRun.assertEquals(33l, c.getMessageCount()); GroovyRun.assertEquals(33l, c.getDurableMessageCount()); - } +} diff --git a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java index d2a1535dcaf..02df5057fc8 100644 --- a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java +++ b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java @@ -16,14 +16,6 @@ */ package org.apache.activemq.artemis.tests.db.paging; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNotSame; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; @@ -75,7 +67,6 @@ import org.apache.activemq.artemis.api.core.client.MessageHandler; import org.apache.activemq.artemis.api.core.client.ServerLocator; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.client.impl.ClientConsumerInternal; import org.apache.activemq.artemis.core.config.Configuration; import org.apache.activemq.artemis.core.config.DivertConfiguration; @@ -141,6 +132,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotSame; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + @ExtendWith(ParameterizedTestExtension.class) public class PagingTest extends ParameterDBTestBase { @@ -743,7 +742,7 @@ public void testQueueRemoveAll() throws Exception { Wait.assertEquals(numberOfMessages * 2, queue::getMessageCount); - QueueControl queueControl = (QueueControl) this.server.getManagementService().getResource(ResourceNames.QUEUE + ADDRESS); + QueueControl queueControl = this.server.getManagementService().getQueueControl(ADDRESS.toString()); int removedMessages = queueControl.removeAllMessages(); assertEquals(numberOfMessages * 2, removedMessages); @@ -1114,8 +1113,8 @@ public void testQueueRetryMessages() throws Exception { Wait.assertEquals(numberOfMessages * 4, queue::getMessageCount); Wait.assertEquals(0, originalQueue::getMessageCount); - QueueControl queueControl = (QueueControl) this.server.getManagementService().getResource(ResourceNames.QUEUE + ADDRESS + "Queue"); - QueueControl originalQueueControl = (QueueControl) this.server.getManagementService().getResource(ResourceNames.QUEUE + ADDRESS + "QueueOriginal"); + QueueControl queueControl = this.server.getManagementService().getQueueControl(ADDRESS + "Queue"); + QueueControl originalQueueControl = this.server.getManagementService().getQueueControl(ADDRESS + "QueueOriginal"); queueControl.retryMessages(); Wait.assertEquals(numberOfMessages * 2, queue::getMessageCount, 5000); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPBridgeManagementTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPBridgeManagementTest.java index 168a38acd60..fb166204d79 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPBridgeManagementTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPBridgeManagementTest.java @@ -16,21 +16,6 @@ */ package org.apache.activemq.artemis.tests.integration.amqp.connect; -import static org.apache.activemq.artemis.protocol.amqp.connect.bridge.AMQPBridgeConstants.ADDRESS_RECEIVER_IDLE_TIMEOUT; -import static org.apache.activemq.artemis.protocol.amqp.connect.bridge.AMQPBridgeConstants.QUEUE_RECEIVER_IDLE_TIMEOUT; -import static org.hamcrest.CoreMatchers.allOf; -import static org.hamcrest.CoreMatchers.containsString; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - -import java.lang.invoke.MethodHandles; -import java.net.URI; -import java.util.concurrent.TimeUnit; - import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Message; @@ -38,12 +23,14 @@ import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; +import java.lang.invoke.MethodHandles; +import java.net.URI; +import java.util.concurrent.TimeUnit; import org.apache.activemq.artemis.api.core.QueueConfiguration; import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.management.BrokerConnectionControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBridgeAddressPolicyElement; import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBridgeBrokerConnectionElement; import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBridgeQueuePolicyElement; @@ -64,6 +51,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.apache.activemq.artemis.protocol.amqp.connect.bridge.AMQPBridgeConstants.ADDRESS_RECEIVER_IDLE_TIMEOUT; +import static org.apache.activemq.artemis.protocol.amqp.connect.bridge.AMQPBridgeConstants.QUEUE_RECEIVER_IDLE_TIMEOUT; +import static org.hamcrest.CoreMatchers.allOf; +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + /** * Tests that the broker create management objects for AMQP bridge configurations. */ @@ -132,10 +130,10 @@ public void testBridgeCreatesManagementResourcesForAddressPolicyConfigurations() peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final String brokerConnectionName = ResourceNames.BROKER_CONNECTION + getTestName(); + final String brokerConnectionName = getTestName(); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(brokerConnectionName); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(brokerConnectionName); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -145,9 +143,9 @@ public void testBridgeCreatesManagementResourcesForAddressPolicyConfigurations() final String consumerResourceName = AMQPBridgeManagementSupport.getBridgeAddressReceiverResourceName(getTestName(), getTestName(), "address-policy", getTestName()); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); final AMQPBridgePolicyManagerControl addressPolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); assertNotNull(bridgeControl); assertEquals(getTestName(), bridgeControl.getName()); @@ -159,7 +157,7 @@ public void testBridgeCreatesManagementResourcesForAddressPolicyConfigurations() assertEquals(0, addressPolicyControl.getMessagesReceived()); final AMQPBridgeReceiverControl consumerControl = (AMQPBridgeReceiverControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(consumerControl); assertEquals(getTestName(), consumerControl.getAddress()); @@ -170,9 +168,9 @@ public void testBridgeCreatesManagementResourcesForAddressPolicyConfigurations() brokerConnection.stop(); // Stopping the connection should remove the bridge consumer management objects. - Wait.assertTrue(() -> server.getManagementService().getResource(consumerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(consumerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); server.getBrokerConnections().forEach((connection) -> { try { @@ -182,9 +180,9 @@ public void testBridgeCreatesManagementResourcesForAddressPolicyConfigurations() } }); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(bridgeResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(brokerConnectionName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(bridgeResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getBrokerConnectionControl(brokerConnectionName) == null, 5_000, 100); peer.close(); } @@ -239,8 +237,8 @@ public void testBridgeRemovesAddressConsumerManagementWhenConnectionDrops() thro peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(ResourceNames.BROKER_CONNECTION + getTestName()); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(getTestName()); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -250,11 +248,11 @@ public void testBridgeRemovesAddressConsumerManagementWhenConnectionDrops() thro final String consumerResourceName = AMQPBridgeManagementSupport.getBridgeAddressReceiverResourceName(getTestName(), getTestName(), "address-policy", getTestName()); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); final AMQPBridgePolicyManagerControl addressPolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeReceiverControl consumerControl = (AMQPBridgeReceiverControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(bridgeControl); assertNotNull(addressPolicyControl); @@ -265,8 +263,8 @@ public void testBridgeRemovesAddressConsumerManagementWhenConnectionDrops() thro // Closing the connection without a detach or close frame should still cleanup the management // resources for the consumer but the policy views should still be in place - Wait.assertTrue(() -> server.getManagementService().getResource(consumerResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(consumerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) != null, 5_000, 100); } } @@ -319,8 +317,8 @@ public void testBridgeRemovesAddressConsumerManagementWhenBrokerConnectionStoppe peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(ResourceNames.BROKER_CONNECTION + getTestName()); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(getTestName()); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -330,11 +328,11 @@ public void testBridgeRemovesAddressConsumerManagementWhenBrokerConnectionStoppe final String consumerResourceName = AMQPBridgeManagementSupport.getBridgeAddressReceiverResourceName(getTestName(), getTestName(), "address-policy", getTestName()); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); final AMQPBridgePolicyManagerControl addressPolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeReceiverControl consumerControl = (AMQPBridgeReceiverControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(bridgeControl); assertNotNull(addressPolicyControl); @@ -349,9 +347,9 @@ public void testBridgeRemovesAddressConsumerManagementWhenBrokerConnectionStoppe // Closing the connection without a detach or close frame should still cleanup the management // resources for the consumer but the policy views should still be in place - Wait.assertTrue(() -> server.getManagementService().getResource(consumerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(consumerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); peer.close(); } @@ -415,15 +413,15 @@ public void testBridgeCreatesManagementResourcesForQueuePolicyConfigurations() t peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final String brokerConnectionName = ResourceNames.BROKER_CONNECTION + getTestName(); + final String brokerConnectionName = getTestName(); final String bridgeResourceName = AMQPBridgeManagementSupport.getBridgeManagerResourceName(getTestName(), getTestName()); final String policyResourceName = AMQPBridgeManagementSupport.getBridgePolicyManagerResourceName(getTestName(), getTestName(), "queue-policy"); final String consumerResourceName = AMQPBridgeManagementSupport.getBridgeQueueReceiverResourceName(getTestName(), getTestName(), "queue-policy", getTestName() + "::" + getTestName()); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(brokerConnectionName); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(brokerConnectionName); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -433,14 +431,14 @@ public void testBridgeCreatesManagementResourcesForQueuePolicyConfigurations() t assertEquals(0, bridgeControl.getMessagesSent()); final AMQPBridgePolicyManagerControl queuePolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); assertNotNull(queuePolicyControl); assertEquals("queue-policy", queuePolicyControl.getName()); assertEquals(0, queuePolicyControl.getMessagesReceived()); final AMQPBridgeReceiverControl consumerControl = (AMQPBridgeReceiverControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(consumerControl); assertEquals(getTestName(), consumerControl.getAddress()); @@ -454,9 +452,9 @@ public void testBridgeCreatesManagementResourcesForQueuePolicyConfigurations() t brokerConnection.stop(); // Stopping the connection should remove the bridge management objects. - Wait.assertTrue(() -> server.getManagementService().getResource(consumerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(consumerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); server.getBrokerConnections().forEach((brConnection) -> { try { @@ -466,9 +464,9 @@ public void testBridgeCreatesManagementResourcesForQueuePolicyConfigurations() t } }); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(bridgeResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(brokerConnectionName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(bridgeResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getBrokerConnectionControl(brokerConnectionName) == null, 5_000, 100); peer.close(); } @@ -533,19 +531,19 @@ public void testBridgeRemovesQueueConsumerManagementWhenConnectionDrops() throws peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final String brokerConnectionName = ResourceNames.BROKER_CONNECTION + getTestName(); + final String brokerConnectionName = getTestName(); final String bridgeResourceName = AMQPBridgeManagementSupport.getBridgeManagerResourceName(getTestName(), getTestName()); final String policyResourceName = AMQPBridgeManagementSupport.getBridgePolicyManagerResourceName(getTestName(), getTestName(), "queue-policy"); final String consumerResourceName = AMQPBridgeManagementSupport.getBridgeQueueReceiverResourceName(getTestName(), getTestName(), "queue-policy", getTestName() + "::" + getTestName()); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(brokerConnectionName); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(brokerConnectionName); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); final AMQPBridgePolicyManagerControl queuePolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeReceiverControl consumerControl = (AMQPBridgeReceiverControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -558,8 +556,8 @@ public void testBridgeRemovesQueueConsumerManagementWhenConnectionDrops() throws // Closing the connection without a detach or close frame should still cleanup the management // resources for the consumer but the policy views should still be in place - Wait.assertTrue(() -> server.getManagementService().getResource(consumerResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(consumerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) != null, 5_000, 100); } } } @@ -622,19 +620,19 @@ public void testBridgeRemovesQueueConsumerManagementWhenBrokerConnectionStopped( peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final String brokerConnectionName = ResourceNames.BROKER_CONNECTION + getTestName(); + final String brokerConnectionName = getTestName(); final String bridgeResourceName = AMQPBridgeManagementSupport.getBridgeManagerResourceName(getTestName(), getTestName()); final String policyResourceName = AMQPBridgeManagementSupport.getBridgePolicyManagerResourceName(getTestName(), getTestName(), "queue-policy"); final String consumerResourceName = AMQPBridgeManagementSupport.getBridgeQueueReceiverResourceName(getTestName(), getTestName(), "queue-policy", getTestName() + "::" + getTestName()); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(brokerConnectionName); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(brokerConnectionName); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); final AMQPBridgePolicyManagerControl queuePolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeReceiverControl consumerControl = (AMQPBridgeReceiverControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -651,9 +649,9 @@ public void testBridgeRemovesQueueConsumerManagementWhenBrokerConnectionStopped( // Closing the connection without a detach or close frame should still cleanup the management // resources for the consumer but the policy views should still be in place - Wait.assertTrue(() -> server.getManagementService().getResource(consumerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(consumerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); peer.close(); } @@ -711,7 +709,7 @@ public void testAddressManagementTracksMessagesAtPolicyAndConsumerLevels() throw final String consumerResourceName = AMQPBridgeManagementSupport.getBridgeAddressReceiverResourceName(getTestName(), getTestName(), "address-policy", getTestName()); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); final ConnectionFactory factory = CFUtil.createConnectionFactory("AMQP", "tcp://localhost:" + AMQP_PORT); @@ -729,9 +727,9 @@ public void testAddressManagementTracksMessagesAtPolicyAndConsumerLevels() throw peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPBridgePolicyManagerControl addressPolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeReceiverControl consumerControl = (AMQPBridgeReceiverControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertEquals(1, bridgeControl.getMessagesReceived()); assertEquals(1, addressPolicyControl.getMessagesReceived()); @@ -748,9 +746,9 @@ public void testAddressManagementTracksMessagesAtPolicyAndConsumerLevels() throw // Policy bean should still be active but consumer bean should be unregistered { final AMQPBridgePolicyManagerControl addressPolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeReceiverControl consumerControl = (AMQPBridgeReceiverControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(addressPolicyControl); assertNull(consumerControl); @@ -787,9 +785,9 @@ public void testAddressManagementTracksMessagesAtPolicyAndConsumerLevels() throw peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPBridgePolicyManagerControl addressPolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeReceiverControl consumerControl = (AMQPBridgeReceiverControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertEquals(2, bridgeControl.getMessagesReceived()); assertEquals(2, addressPolicyControl.getMessagesReceived()); @@ -861,7 +859,7 @@ public void testQueueManagementTracksMessagesAtPolicyAndConsumerLevels() throws final String consumerResourceName = AMQPBridgeManagementSupport.getBridgeQueueReceiverResourceName(getTestName(), getTestName(), "queue-policy", getTestName() + "::" + getTestName()); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); final ConnectionFactory factory = CFUtil.createConnectionFactory("AMQP", "tcp://localhost:" + AMQP_PORT); @@ -879,9 +877,9 @@ public void testQueueManagementTracksMessagesAtPolicyAndConsumerLevels() throws peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPBridgePolicyManagerControl queuePolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeReceiverControl consumerControl = (AMQPBridgeReceiverControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertEquals(1, bridgeControl.getMessagesReceived()); assertEquals(1, queuePolicyControl.getMessagesReceived()); @@ -898,9 +896,9 @@ public void testQueueManagementTracksMessagesAtPolicyAndConsumerLevels() throws // Policy bean should still be active but consumer bean should be unregistered { final AMQPBridgePolicyManagerControl queuePolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeReceiverControl consumerControl = (AMQPBridgeReceiverControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(queuePolicyControl); assertNull(consumerControl); @@ -937,9 +935,9 @@ public void testQueueManagementTracksMessagesAtPolicyAndConsumerLevels() throws peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPBridgePolicyManagerControl queuePolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeReceiverControl consumerControl = (AMQPBridgeReceiverControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertEquals(2, bridgeControl.getMessagesReceived()); assertEquals(2, queuePolicyControl.getMessagesReceived()); @@ -1001,21 +999,21 @@ public void testBridgeCreatesManagementResourcesForToAddressPolicyConfigurations Wait.assertTrue(() -> server.bindingQuery(SimpleString.of(getTestName()), false).getQueueNames().size() >= 1); - final String brokerConnectionName = ResourceNames.BROKER_CONNECTION + getTestName(); + final String brokerConnectionName = getTestName(); final String bridgeResourceName = AMQPBridgeManagementSupport.getBridgeManagerResourceName(getTestName(), getTestName()); final String policyResourceName = AMQPBridgeManagementSupport.getBridgePolicyManagerResourceName(getTestName(), getTestName(), "to-address-policy"); final String producerResourceName = AMQPBridgeManagementSupport.getBridgeAddressSenderResourceName(getTestName(), getTestName(), "to-address-policy", getTestName()); - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) != null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) != null, 5_000, 50); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(brokerConnectionName); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(brokerConnectionName); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); final AMQPBridgePolicyManagerControl addressPolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeSenderControl producerControl = (AMQPBridgeSenderControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -1054,9 +1052,9 @@ public void testBridgeCreatesManagementResourcesForToAddressPolicyConfigurations brokerConnection.stop(); // Stopping the connection should remove the bridge producer management objects. - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); server.getBrokerConnections().forEach((connection) -> { try { @@ -1066,9 +1064,9 @@ public void testBridgeCreatesManagementResourcesForToAddressPolicyConfigurations } }); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(bridgeResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(brokerConnectionName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(bridgeResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getBrokerConnectionControl(brokerConnectionName) == null, 5_000, 100); peer.close(); } @@ -1121,21 +1119,21 @@ public void testBridgeCreatesManagementResourcesForToQueuePolicyConfigurations() Wait.assertTrue(() -> server.queueQuery(SimpleString.of(getTestName())).getConsumerCount() >= 1, 10_000); - final String brokerConnectionName = ResourceNames.BROKER_CONNECTION + getTestName(); + final String brokerConnectionName = getTestName(); final String bridgeResourceName = AMQPBridgeManagementSupport.getBridgeManagerResourceName(getTestName(), getTestName()); final String policyResourceName = AMQPBridgeManagementSupport.getBridgePolicyManagerResourceName(getTestName(), getTestName(), "to-queue-policy"); final String producerResourceName = AMQPBridgeManagementSupport.getBridgeAddressSenderResourceName(getTestName(), getTestName(), "to-queue-policy", getTestName() + "::" + getTestName()); - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) != null, 5_000, 100); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(brokerConnectionName); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(brokerConnectionName); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); final AMQPBridgePolicyManagerControl queuePolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeSenderControl producerControl = (AMQPBridgeSenderControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -1174,9 +1172,9 @@ public void testBridgeCreatesManagementResourcesForToQueuePolicyConfigurations() brokerConnection.stop(); // Stopping the connection should remove the bridge producer management objects. - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); server.getBrokerConnections().forEach((connection) -> { try { @@ -1186,9 +1184,9 @@ public void testBridgeCreatesManagementResourcesForToQueuePolicyConfigurations() } }); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(bridgeResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(brokerConnectionName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(bridgeResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getBrokerConnectionControl(brokerConnectionName) == null, 5_000, 100); peer.close(); } @@ -1239,29 +1237,29 @@ public void testBridgeRemovesAddressProducerManagementWhenConnectionDrops() thro Wait.assertTrue(() -> server.bindingQuery(SimpleString.of(getTestName()), false).getQueueNames().size() >= 1); - final String brokerConnectionName = ResourceNames.BROKER_CONNECTION + getTestName(); + final String brokerConnectionName = getTestName(); final String bridgeResourceName = AMQPBridgeManagementSupport.getBridgeManagerResourceName(getTestName(), getTestName()); final String policyResourceName = AMQPBridgeManagementSupport.getBridgePolicyManagerResourceName(getTestName(), getTestName(), "to-address-policy"); final String producerResourceName = AMQPBridgeManagementSupport.getBridgeAddressSenderResourceName(getTestName(), getTestName(), "to-address-policy", getTestName()); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(brokerConnectionName); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(brokerConnectionName); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); assertNotNull(brokerConnection); assertNotNull(bridgeControl); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) != null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) != null, 5_000, 100); peer.waitForScriptToComplete(5, TimeUnit.SECONDS); peer.close(); // Closing the connection without a detach or close frame should still cleanup the management // resources for the consumer but the policy views should still be in place - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) != null, 5_000, 100); } } @@ -1310,21 +1308,21 @@ public void testBridgeRemovesAddressProducerManagementWhenBrokerConnectionStoppe Wait.assertTrue(() -> server.bindingQuery(SimpleString.of(getTestName()), false).getQueueNames().size() >= 1); - final String brokerConnectionName = ResourceNames.BROKER_CONNECTION + getTestName(); + final String brokerConnectionName = getTestName(); final String bridgeResourceName = AMQPBridgeManagementSupport.getBridgeManagerResourceName(getTestName(), getTestName()); final String policyResourceName = AMQPBridgeManagementSupport.getBridgePolicyManagerResourceName(getTestName(), getTestName(), "to-address-policy"); final String producerResourceName = AMQPBridgeManagementSupport.getBridgeAddressSenderResourceName(getTestName(), getTestName(), "to-address-policy", getTestName()); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(brokerConnectionName); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(brokerConnectionName); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); assertNotNull(brokerConnection); assertNotNull(bridgeControl); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) != null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) != null, 5_000, 100); peer.waitForScriptToComplete(5, TimeUnit.SECONDS); peer.expectDetach().optional(); @@ -1337,9 +1335,9 @@ public void testBridgeRemovesAddressProducerManagementWhenBrokerConnectionStoppe // Closing the connection without a detach or close frame should still cleanup the management // resources for the consumer but the policy views should still be in place - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); peer.close(); } @@ -1392,21 +1390,21 @@ public void testBridgeRemovesQueueProducerManagementWhenConnectionDrops() throws Wait.assertTrue(() -> server.queueQuery(SimpleString.of(getTestName())).getConsumerCount() >= 1, 10_000); - final String brokerConnectionName = ResourceNames.BROKER_CONNECTION + getTestName(); + final String brokerConnectionName = getTestName(); final String bridgeResourceName = AMQPBridgeManagementSupport.getBridgeManagerResourceName(getTestName(), getTestName()); final String policyResourceName = AMQPBridgeManagementSupport.getBridgePolicyManagerResourceName(getTestName(), getTestName(), "to-queue-policy"); final String producerResourceName = AMQPBridgeManagementSupport.getBridgeAddressSenderResourceName(getTestName(), getTestName(), "to-queue-policy", getTestName() + "::" + getTestName()); - Wait.assertTrue(() -> server.getManagementService().getResource(brokerConnectionName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getBrokerConnectionControl(brokerConnectionName) != null, 5_000, 100); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(brokerConnectionName); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(brokerConnectionName); final AMQPBridgeManagerControl bridgeControl = - (AMQPBridgeManagerControl) server.getManagementService().getResource(bridgeResourceName); + (AMQPBridgeManagerControl) server.getManagementService().getUntypedControl(bridgeResourceName); final AMQPBridgePolicyManagerControl queuePolicyControl = - (AMQPBridgePolicyManagerControl) server.getManagementService().getResource(policyResourceName); + (AMQPBridgePolicyManagerControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPBridgeSenderControl producerControl = (AMQPBridgeSenderControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(brokerConnection); assertNotNull(bridgeControl); @@ -1418,8 +1416,8 @@ public void testBridgeRemovesQueueProducerManagementWhenConnectionDrops() throws // Closing the connection without a detach or close frame should still cleanup the management // resources for the consumer but the policy views should still be in place - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) != null, 5_000, 100); } } @@ -1470,18 +1468,18 @@ public void testBridgeRemovesQueueProducerManagementWhenBrokerConnectionStopped( Wait.assertTrue(() -> server.queueQuery(SimpleString.of(getTestName())).getConsumerCount() >= 1, 10_000); - final String brokerConnectionName = ResourceNames.BROKER_CONNECTION + getTestName(); + final String brokerConnectionName = getTestName(); final String bridgeResourceName = AMQPBridgeManagementSupport.getBridgeManagerResourceName(getTestName(), getTestName()); final String policyResourceName = AMQPBridgeManagementSupport.getBridgePolicyManagerResourceName(getTestName(), getTestName(), "to-queue-policy"); final String producerResourceName = AMQPBridgeManagementSupport.getBridgeAddressSenderResourceName(getTestName(), getTestName(), "to-queue-policy", getTestName() + "::" + getTestName()); - Wait.assertTrue(() -> server.getManagementService().getResource(brokerConnectionName) != null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(bridgeResourceName) != null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) != null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getBrokerConnectionControl(brokerConnectionName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(bridgeResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) != null, 5_000, 100); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(brokerConnectionName); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(brokerConnectionName); peer.waitForScriptToComplete(5, TimeUnit.SECONDS); peer.expectDetach().optional(); @@ -1494,9 +1492,9 @@ public void testBridgeRemovesQueueProducerManagementWhenBrokerConnectionStopped( // Closing the connection without a detach or close frame should still cleanup the management // resources for the consumer but the policy views should still be in place - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); peer.close(); } diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationConfigurationReloadTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationConfigurationReloadTest.java index 062ff29b8d0..5e40198ef73 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationConfigurationReloadTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationConfigurationReloadTest.java @@ -17,23 +17,14 @@ package org.apache.activemq.artemis.tests.integration.amqp.connect; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_AUTO_DELETE; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_AUTO_DELETE_DELAY; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_AUTO_DELETE_MSG_COUNT; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_RECEIVER_IDLE_TIMEOUT; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_ADDRESS_RECEIVER; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_CONTROL_LINK; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_EVENT_LINK; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_QUEUE_RECEIVER; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_RECEIVER_PRIORITY; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationPolicySupport.DEFAULT_QUEUE_RECEIVER_PRIORITY_ADJUSTMENT; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationPolicySupport.FEDERATED_ADDRESS_SOURCE_PROPERTIES; -import static org.hamcrest.CoreMatchers.allOf; -import static org.hamcrest.CoreMatchers.containsString; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.MessageConsumer; +import javax.jms.MessageProducer; +import javax.jms.Queue; +import javax.jms.Session; +import javax.jms.TextMessage; +import javax.jms.Topic; import java.lang.invoke.MethodHandles; import java.net.URI; import java.net.URL; @@ -45,20 +36,10 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.Session; -import javax.jms.TextMessage; -import javax.jms.Topic; - import org.apache.activemq.artemis.api.core.QueueConfiguration; import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.management.BrokerConnectionControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectConfiguration; import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederatedBrokerConnectionElement; import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederationAddressPolicyElement; @@ -78,6 +59,23 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_AUTO_DELETE; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_AUTO_DELETE_DELAY; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_AUTO_DELETE_MSG_COUNT; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_RECEIVER_IDLE_TIMEOUT; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_ADDRESS_RECEIVER; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_CONTROL_LINK; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_EVENT_LINK; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_QUEUE_RECEIVER; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_RECEIVER_PRIORITY; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationPolicySupport.DEFAULT_QUEUE_RECEIVER_PRIORITY_ADJUSTMENT; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationPolicySupport.FEDERATED_ADDRESS_SOURCE_PROPERTIES; +import static org.hamcrest.CoreMatchers.allOf; +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + /** * Test for reload handling in the broker connection federation implementation */ @@ -194,8 +192,8 @@ public void testFederationConfigurationWithoutChangesIsIgnoredOnUpdate() throws consumer.close(); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(ResourceNames.BROKER_CONNECTION + getTestName()); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(getTestName()); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -391,8 +389,8 @@ public void testFederationDisconnectsFromExistingPeerIfConfigurationRemoved() th .withOfferedCapabilities(FEDERATION_ADDRESS_RECEIVER.toString()); peer.expectFlow().withLinkCredit(1000); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(ResourceNames.BROKER_CONNECTION + getTestName()); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(getTestName()); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -425,7 +423,7 @@ public void testFederationDisconnectsFromExistingPeerIfConfigurationRemoved() th peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - assertNull(server.getManagementService().getResource(ResourceNames.BROKER_CONNECTION + getTestName())); + assertNull(server.getManagementService().getBrokerConnectionControl(getTestName())); assertNotNull(brokerConnection); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationConnectTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationConnectTest.java index 57965195b99..e84355992e2 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationConnectTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationConnectTest.java @@ -17,6 +17,49 @@ package org.apache.activemq.artemis.tests.integration.amqp.connect; +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.JMSException; +import javax.jms.Session; +import java.lang.invoke.MethodHandles; +import java.net.URI; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.TimeUnit; + +import org.apache.activemq.artemis.api.core.ActiveMQException; +import org.apache.activemq.artemis.api.core.SimpleString; +import org.apache.activemq.artemis.api.core.management.BrokerConnectionControl; +import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectConfiguration; +import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederatedBrokerConnectionElement; +import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederationAddressPolicyElement; +import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederationQueuePolicyElement; +import org.apache.activemq.artemis.core.server.ActiveMQServer; +import org.apache.activemq.artemis.core.server.Queue; +import org.apache.activemq.artemis.protocol.amqp.connect.federation.ActiveMQServerAMQPFederationPlugin; +import org.apache.activemq.artemis.protocol.amqp.federation.FederationConsumerInfo; +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; +import org.apache.activemq.artemis.tests.util.Wait; +import org.apache.qpid.proton.amqp.transport.AmqpError; +import org.apache.qpid.protonj2.test.driver.ProtonTestClient; +import org.apache.qpid.protonj2.test.driver.ProtonTestServer; +import org.apache.qpid.protonj2.test.driver.matchers.messaging.MessageAnnotationsMatcher; +import org.apache.qpid.protonj2.test.driver.matchers.transport.TransferPayloadCompositeMatcher; +import org.apache.qpid.protonj2.test.driver.matchers.types.EncodedAmqpValueMatcher; +import org.hamcrest.Matchers; +import org.jgroups.util.UUID; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import static org.apache.activemq.artemis.protocol.amqp.connect.AMQPBrokerConnectionConstants.BROKER_CONNECTION_INFO; import static org.apache.activemq.artemis.protocol.amqp.connect.AMQPBrokerConnectionConstants.CONNECTION_NAME; import static org.apache.activemq.artemis.protocol.amqp.connect.AMQPBrokerConnectionConstants.NODE_ID; @@ -69,51 +112,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; -import java.lang.invoke.MethodHandles; -import java.net.URI; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.ForkJoinPool; -import java.util.concurrent.TimeUnit; - -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.Session; - -import org.apache.activemq.artemis.api.core.ActiveMQException; -import org.apache.activemq.artemis.api.core.SimpleString; -import org.apache.activemq.artemis.api.core.management.BrokerConnectionControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; -import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectConfiguration; -import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederatedBrokerConnectionElement; -import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederationAddressPolicyElement; -import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederationQueuePolicyElement; -import org.apache.activemq.artemis.core.server.ActiveMQServer; -import org.apache.activemq.artemis.core.server.Queue; -import org.apache.activemq.artemis.protocol.amqp.connect.federation.ActiveMQServerAMQPFederationPlugin; -import org.apache.activemq.artemis.protocol.amqp.federation.FederationConsumerInfo; -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; -import org.apache.activemq.artemis.tests.util.Wait; -import org.apache.qpid.proton.amqp.transport.AmqpError; -import org.apache.qpid.protonj2.test.driver.ProtonTestClient; -import org.apache.qpid.protonj2.test.driver.ProtonTestServer; -import org.apache.qpid.protonj2.test.driver.matchers.messaging.MessageAnnotationsMatcher; -import org.apache.qpid.protonj2.test.driver.matchers.transport.TransferPayloadCompositeMatcher; -import org.apache.qpid.protonj2.test.driver.matchers.types.EncodedAmqpValueMatcher; -import org.hamcrest.Matchers; -import org.jgroups.util.UUID; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.Timeout; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * Tests basic connect handling of the AMQP federation feature. */ @@ -199,8 +197,8 @@ public void testBrokerConnectsAndCreateManagementResource() throws Exception { peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(ResourceNames.BROKER_CONNECTION + getTestName()); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(getTestName()); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationManagementTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationManagementTest.java index c9ef4c1daf0..53f4837c653 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationManagementTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/amqp/connect/AMQPFederationManagementTest.java @@ -16,45 +16,13 @@ */ package org.apache.activemq.artemis.tests.integration.amqp.connect; -import static org.apache.activemq.artemis.protocol.amqp.connect.AMQPBrokerConnectionConstants.BROKER_CONNECTION_INFO; -import static org.apache.activemq.artemis.protocol.amqp.connect.AMQPBrokerConnectionConstants.CONNECTION_NAME; -import static org.apache.activemq.artemis.protocol.amqp.connect.AMQPBrokerConnectionConstants.NODE_ID; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_AUTO_DELETE; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_AUTO_DELETE_DELAY; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_AUTO_DELETE_MSG_COUNT; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_ENABLE_DIVERT_BINDINGS; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_INCLUDES; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_MAX_HOPS; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_RECEIVER_IDLE_TIMEOUT; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADD_ADDRESS_POLICY; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADD_QUEUE_POLICY; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_ADDRESS_RECEIVER; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_CONFIGURATION; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_CONTROL_LINK; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_EVENT_LINK; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_NAME; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_POLICY_NAME; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_QUEUE_RECEIVER; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_RECEIVER_PRIORITY; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.OPERATION_TYPE; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.POLICY_NAME; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.QUEUE_INCLUDES; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.QUEUE_INCLUDE_FEDERATED; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.QUEUE_PRIORITY_ADJUSTMENT; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.QUEUE_RECEIVER_IDLE_TIMEOUT; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.RECEIVER_CREDITS; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.RECEIVER_CREDITS_LOW; -import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationPolicySupport.DEFAULT_QUEUE_RECEIVER_PRIORITY_ADJUSTMENT; -import static org.hamcrest.CoreMatchers.allOf; -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.Message; +import javax.jms.MessageConsumer; +import javax.jms.MessageProducer; +import javax.jms.Session; +import javax.jms.TextMessage; import java.lang.invoke.MethodHandles; import java.net.URI; import java.util.ArrayList; @@ -64,20 +32,11 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Session; -import javax.jms.TextMessage; - import org.apache.activemq.artemis.api.core.QueueConfiguration; import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.management.BrokerConnectionControl; import org.apache.activemq.artemis.api.core.management.RemoteBrokerConnectionControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectConfiguration; import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederatedBrokerConnectionElement; import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederationAddressPolicyElement; @@ -87,11 +46,11 @@ import org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConsumerControl; import org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationControl; import org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationLocalPolicyControl; +import org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationLocalPolicyControlType; import org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationManagementSupport; import org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationProducerControl; import org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationRemotePolicyControlType; import org.apache.activemq.artemis.protocol.amqp.proton.AmqpSupport; -import org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationLocalPolicyControlType; import org.apache.activemq.artemis.tests.integration.amqp.AmqpClientTestSupport; import org.apache.activemq.artemis.tests.util.CFUtil; import org.apache.activemq.artemis.utils.Wait; @@ -107,6 +66,45 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.apache.activemq.artemis.protocol.amqp.connect.AMQPBrokerConnectionConstants.BROKER_CONNECTION_INFO; +import static org.apache.activemq.artemis.protocol.amqp.connect.AMQPBrokerConnectionConstants.CONNECTION_NAME; +import static org.apache.activemq.artemis.protocol.amqp.connect.AMQPBrokerConnectionConstants.NODE_ID; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_AUTO_DELETE; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_AUTO_DELETE_DELAY; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_AUTO_DELETE_MSG_COUNT; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_ENABLE_DIVERT_BINDINGS; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_INCLUDES; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_MAX_HOPS; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADDRESS_RECEIVER_IDLE_TIMEOUT; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADD_ADDRESS_POLICY; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.ADD_QUEUE_POLICY; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_ADDRESS_RECEIVER; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_CONFIGURATION; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_CONTROL_LINK; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_EVENT_LINK; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_NAME; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_POLICY_NAME; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_QUEUE_RECEIVER; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.FEDERATION_RECEIVER_PRIORITY; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.OPERATION_TYPE; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.POLICY_NAME; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.QUEUE_INCLUDES; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.QUEUE_INCLUDE_FEDERATED; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.QUEUE_PRIORITY_ADJUSTMENT; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.QUEUE_RECEIVER_IDLE_TIMEOUT; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.RECEIVER_CREDITS; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationConstants.RECEIVER_CREDITS_LOW; +import static org.apache.activemq.artemis.protocol.amqp.connect.federation.AMQPFederationPolicySupport.DEFAULT_QUEUE_RECEIVER_PRIORITY_ADJUSTMENT; +import static org.hamcrest.CoreMatchers.allOf; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + /** * Tests that the broker create management objects for federation configurations. */ @@ -185,10 +183,10 @@ public void testFederationCreatesManagementResourcesForAddressPolicyConfiguratio peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final String brokerConnectionName = ResourceNames.BROKER_CONNECTION + getTestName(); + final String brokerConnectionName = getTestName(); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(brokerConnectionName); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(brokerConnectionName); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -198,9 +196,9 @@ public void testFederationCreatesManagementResourcesForAddressPolicyConfiguratio final String consumerResourceName = AMQPFederationManagementSupport.getFederationSourceAddressConsumerResourceName(getTestName(), getTestName(), "address-policy", getTestName()); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); final AMQPFederationLocalPolicyControl addressPolicyControl = - (AMQPFederationLocalPolicyControl) server.getManagementService().getResource(policyResourceName); + (AMQPFederationLocalPolicyControl) server.getManagementService().getUntypedControl(policyResourceName); assertNotNull(federationControl); assertEquals(getTestName(), federationControl.getName()); @@ -212,7 +210,7 @@ public void testFederationCreatesManagementResourcesForAddressPolicyConfiguratio assertEquals(0, addressPolicyControl.getMessagesReceived()); final AMQPFederationConsumerControl consumerControl = (AMQPFederationConsumerControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(consumerControl); assertEquals(getTestName(), consumerControl.getAddress()); @@ -223,9 +221,9 @@ public void testFederationCreatesManagementResourcesForAddressPolicyConfiguratio brokerConnection.stop(); // Stopping the connection should remove the federation consumer management objects. - Wait.assertTrue(() -> server.getManagementService().getResource(consumerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(consumerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); server.getBrokerConnections().forEach((connection) -> { try { @@ -235,9 +233,9 @@ public void testFederationCreatesManagementResourcesForAddressPolicyConfiguratio } }); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(federationResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(brokerConnectionName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(federationResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getBrokerConnectionControl(brokerConnectionName) == null, 5_000, 100); peer.close(); } @@ -302,8 +300,8 @@ public void testFederationRemovesAddressConsumerManagementWhenConnectionDrops() peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(ResourceNames.BROKER_CONNECTION + getTestName()); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(getTestName()); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -313,11 +311,11 @@ public void testFederationRemovesAddressConsumerManagementWhenConnectionDrops() final String consumerResourceName = AMQPFederationManagementSupport.getFederationSourceAddressConsumerResourceName(getTestName(), getTestName(), "address-policy", getTestName()); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); final AMQPFederationLocalPolicyControl addressPolicyControl = - (AMQPFederationLocalPolicyControl) server.getManagementService().getResource(policyResourceName); + (AMQPFederationLocalPolicyControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationConsumerControl consumerControl = (AMQPFederationConsumerControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(federationControl); assertNotNull(addressPolicyControl); @@ -328,8 +326,8 @@ public void testFederationRemovesAddressConsumerManagementWhenConnectionDrops() // Closing the connection without a detach or close frame should still cleanup the management // resources for the consumer but the policy views should still be in place - Wait.assertTrue(() -> server.getManagementService().getResource(consumerResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(consumerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) != null, 5_000, 100); } } @@ -392,8 +390,8 @@ public void testFederationRemovesAddressConsumerManagementWhenBrokerConnectionSt peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(ResourceNames.BROKER_CONNECTION + getTestName()); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(getTestName()); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -403,11 +401,11 @@ public void testFederationRemovesAddressConsumerManagementWhenBrokerConnectionSt final String consumerResourceName = AMQPFederationManagementSupport.getFederationSourceAddressConsumerResourceName(getTestName(), getTestName(), "address-policy", getTestName()); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); final AMQPFederationLocalPolicyControl addressPolicyControl = - (AMQPFederationLocalPolicyControl) server.getManagementService().getResource(policyResourceName); + (AMQPFederationLocalPolicyControl) server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationConsumerControl consumerControl = (AMQPFederationConsumerControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(federationControl); assertNotNull(addressPolicyControl); @@ -422,9 +420,9 @@ public void testFederationRemovesAddressConsumerManagementWhenBrokerConnectionSt // Closing the connection without a detach or close frame should still cleanup the management // resources for the consumer but the policy views should still be in place - Wait.assertTrue(() -> server.getManagementService().getResource(consumerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(consumerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); peer.close(); } @@ -498,15 +496,15 @@ public void testFederationCreatesManagementResourcesForQueuePolicyConfigurations peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final String brokerConnectionName = ResourceNames.BROKER_CONNECTION + getTestName(); + final String brokerConnectionName = getTestName(); final String federationResourceName = AMQPFederationManagementSupport.getFederationSourceResourceName(getTestName(), getTestName()); final String policyResourceName = AMQPFederationManagementSupport.getFederationSourcePolicyResourceName(getTestName(), getTestName(), "queue-policy"); final String consumerResourceName = AMQPFederationManagementSupport.getFederationSourceAddressConsumerResourceName(getTestName(), getTestName(), "queue-policy", getTestName() + "::" + getTestName()); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(brokerConnectionName); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(brokerConnectionName); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -516,14 +514,14 @@ public void testFederationCreatesManagementResourcesForQueuePolicyConfigurations assertEquals(0, federationControl.getMessagesSent()); final AMQPFederationLocalPolicyControlType queuePolicyControl = - (AMQPFederationLocalPolicyControlType) server.getManagementService().getResource(policyResourceName); + (AMQPFederationLocalPolicyControlType) server.getManagementService().getUntypedControl(policyResourceName); assertNotNull(queuePolicyControl); assertEquals("queue-policy", queuePolicyControl.getName()); assertEquals(0, queuePolicyControl.getMessagesReceived()); final AMQPFederationConsumerControl consumerControl = - (AMQPFederationConsumerControl) server.getManagementService().getResource(consumerResourceName); + (AMQPFederationConsumerControl) server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(consumerControl); assertEquals(getTestName(), consumerControl.getAddress()); @@ -537,9 +535,9 @@ public void testFederationCreatesManagementResourcesForQueuePolicyConfigurations brokerConnection.stop(); // Stopping the connection should remove the federation management objects. - Wait.assertTrue(() -> server.getManagementService().getResource(consumerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(consumerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); server.getBrokerConnections().forEach((brConnection) -> { try { @@ -549,9 +547,9 @@ public void testFederationCreatesManagementResourcesForQueuePolicyConfigurations } }); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(federationResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(brokerConnectionName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(federationResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getBrokerConnectionControl(brokerConnectionName) == null, 5_000, 100); peer.close(); } @@ -630,18 +628,18 @@ public void testFederationRemovesQueueConsumerManagementWhenConnectionDrops() th final String policyResourceName = AMQPFederationManagementSupport.getFederationSourcePolicyResourceName(getTestName(), getTestName(), "queue-policy"); final String consumerResourceName = AMQPFederationManagementSupport.getFederationSourceAddressConsumerResourceName(getTestName(), getTestName(), "queue-policy", getTestName() + "::" + getTestName()); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(ResourceNames.BROKER_CONNECTION + getTestName()); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(getTestName()); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); final AMQPFederationLocalPolicyControlType queuePolicyControl = - (AMQPFederationLocalPolicyControlType) server.getManagementService().getResource(policyResourceName); + (AMQPFederationLocalPolicyControlType) server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationConsumerControl consumerControl = - (AMQPFederationConsumerControl) server.getManagementService().getResource(consumerResourceName); + (AMQPFederationConsumerControl) server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(federationControl); assertNotNull(queuePolicyControl); @@ -652,8 +650,8 @@ public void testFederationRemovesQueueConsumerManagementWhenConnectionDrops() th // Closing the connection without a detach or close frame should still cleanup the management // resources for the consumer but the policy views should still be in place - Wait.assertTrue(() -> server.getManagementService().getResource(consumerResourceName) == null, 5_000, 100); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) != null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(consumerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) != null, 5_000, 100); } } } @@ -730,18 +728,18 @@ public void testFederationRemovesQueueConsumerManagementWhenBrokerConnectionStop final String policyResourceName = AMQPFederationManagementSupport.getFederationSourcePolicyResourceName(getTestName(), getTestName(), "queue-policy"); final String consumerResourceName = AMQPFederationManagementSupport.getFederationSourceAddressConsumerResourceName(getTestName(), getTestName(), "queue-policy", getTestName() + "::" + getTestName()); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(ResourceNames.BROKER_CONNECTION + getTestName()); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(getTestName()); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); final AMQPFederationLocalPolicyControlType queuePolicyControl = - (AMQPFederationLocalPolicyControlType) server.getManagementService().getResource(policyResourceName); + (AMQPFederationLocalPolicyControlType) server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationConsumerControl consumerControl = - (AMQPFederationConsumerControl) server.getManagementService().getResource(consumerResourceName); + (AMQPFederationConsumerControl) server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(federationControl); assertNotNull(queuePolicyControl); @@ -756,9 +754,9 @@ public void testFederationRemovesQueueConsumerManagementWhenBrokerConnectionStop // Closing the connection without a detach or close frame should still cleanup the management // resources for the consumer but the policy views should still be in place - Wait.assertTrue(() -> server.getManagementService().getResource(consumerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(consumerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); peer.close(); } @@ -821,7 +819,7 @@ public void testAddressManagementTracksMessagesAtPolicyAndConsumerLevels() throw final String consumerResourceName = AMQPFederationManagementSupport.getFederationSourceAddressConsumerResourceName(getTestName(), getTestName(), "address-policy", getTestName()); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); final ConnectionFactory factory = CFUtil.createConnectionFactory("AMQP", "tcp://localhost:" + AMQP_PORT); @@ -839,9 +837,9 @@ public void testAddressManagementTracksMessagesAtPolicyAndConsumerLevels() throw peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPFederationLocalPolicyControl addressPolicyControl = (AMQPFederationLocalPolicyControl) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationConsumerControl consumerControl = (AMQPFederationConsumerControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertEquals(1, federationControl.getMessagesReceived()); assertEquals(1, addressPolicyControl.getMessagesReceived()); @@ -858,9 +856,9 @@ public void testAddressManagementTracksMessagesAtPolicyAndConsumerLevels() throw // Policy bean should still be active but consumer bean should be unregistered { final AMQPFederationLocalPolicyControl addressPolicyControl = (AMQPFederationLocalPolicyControl) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationConsumerControl consumerControl = (AMQPFederationConsumerControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(addressPolicyControl); assertNull(consumerControl); @@ -895,9 +893,9 @@ public void testAddressManagementTracksMessagesAtPolicyAndConsumerLevels() throw peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPFederationLocalPolicyControl addressPolicyControl = (AMQPFederationLocalPolicyControl) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationConsumerControl consumerControl = (AMQPFederationConsumerControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertEquals(2, federationControl.getMessagesReceived()); assertEquals(2, addressPolicyControl.getMessagesReceived()); @@ -973,7 +971,7 @@ public void testQueueManagementTracksMessagesAtPolicyAndConsumerLevels() throws final String consumerResourceName = AMQPFederationManagementSupport.getFederationSourceAddressConsumerResourceName(getTestName(), getTestName(), "queue-policy", getTestName() + "::" + getTestName()); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); final ConnectionFactory factory = CFUtil.createConnectionFactory("AMQP", "tcp://localhost:" + AMQP_PORT); @@ -991,9 +989,9 @@ public void testQueueManagementTracksMessagesAtPolicyAndConsumerLevels() throws peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPFederationLocalPolicyControlType queuePolicyControl = (AMQPFederationLocalPolicyControlType) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationConsumerControl consumerControl = (AMQPFederationConsumerControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertEquals(1, federationControl.getMessagesReceived()); assertEquals(1, queuePolicyControl.getMessagesReceived()); @@ -1010,9 +1008,9 @@ public void testQueueManagementTracksMessagesAtPolicyAndConsumerLevels() throws // Policy bean should still be active but consumer bean should be unregistered { final AMQPFederationLocalPolicyControlType queuePolicyControl = (AMQPFederationLocalPolicyControlType) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationConsumerControl consumerControl = (AMQPFederationConsumerControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertNotNull(queuePolicyControl); assertNull(consumerControl); @@ -1047,9 +1045,9 @@ public void testQueueManagementTracksMessagesAtPolicyAndConsumerLevels() throws peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPFederationLocalPolicyControlType queuePolicyControl = (AMQPFederationLocalPolicyControlType) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationConsumerControl consumerControl = (AMQPFederationConsumerControl) - server.getManagementService().getResource(consumerResourceName); + server.getManagementService().getUntypedControl(consumerResourceName); assertEquals(2, federationControl.getMessagesReceived()); assertEquals(2, queuePolicyControl.getMessagesReceived()); @@ -1175,11 +1173,11 @@ public void testRemoteAddressFederationTracksMessagesAtPolicyAndProducerLevels() peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); final AMQPFederationRemotePolicyControlType remotePolicyControl = (AMQPFederationRemotePolicyControlType) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); AMQPFederationProducerControl producerControl = (AMQPFederationProducerControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(remotePolicyControl); assertNotNull(producerControl); @@ -1215,7 +1213,7 @@ public void testRemoteAddressFederationTracksMessagesAtPolicyAndProducerLevels() peer.waitForScriptToComplete(500000, TimeUnit.SECONDS); // Should have cleaned up the producer management resource - assertNull(server.getManagementService().getResource(producerResourceName)); + assertNull(server.getManagementService().getUntypedControl(producerResourceName)); peer.expectAttach().ofSender().withName("federation-address-receiver") .withOfferedCapabilities(FEDERATION_ADDRESS_RECEIVER.toString()) @@ -1242,7 +1240,7 @@ public void testRemoteAddressFederationTracksMessagesAtPolicyAndProducerLevels() peer.expectTransfer().accept(); // Federated message producerControl = (AMQPFederationProducerControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(producerControl); assertEquals(getTestName(), producerControl.getAddress()); @@ -1264,7 +1262,7 @@ public void testRemoteAddressFederationTracksMessagesAtPolicyAndProducerLevels() peer.close(); // Connection drop should clean up producer instance from management. - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) == null, 5000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) == null, 5000, 100); } } @@ -1364,14 +1362,14 @@ public void testRemoteAddressFederationTrackingCleanedUpOnBrokerConnectionStoppe peer.waitForScriptToComplete(5, TimeUnit.SECONDS); peer.expectConnectionToDrop(); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(ResourceNames.BROKER_CONNECTION + getTestName()); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(getTestName()); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); final AMQPFederationRemotePolicyControlType remotePolicyControl = (AMQPFederationRemotePolicyControlType) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationProducerControl producerControl = (AMQPFederationProducerControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -1386,9 +1384,9 @@ public void testRemoteAddressFederationTrackingCleanedUpOnBrokerConnectionStoppe peer.waitForScriptToComplete(5, TimeUnit.SECONDS); // Broker connection stop should clean up producer instance from management. - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) == null, 10_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) == null, 10_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); peer.close(); } @@ -1501,11 +1499,11 @@ public void testRemoteQueueFederationTracksMessagesAtPolicyAndProducerLevels() t peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); final AMQPFederationRemotePolicyControlType remotePolicyControl = (AMQPFederationRemotePolicyControlType) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); AMQPFederationProducerControl producerControl = (AMQPFederationProducerControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(remotePolicyControl); assertNotNull(producerControl); @@ -1541,7 +1539,7 @@ public void testRemoteQueueFederationTracksMessagesAtPolicyAndProducerLevels() t peer.waitForScriptToComplete(500000, TimeUnit.SECONDS); // Should have cleaned up the producer management resource - assertNull(server.getManagementService().getResource(producerResourceName)); + assertNull(server.getManagementService().getUntypedControl(producerResourceName)); peer.expectAttach().ofSender().withName("federation-queue-receiver") .withOfferedCapabilities(FEDERATION_QUEUE_RECEIVER.toString()) @@ -1568,7 +1566,7 @@ public void testRemoteQueueFederationTracksMessagesAtPolicyAndProducerLevels() t peer.expectTransfer().accept(); // Federated message producerControl = (AMQPFederationProducerControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(producerControl); assertEquals(getTestName(), producerControl.getQueueName()); @@ -1589,7 +1587,7 @@ public void testRemoteQueueFederationTracksMessagesAtPolicyAndProducerLevels() t peer.close(); - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) == null, 5000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) == null, 5000, 100); } } @@ -1686,14 +1684,14 @@ public void testRemoteQueueFederationTrackingCleanedUpOnBrokerConnectionStopped( peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final BrokerConnectionControl brokerConnection = (BrokerConnectionControl) - server.getManagementService().getResource(ResourceNames.BROKER_CONNECTION + getTestName()); + final BrokerConnectionControl brokerConnection = + server.getManagementService().getBrokerConnectionControl(getTestName()); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); final AMQPFederationRemotePolicyControlType remotePolicyControl = (AMQPFederationRemotePolicyControlType) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationProducerControl producerControl = (AMQPFederationProducerControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(brokerConnection); assertTrue(brokerConnection.isConnected()); @@ -1708,9 +1706,9 @@ public void testRemoteQueueFederationTrackingCleanedUpOnBrokerConnectionStopped( peer.waitForScriptToComplete(5, TimeUnit.SECONDS); // Broker connection stop should clean up producer instance from management. - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) == null, 5_000, 100); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) == null, 5_000, 100); - assertNotNull(server.getManagementService().getResource(policyResourceName)); + assertNotNull(server.getManagementService().getUntypedControl(policyResourceName)); peer.close(); } @@ -1724,7 +1722,7 @@ public void testRemoteBrokerRegistersAndRemovesRemoteAddressFederationBrokerConn final String serverNodeId = server.getNodeID().toString(); final String brokerConnectionName = getTestName(); - final String remoteBrokerConnectionName = ResourceNames.REMOTE_BROKER_CONNECTION + server.getNodeID() + "." + getTestName(); + final String remoteBrokerConnectionName = server.getNodeID() + "." + getTestName(); final String federationResourceName = AMQPFederationManagementSupport.getFederationTargetResourceName(serverNodeId, brokerConnectionName, getTestName()); final String policyResourceName = AMQPFederationManagementSupport.getFederationTargetPolicyResourceName(serverNodeId, brokerConnectionName, getTestName(), "address-policy"); @@ -1737,15 +1735,15 @@ public void testRemoteBrokerRegistersAndRemovesRemoteAddressFederationBrokerConn peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final RemoteBrokerConnectionControl remoteBrokerConnection = (RemoteBrokerConnectionControl) - server.getManagementService().getResource(remoteBrokerConnectionName); + final RemoteBrokerConnectionControl remoteBrokerConnection = + server.getManagementService().getRemoteBrokerConnectionControl(remoteBrokerConnectionName); assertNotNull(remoteBrokerConnection); assertEquals(getTestName(), remoteBrokerConnection.getName()); assertEquals(server.getNodeID().toString(), remoteBrokerConnection.getNodeId()); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); peer.waitForScriptToComplete(5, TimeUnit.SECONDS); peer.expectAttach().ofSender().withName(getTestName()) @@ -1770,9 +1768,9 @@ public void testRemoteBrokerRegistersAndRemovesRemoteAddressFederationBrokerConn peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPFederationRemotePolicyControlType remotePolicyControl = (AMQPFederationRemotePolicyControlType) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationProducerControl producerControl = (AMQPFederationProducerControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(federationControl); assertNotNull(remotePolicyControl); @@ -1785,10 +1783,10 @@ public void testRemoteBrokerRegistersAndRemovesRemoteAddressFederationBrokerConn peer.waitForScriptToComplete(5, TimeUnit.SECONDS); peer.close(); - Wait.assertTrue(() -> server.getManagementService().getResource(remoteBrokerConnectionName) == null, 5_000, 50); - Wait.assertTrue(() -> server.getManagementService().getResource(federationResourceName) == null, 5_000, 50); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) == null, 5_000, 50); - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) == null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(remoteBrokerConnectionName) == null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(federationResourceName) == null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) == null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) == null, 5_000, 50); } // Test registers and cleans up on connection dropped @@ -1799,7 +1797,7 @@ public void testRemoteBrokerRegistersAndRemovesRemoteAddressFederationBrokerConn peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); assertNotNull(federationControl); @@ -1826,9 +1824,9 @@ public void testRemoteBrokerRegistersAndRemovesRemoteAddressFederationBrokerConn peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPFederationRemotePolicyControlType remotePolicyControl = (AMQPFederationRemotePolicyControlType) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationProducerControl producerControl = (AMQPFederationProducerControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(federationControl); assertNotNull(remotePolicyControl); @@ -1837,8 +1835,8 @@ public void testRemoteBrokerRegistersAndRemovesRemoteAddressFederationBrokerConn peer.waitForScriptToComplete(5, TimeUnit.SECONDS); peer.close(); - Wait.assertTrue(() -> server.getManagementService().getResource(remoteBrokerConnectionName) == null, 5_000, 50); - Wait.assertTrue(() -> server.getManagementService().getResource(federationResourceName) == null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(remoteBrokerConnectionName) == null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(federationResourceName) == null, 5_000, 50); } } @@ -1852,7 +1850,7 @@ public void testRemoteBrokerRegistersAndRemovesRemoteQueueFederationBrokerConnec final String serverNodeId = server.getNodeID().toString(); final String brokerConnectionName = getTestName(); - final String remoteBrokerConnectionName = ResourceNames.REMOTE_BROKER_CONNECTION + server.getNodeID() + "." + getTestName(); + final String remoteBrokerConnectionName = server.getNodeID() + "." + getTestName(); final String federationResourceName = AMQPFederationManagementSupport.getFederationTargetResourceName(serverNodeId, brokerConnectionName, getTestName()); final String policyResourceName = AMQPFederationManagementSupport.getFederationTargetPolicyResourceName(serverNodeId, brokerConnectionName, getTestName(), "queue-policy"); @@ -1865,15 +1863,15 @@ public void testRemoteBrokerRegistersAndRemovesRemoteQueueFederationBrokerConnec peer.waitForScriptToComplete(5, TimeUnit.SECONDS); - final RemoteBrokerConnectionControl remoteBrokerConnection = (RemoteBrokerConnectionControl) - server.getManagementService().getResource(remoteBrokerConnectionName); + final RemoteBrokerConnectionControl remoteBrokerConnection = + server.getManagementService().getRemoteBrokerConnectionControl(remoteBrokerConnectionName); assertNotNull(remoteBrokerConnection); assertEquals(getTestName(), remoteBrokerConnection.getName()); assertEquals(server.getNodeID().toString(), remoteBrokerConnection.getNodeId()); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); peer.waitForScriptToComplete(5, TimeUnit.SECONDS); peer.expectAttach().ofSender().withName(getTestName() + "::" + getTestName()) @@ -1899,9 +1897,9 @@ public void testRemoteBrokerRegistersAndRemovesRemoteQueueFederationBrokerConnec peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPFederationRemotePolicyControlType remotePolicyControl = (AMQPFederationRemotePolicyControlType) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationProducerControl producerControl = (AMQPFederationProducerControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(federationControl); assertNotNull(remotePolicyControl); @@ -1914,10 +1912,10 @@ public void testRemoteBrokerRegistersAndRemovesRemoteQueueFederationBrokerConnec peer.waitForScriptToComplete(5, TimeUnit.SECONDS); peer.close(); - Wait.assertTrue(() -> server.getManagementService().getResource(remoteBrokerConnectionName) == null, 5_000, 50); - Wait.assertTrue(() -> server.getManagementService().getResource(federationResourceName) == null, 5_000, 50); - Wait.assertTrue(() -> server.getManagementService().getResource(policyResourceName) == null, 5_000, 50); - Wait.assertTrue(() -> server.getManagementService().getResource(producerResourceName) == null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(remoteBrokerConnectionName) == null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(federationResourceName) == null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(policyResourceName) == null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(producerResourceName) == null, 5_000, 50); } // Test registers and cleans up on connection dropped @@ -1928,7 +1926,7 @@ public void testRemoteBrokerRegistersAndRemovesRemoteQueueFederationBrokerConnec peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPFederationControl federationControl = - (AMQPFederationControl) server.getManagementService().getResource(federationResourceName); + (AMQPFederationControl) server.getManagementService().getUntypedControl(federationResourceName); assertNotNull(federationControl); @@ -1956,9 +1954,9 @@ public void testRemoteBrokerRegistersAndRemovesRemoteQueueFederationBrokerConnec peer.waitForScriptToComplete(5, TimeUnit.SECONDS); final AMQPFederationRemotePolicyControlType remotePolicyControl = (AMQPFederationRemotePolicyControlType) - server.getManagementService().getResource(policyResourceName); + server.getManagementService().getUntypedControl(policyResourceName); final AMQPFederationProducerControl producerControl = (AMQPFederationProducerControl) - server.getManagementService().getResource(producerResourceName); + server.getManagementService().getUntypedControl(producerResourceName); assertNotNull(federationControl); assertNotNull(remotePolicyControl); @@ -1967,8 +1965,8 @@ public void testRemoteBrokerRegistersAndRemovesRemoteQueueFederationBrokerConnec peer.waitForScriptToComplete(5, TimeUnit.SECONDS); peer.close(); - Wait.assertTrue(() -> server.getManagementService().getResource(remoteBrokerConnectionName) == null, 5_000, 50); - Wait.assertTrue(() -> server.getManagementService().getResource(federationResourceName) == null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(remoteBrokerConnectionName) == null, 5_000, 50); + Wait.assertTrue(() -> server.getManagementService().getUntypedControl(federationResourceName) == null, 5_000, 50); } } 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 693799da18a..7dd6ec9e474 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 @@ -1704,7 +1704,7 @@ public void testAddressFederationWithRestartReceivesMessagesSentToAddressWhileOf server.start(); // check federation has reconnected - Wait.assertTrue(() -> server.getManagementService().getResources(AMQPFederationConsumerControlType.class).length == 1); + Wait.assertTrue(() -> server.getManagementService().getUntypedControls(AMQPFederationConsumerControlType.class).size() == 1); Wait.assertTrue(() -> server.bindingQuery(SimpleString.of(getTestName()), false).getQueueNames().size() >= 1); Wait.assertTrue(() -> remoteServer.bindingQuery(SimpleString.of(getTestName()), false).getQueueNames().size() >= 1); @@ -1797,7 +1797,7 @@ public void testRemoteAddressFederationWithRestartReceivesMessagesSentToAddressW remoteServer.start(); // check federation has reconnected - Wait.assertTrue(() -> remoteServer.getManagementService().getResources(AMQPFederationConsumerControlType.class).length == 1); + Wait.assertTrue(() -> remoteServer.getManagementService().getUntypedControls(AMQPFederationConsumerControlType.class).size() == 1); 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/client/AddressPauseTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AddressPauseTest.java index ee440831fce..a11be3eb414 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AddressPauseTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AddressPauseTest.java @@ -16,21 +16,21 @@ */ package org.apache.activemq.artemis.tests.integration.client; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - import javax.jms.Connection; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import javax.jms.Topic; import javax.jms.TopicSubscriber; + import org.apache.activemq.artemis.api.core.management.AddressControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.tests.util.JMSTestBase; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + public class AddressPauseTest extends JMSTestBase { @@ -47,7 +47,7 @@ public void testPauseAddress() throws Exception { try (Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE)) { Topic topic = session.createTopic("jms.topic.MyTopic"); TopicSubscriber subscriber1 = session.createDurableSubscriber(topic, "my-subscription1"); - AddressControl addressControl = (AddressControl) server.getManagementService().getResource(ResourceNames.ADDRESS + "jms.topic.MyTopic"); + AddressControl addressControl = server.getManagementService().getAddressControl("jms.topic.MyTopic"); MessageProducer producer = session.createProducer(topic); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { @@ -101,7 +101,7 @@ public void testPauseAddressServerRestart() throws Exception { try (Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE)) { Topic topic = session.createTopic("jms.topic.MyTopic"); TopicSubscriber subscriber1 = session.createDurableSubscriber(topic, "my-subscription1"); - AddressControl addressControl = (AddressControl) server.getManagementService().getResource(ResourceNames.ADDRESS + "jms.topic.MyTopic"); + AddressControl addressControl = server.getManagementService().getAddressControl("jms.topic.MyTopic"); MessageProducer producer = session.createProducer(topic); for (int i = 0; i < numMessages; i++) { TextMessage mess = session.createTextMessage("msg" + i); @@ -128,7 +128,7 @@ public void testPauseAddressServerRestart() throws Exception { try (Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE)) { Topic topic = session.createTopic("jms.topic.MyTopic"); TopicSubscriber subscriber1 = session.createDurableSubscriber(topic, "my-subscription1"); - AddressControl addressControl = (AddressControl) server.getManagementService().getResource(ResourceNames.ADDRESS + "jms.topic.MyTopic"); + AddressControl addressControl = server.getManagementService().getAddressControl("jms.topic.MyTopic"); MessageProducer producer = session.createProducer(topic); assertTrue(addressControl.isPaused()); //subscriber2 should be paused too diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateJmsDestinationTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateJmsDestinationTest.java index e1717f42867..918f0684773 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateJmsDestinationTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateJmsDestinationTest.java @@ -16,16 +16,6 @@ */ package org.apache.activemq.artemis.tests.integration.client; -import static org.apache.activemq.artemis.api.core.management.ResourceNames.ADDRESS; -import static org.apache.activemq.artemis.api.core.management.ResourceNames.QUEUE; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; @@ -46,7 +36,6 @@ 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.ResourceNames; import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient; import org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl; import org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl; @@ -61,9 +50,9 @@ import org.apache.activemq.artemis.jms.client.ActiveMQTopic; import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager; import org.apache.activemq.artemis.tests.util.JMSTestBase; -import org.apache.activemq.artemis.utils.RandomUtil; import org.apache.activemq.artemis.tests.util.Wait; import org.apache.activemq.artemis.utils.CompositeAddress; +import org.apache.activemq.artemis.utils.RandomUtil; import org.apache.activemq.artemis.utils.UUIDGenerator; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -72,6 +61,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + public class AutoCreateJmsDestinationTest extends JMSTestBase { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); @@ -108,8 +105,8 @@ public void testAutoCreateOnSendToQueue() throws Exception { } // make sure the JMX control was created for the address and queue - assertNotNull(server.getManagementService().getResource(ADDRESS + QUEUE_NAME)); - assertNotNull(server.getManagementService().getResource(QUEUE + QUEUE_NAME)); + assertNotNull(server.getManagementService().getAddressControl(QUEUE_NAME)); + assertNotNull(server.getManagementService().getQueueControl(QUEUE_NAME)); connection.close(); } @@ -143,8 +140,8 @@ public void testAutoCreateOnSendToFQQN() throws Exception { } // make sure the JMX control was created for the address and queue - assertNotNull(server.getManagementService().getResource(ADDRESS + addressName)); - assertNotNull(server.getManagementService().getResource(QUEUE + queueName)); + assertNotNull(server.getManagementService().getAddressControl(addressName)); + assertNotNull(server.getManagementService().getQueueControl(queueName)); connection.close(); } @@ -245,7 +242,7 @@ public void testAutoCreateOnSendToTopic() throws Exception { connection.close(); - assertNotNull(server.getManagementService().getResource(ResourceNames.ADDRESS + "test")); + assertNotNull(server.getManagementService().getAddressControl("test")); } @Test @@ -304,14 +301,14 @@ public void testAutoCreateOnSubscribeToTopic() throws Exception { connection.start(); assertNotNull(consumer.receive(500)); - assertNotNull(server.getManagementService().getResource(ResourceNames.ADDRESS + topicName)); + assertNotNull(server.getManagementService().getAddressControl(topicName)); connection.close(); PostOfficeTestAccessor.reapAddresses((PostOfficeImpl) server.getPostOffice()); PostOfficeTestAccessor.reapAddresses((PostOfficeImpl) server.getPostOffice()); - Wait.assertTrue(() -> server.getManagementService().getResource(ResourceNames.ADDRESS + topicName) == null); + Wait.assertTrue(() -> server.getManagementService().getAddressControl(topicName) == null); } @Test @@ -330,7 +327,7 @@ public void testAutoCreateOnDurableSubscribeToTopic() throws Exception { connection.close(); - assertNotNull(server.getManagementService().getResource(ResourceNames.ADDRESS + "test")); + assertNotNull(server.getManagementService().getAddressControl("test")); assertNotNull(server.locateQueue(SimpleString.of("myClientID.myDurableSub"))); } diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteJmsDestinationTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteJmsDestinationTest.java index dc2f5ff4191..ef20f3566eb 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteJmsDestinationTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteJmsDestinationTest.java @@ -37,6 +37,7 @@ import org.apache.activemq.artemis.core.settings.impl.AddressSettings; import org.apache.activemq.artemis.tests.util.JMSTestBase; import org.apache.activemq.artemis.tests.util.Wait; +import org.apache.activemq.artemis.utils.DestinationUtil; import org.junit.jupiter.api.Test; public class AutoDeleteJmsDestinationTest extends JMSTestBase { @@ -49,11 +50,12 @@ protected void extraServerConfig(ActiveMQServer server) { @Test public void testAutoDeleteQueue() throws Exception { + final String queueName = "test"; Connection connection = cf.createConnection(); try { Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - javax.jms.Queue queue = ActiveMQJMSClient.createQueue("test"); + javax.jms.Queue queue = ActiveMQJMSClient.createQueue(queueName); MessageProducer producer = session.createProducer(queue); @@ -75,14 +77,14 @@ public void testAutoDeleteQueue() throws Exception { } Wait.waitFor(() -> { - Binding binding = server.getPostOffice().getBinding(SimpleString.of("test")); + Binding binding = server.getPostOffice().getBinding(SimpleString.of(queueName)); if (binding == null) { return false; } return binding.getBindable() != null; }); // ensure the queue is still there - Queue q = (Queue) server.getPostOffice().getBinding(SimpleString.of("test")).getBindable(); + Queue q = (Queue) server.getPostOffice().getBinding(SimpleString.of(queueName)).getBindable(); Wait.assertEquals(1, q::getMessageCount); assertEquals(numMessages, q.getMessagesAdded()); @@ -94,14 +96,12 @@ public void testAutoDeleteQueue() throws Exception { connection.close(); - SimpleString qname = SimpleString.of("test"); - Wait.waitFor(() -> server.getPostOffice().getBinding(qname) == null); - + SimpleString queueNameSimple = SimpleString.of(queueName); // ensure the queue was removed - assertNull(server.getPostOffice().getBinding(SimpleString.of("test"))); + Wait.waitFor(() -> server.getPostOffice().getBinding(queueNameSimple) == null); // make sure the JMX control was removed for the JMS queue - assertNull(server.getManagementService().getResource("test")); + assertNull(server.getManagementService().getQueueControl(queueName)); messageConsumer2.close(); } finally { @@ -156,10 +156,11 @@ public void testAutoDeleteNegative() throws Exception { @Test public void testAutoDeleteTopic() throws Exception { + final String topicName = "test"; Connection connection = cf.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - javax.jms.Topic topic = ActiveMQJMSClient.createTopic("test"); + javax.jms.Topic topic = ActiveMQJMSClient.createTopic(topicName); MessageConsumer messageConsumer = session.createConsumer(topic); MessageProducer producer = session.createProducer(topic); @@ -181,13 +182,12 @@ public void testAutoDeleteTopic() throws Exception { connection.close(); - SimpleString qName = SimpleString.of("test"); - Wait.waitFor(() -> server.locateQueue(qName) == null); + SimpleString topicNameSimple = SimpleString.of(topicName); // ensure the topic was removed - assertNull(server.locateQueue(qName)); + Wait.waitFor(() -> server.getAddressInfo(topicNameSimple) == null); // make sure the JMX control was removed for the JMS topic - assertNull(server.getManagementService().getResource("jtest")); + assertNull(server.getManagementService().getAddressControl(topicName)); } @Test @@ -225,13 +225,17 @@ public void testAutoDeleteTopicNegative() throws Exception { @Test public void testAutoDeleteTopicDurableSubscriber() throws Exception { + final String topicName = "test"; + final String subscriptionName = "mySub"; + final String clientID = "myClientID"; + Connection connection = cf.createConnection(); - connection.setClientID("myClientID"); + connection.setClientID(clientID); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - javax.jms.Topic topic = ActiveMQJMSClient.createTopic("test"); + javax.jms.Topic topic = ActiveMQJMSClient.createTopic(topicName); - MessageConsumer messageConsumer = session.createDurableConsumer(topic, "mySub"); + MessageConsumer messageConsumer = session.createDurableConsumer(topic, subscriptionName); MessageProducer producer = session.createProducer(topic); final int numMessages = 100; @@ -250,14 +254,14 @@ public void testAutoDeleteTopicDurableSubscriber() throws Exception { } messageConsumer.close(); - session.unsubscribe("mySub"); + session.unsubscribe(subscriptionName); connection.close(); // ensure the topic was removed - assertNull(server.locateQueue(SimpleString.of("test"))); + assertNull(server.locateQueue(DestinationUtil.createQueueNameForSubscription(true, clientID, subscriptionName))); // make sure the JMX control was removed for the JMS topic - assertNull(server.getManagementService().getResource("test")); + assertNull(server.getManagementService().getAddressControl(topicName)); } } diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/JMSMessageCounterTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/JMSMessageCounterTest.java index 8311108bb54..f657a1a9b82 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/JMSMessageCounterTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/JMSMessageCounterTest.java @@ -16,24 +16,22 @@ */ package org.apache.activemq.artemis.tests.integration.client; -import static org.junit.jupiter.api.Assertions.assertNotNull; - import javax.jms.Connection; import javax.jms.DeliveryMode; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; - import java.lang.invoke.MethodHandles; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.tests.util.JMSTestBase; import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.assertNotNull; + public class JMSMessageCounterTest extends JMSTestBase { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); @@ -62,7 +60,7 @@ public void testMessageCounter() throws Exception { conn.close(); - QueueControl control = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + queue.getQueueName()); + QueueControl control = server.getManagementService().getQueueControl(queue.getQueueName()); assertNotNull(control); logger.debug(control.listMessageCounterAsHTML()); @@ -71,7 +69,7 @@ public void testMessageCounter() throws Exception { restartServer(); - control = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + queue.getQueueName()); + control = server.getManagementService().getQueueControl(queue.getQueueName()); assertNotNull(control); logger.debug(control.listMessageCounterAsHTML()); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/LargeMessageCompressTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/LargeMessageCompressTest.java index 8f2a57571b0..106053be3a4 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/LargeMessageCompressTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/LargeMessageCompressTest.java @@ -16,13 +16,14 @@ */ package org.apache.activemq.artemis.tests.integration.client; -import static org.junit.jupiter.api.Assertions.assertArrayEquals; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assumptions.assumeTrue; - +import javax.jms.BytesMessage; +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.Destination; +import javax.jms.MessageConsumer; +import javax.jms.MessageProducer; +import javax.jms.Session; +import javax.management.openmbean.CompositeData; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -49,9 +50,7 @@ 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.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.config.StoreConfiguration; -import org.apache.activemq.artemis.core.management.impl.QueueControlImpl; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; import org.apache.activemq.artemis.tests.extensions.parameterized.ParameterizedTestExtension; @@ -60,14 +59,12 @@ import org.junit.jupiter.api.TestTemplate; import org.junit.jupiter.api.extension.ExtendWith; -import javax.jms.BytesMessage; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Session; -import javax.management.openmbean.CompositeData; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; //Parameters set in superclass @ExtendWith(ParameterizedTestExtension.class) @@ -119,7 +116,7 @@ public void testLargeMessageCompressionNotCompressedAndBrowsed() throws Exceptio session.close(); - QueueControlImpl queueControl = (QueueControlImpl) server.getManagementService().getResource("queue.SimpleAddress"); + QueueControl queueControl = server.getManagementService().getQueueControl(ADDRESS.toString()); CompositeData[] browse = queueControl.browse(); @@ -673,12 +670,9 @@ public void testLargeMessageCompressionLevel() throws Exception { producer2.send(message2); producer3.send(message3); - QueueControl queueControl1 = (QueueControl)server.getManagementService(). - getResource(ResourceNames.QUEUE + address1); - QueueControl queueControl2 = (QueueControl)server.getManagementService(). - getResource(ResourceNames.QUEUE + address2); - QueueControl queueControl3 = (QueueControl)server.getManagementService(). - getResource(ResourceNames.QUEUE + address3); + QueueControl queueControl1 = server.getManagementService().getQueueControl(address1.toString()); + QueueControl queueControl2 = server.getManagementService().getQueueControl(address2.toString()); + QueueControl queueControl3 = server.getManagementService().getQueueControl(address3.toString()); assertEquals(1, queueControl1.getMessageCount()); assertEquals(1, queueControl2.getMessageCount()); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/MultipleProducersTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/MultipleProducersTest.java index fe762e82416..a7f7d71a4b2 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/MultipleProducersTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/MultipleProducersTest.java @@ -16,9 +16,6 @@ */ package org.apache.activemq.artemis.tests.integration.client; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.fail; - import javax.jms.Connection; import javax.jms.DeliveryMode; import javax.jms.Message; @@ -28,7 +25,6 @@ import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.settings.HierarchicalRepository; import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy; import org.apache.activemq.artemis.core.settings.impl.AddressSettings; @@ -38,6 +34,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; + public class MultipleProducersTest extends JMSTestBase { public Connection conn; @@ -129,7 +128,7 @@ public void wrongQueue() throws Exception { // after draining queueOne send 5 message to queueOne queueTwoMsgCount = server.locateQueue(queueTwoName).getMessageCount(); - control = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + queueOne.getQueueName()); + control = server.getManagementService().getQueueControl(queueOne.getQueueName()); control.removeMessages(null); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/bridge/BridgeReconnectTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/bridge/BridgeReconnectTest.java index b8e9ccc230c..b3859460bbd 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/bridge/BridgeReconnectTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/bridge/BridgeReconnectTest.java @@ -45,7 +45,6 @@ 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.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.config.BridgeConfiguration; import org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds; import org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnector; @@ -410,7 +409,7 @@ public void testReconnectSameNode() throws Exception { forwardingConnection.fail(new ActiveMQNotConnectedException()); final ManagementService managementService = server0.getManagementService(); - QueueControl coreQueueControl = (QueueControl) managementService.getResource(ResourceNames.QUEUE + queueName); + QueueControl coreQueueControl = managementService.getQueueControl(queueName); assertEquals(0, coreQueueControl.getDeliveringCount()); final int numMessages = NUM_MESSAGES; @@ -477,7 +476,7 @@ public void testReconnectSameNodeAfterDeliveryWithBlocking() throws Exception { session1.start(); final ManagementService managementService = server0.getManagementService(); - QueueControl coreQueueControl = (QueueControl) managementService.getResource(ResourceNames.QUEUE + queueName); + QueueControl coreQueueControl = managementService.getQueueControl(queueName); assertEquals(0, coreQueueControl.getDeliveringCount()); final int numMessages = NUM_MESSAGES; 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 181e6809db7..388e2278baf 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.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 void testManagementLeak() throws Exception { .setStaticConnectors(connectors) .setConcurrency(concurrency); server.deployBridge(config); - assertEquals(concurrency, server.getManagementService().getResources(BridgeControl.class).length); + assertEquals(concurrency, server.getManagementService().getBridgeControlCount()); server.destroyBridge(config.getName()); - assertEquals(0, server.getManagementService().getResources(BridgeControl.class).length); + assertEquals(0, server.getManagementService().getBridgeControlCount()); } @TestTemplate diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/bridge/ClusteredBridgeReconnectTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/bridge/ClusteredBridgeReconnectTest.java index 2807071454e..f181d8bcc31 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/bridge/ClusteredBridgeReconnectTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/bridge/ClusteredBridgeReconnectTest.java @@ -33,7 +33,6 @@ import org.apache.activemq.artemis.api.core.client.ClientSession; import org.apache.activemq.artemis.api.core.client.TopologyMember; import org.apache.activemq.artemis.api.core.management.AddressControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.client.impl.TopologyMemberImpl; import org.apache.activemq.artemis.core.postoffice.Binding; import org.apache.activemq.artemis.core.postoffice.Bindings; @@ -372,9 +371,7 @@ public void testPauseAddressBlockingSnFQueue() throws Exception { assertNull(consumer1.receiveImmediate()); //pause address from node0 - String addressControlResourceName = ResourceNames.ADDRESS + "queues.testaddress"; - Object resource = servers[0].getManagementService().getResource(addressControlResourceName); - AddressControl addressControl0 = (AddressControl) resource; + AddressControl addressControl0 = servers[0].getManagementService().getAddressControl("queues.testaddress"); addressControl0.pause(); Bindings bindings0 = servers[0].getPostOffice().getBindingsForAddress(SimpleString.of("queues.testaddress")); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/distribution/ClusteredMessageCounterTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/distribution/ClusteredMessageCounterTest.java index 2c583b4f66a..a719559ea29 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/distribution/ClusteredMessageCounterTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/distribution/ClusteredMessageCounterTest.java @@ -16,8 +16,15 @@ */ package org.apache.activemq.artemis.tests.integration.cluster.distribution; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; import org.apache.activemq.artemis.api.core.ActiveMQException; import org.apache.activemq.artemis.api.core.client.ClientConsumer; @@ -27,7 +34,6 @@ import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl; import org.apache.activemq.artemis.api.core.management.MessageCounterInfo; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl; import org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType; import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy; @@ -36,15 +42,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; public class ClusteredMessageCounterTest extends ClusterTestBase { private AtomicInteger total = new AtomicInteger(); @@ -136,7 +135,7 @@ private void testMessageAddedWithPaging(boolean durable) throws Exception { verifyReceiveAllOnSingleConsumer(true, 0, numMsg, 1); - QueueControl control = (QueueControl) servers[1].getManagementService().getResource(ResourceNames.QUEUE + "queue0"); + QueueControl control = servers[1].getManagementService().getQueueControl("queue0"); //wait up to 30sec to allow the counter get updated long timeout = 30000; @@ -172,8 +171,8 @@ public void testMessageCounterWithPaging() throws Exception { } }); - QueueControl control = (QueueControl) servers[1].getManagementService().getResource(ResourceNames.QUEUE + "queue0"); - ActiveMQServerControl serverControl = (ActiveMQServerControl) servers[1].getManagementService().getResource(ResourceNames.BROKER); + QueueControl control = servers[1].getManagementService().getQueueControl("queue0"); + ActiveMQServerControl serverControl = (ActiveMQServerControl) servers[1].getManagementService().getServerControl(); serverControl.setMessageCounterSamplePeriod(300); CountDownLatch resultLatch = new CountDownLatch(40); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/BackupSyncJournalTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/BackupSyncJournalTest.java index 61fe649b92f..6184ebc5132 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/BackupSyncJournalTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/BackupSyncJournalTest.java @@ -32,8 +32,6 @@ import org.apache.activemq.artemis.api.core.client.ClientSession; import org.apache.activemq.artemis.api.core.client.FailoverEventListener; import org.apache.activemq.artemis.api.core.client.FailoverEventType; -import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryInternal; import org.apache.activemq.artemis.core.client.impl.ServerLocatorInternal; import org.apache.activemq.artemis.core.config.Configuration; @@ -311,7 +309,7 @@ public void testRemoveAllMessageWithPurgeOnNoConsumers() throws Exception { final boolean purgeOnNoConsumers = true; createProducerSendSomeMessages(); primaryServer.getServer().locateQueue(ADDRESS).setPurgeOnNoConsumers(purgeOnNoConsumers); - assertEquals(n_msgs, ((QueueControl) primaryServer.getServer().getManagementService().getResource(ResourceNames.QUEUE + ADDRESS.toString())).removeAllMessages()); + assertEquals(n_msgs, primaryServer.getServer().getManagementService().getQueueControl(ADDRESS.toString()).removeAllMessages()); startBackupCrashPrimary(); assertNoMoreMessages(); } diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ClientConnectorFailoverTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ClientConnectorFailoverTest.java index 1bc0aecbc34..26ca99c66cd 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ClientConnectorFailoverTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/failover/ClientConnectorFailoverTest.java @@ -16,12 +16,6 @@ */ package org.apache.activemq.artemis.tests.integration.cluster.failover; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.MessageConsumer; @@ -40,7 +34,6 @@ 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.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl; import org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl; import org.apache.activemq.artemis.core.settings.impl.AddressSettings; @@ -50,6 +43,12 @@ import org.apache.activemq.artemis.tests.util.Wait; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + public class ClientConnectorFailoverTest extends StaticClusterWithBackupFailoverTest { private static final String TEST_PARAM = "TEST"; @@ -117,8 +116,8 @@ public void testConsumerAfterFailover() throws Exception { assertNotNull(clientConsumer.receive(3000)); } - QueueControl testQueueControlAfterCrash = (QueueControl)getServer(serverIdAfterCrash). - getManagementService().getResource(ResourceNames.QUEUE + QUEUE_NAME); + QueueControl testQueueControlAfterCrash = getServer(serverIdAfterCrash). + getManagementService().getQueueControl(QUEUE_NAME); Wait.waitFor(() -> testQueueControlAfterCrash.getMessageCount() == 0, 3000); clientSession.stop(); @@ -173,8 +172,8 @@ public void testConsumerAfterFailoverWithRedistribution() throws Exception { int serverIdBeforeCrash = Integer.parseInt(sessionFactory. getConnectorConfiguration().getName().substring(4)); - QueueControl testQueueControlBeforeCrash = (QueueControl)getServer(serverIdBeforeCrash). - getManagementService().getResource(ResourceNames.QUEUE + QUEUE_NAME); + QueueControl testQueueControlBeforeCrash = getServer(serverIdBeforeCrash). + getManagementService().getQueueControl(QUEUE_NAME); assertEquals(0, testQueueControlBeforeCrash.getMessageCount()); @@ -203,8 +202,8 @@ public void testConsumerAfterFailoverWithRedistribution() throws Exception { assertTrue(isPrimaryServerID(serverIdAfterCrash)); - QueueControl testQueueControlAfterCrash = (QueueControl)getServer(serverIdAfterCrash). - getManagementService().getResource(ResourceNames.QUEUE + QUEUE_NAME); + QueueControl testQueueControlAfterCrash = getServer(serverIdAfterCrash). + getManagementService().getQueueControl(QUEUE_NAME); Wait.waitFor(() -> testQueueControlAfterCrash.getMessageCount() == 1, 3000); @@ -256,12 +255,12 @@ public void testAutoCreatedQueueAfterFailoverWithoutHA() throws Exception { createQueue(serverIdBeforeCrash, QUEUES_TESTADDRESS, QUEUE_NAME, null, false); - QueueControl testQueueControlBeforeCrash = (QueueControl) getServer(serverIdBeforeCrash).getManagementService().getResource(ResourceNames.QUEUE + QUEUE_NAME); + QueueControl testQueueControlBeforeCrash = getServer(serverIdBeforeCrash).getManagementService().getQueueControl(QUEUE_NAME); assertEquals(0, testQueueControlBeforeCrash.getMessageCount()); for (int i : getPrimaryServerIDs()) { if (i != serverIdBeforeCrash) { - assertNull(getServer(i).getManagementService().getResource(ResourceNames.QUEUE + QUEUE_NAME)); + assertNull(getServer(i).getManagementService().getQueueControl(QUEUE_NAME)); } } @@ -289,7 +288,7 @@ public void testAutoCreatedQueueAfterFailoverWithoutHA() throws Exception { } assertTrue(serverIdAfterCrashFound); - QueueControl testQueueControlAfterCrash = (QueueControl) getServer(serverIdAfterCrash).getManagementService().getResource(ResourceNames.QUEUE + QUEUE_NAME); + QueueControl testQueueControlAfterCrash = getServer(serverIdAfterCrash).getManagementService().getQueueControl(QUEUE_NAME); assertNotNull(testQueueControlAfterCrash); assertEquals(0, testQueueControlAfterCrash.getMessageCount()); @@ -372,8 +371,8 @@ public void testJMSConsumerAfterFailover() throws Exception { assertNotNull(messageConsumer.receive(3000)); } - QueueControl testQueueControlAfterCrash = (QueueControl)getServer(serverIdAfterCrash). - getManagementService().getResource(ResourceNames.QUEUE + QUEUE_NAME); + QueueControl testQueueControlAfterCrash = getServer(serverIdAfterCrash). + getManagementService().getQueueControl(QUEUE_NAME); Wait.waitFor(() -> testQueueControlAfterCrash.getMessageCount() == 0, 3000); } connection.stop(); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/consumer/DetectOrphanedConsumerTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/consumer/DetectOrphanedConsumerTest.java index a5aa2ea1d61..61bd28fde4c 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/consumer/DetectOrphanedConsumerTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/consumer/DetectOrphanedConsumerTest.java @@ -17,15 +17,10 @@ package org.apache.activemq.artemis.tests.integration.consumer; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.MessageConsumer; import javax.jms.Session; - import java.lang.invoke.MethodHandles; import org.apache.activemq.artemis.api.core.JsonUtil; @@ -33,7 +28,6 @@ import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.management.impl.view.ConsumerField; import org.apache.activemq.artemis.core.management.impl.view.ConsumerView; import org.apache.activemq.artemis.core.server.ActiveMQServer; @@ -47,6 +41,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + /** * This test is simulating an orphaned consumer situation that was fixed in ARTEMIS-4476. the method * QueueControl::listConsumersAsJSON should add a field orphaned=true in case the consumer is orphaned. @@ -92,7 +90,7 @@ private void testOrphanedConsumer(String protocol) throws Exception { Wait.assertEquals(1, queue::getConsumerCount, 5000); - QueueControl queueControl = (QueueControl) server.getManagementService().getResource("queue." + queue.getName().toString()); + QueueControl queueControl = server.getManagementService().getQueueControl(queue.getName().toString()); assertNotNull(queueControl); String result = queueControl.listConsumersAsJSON(); @@ -116,7 +114,7 @@ private void testOrphanedConsumer(String protocol) throws Exception { assertEquals(1, resultArray.size()); assertEquals(ConsumerView.CONSUMER_STATUS_ORPHANED, resultArray.getJsonObject(0).getString(ConsumerField.STATUS.getName())); - ActiveMQServerControl serverControl = (ActiveMQServerControl) server.getManagementService().getResource(ResourceNames.BROKER); + ActiveMQServerControl serverControl = (ActiveMQServerControl) server.getManagementService().getServerControl(); String sessionID = resultArray.getJsonObject(0).getString(ConsumerField.SESSION.getAlternativeName()); int consumerID = resultArray.getJsonObject(0).getInt(ConsumerField.SEQUENTIAL_ID.getAlternativeName()); logger.debug("SessionID{} ConsumerID::{}", sessionID, consumerID); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java index f0b7661e7d6..0d88ec12e4c 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/RedeployTest.java @@ -16,15 +16,18 @@ */ package org.apache.activemq.artemis.tests.integration.jms; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.JMSContext; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageConsumer; +import javax.jms.MessageProducer; +import javax.jms.Queue; +import javax.jms.Session; +import javax.jms.TextMessage; +import javax.management.MBeanServer; +import javax.management.MBeanServerFactory; import java.io.File; import java.io.InputStream; import java.io.Writer; @@ -41,19 +44,6 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSContext; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.Session; -import javax.jms.TextMessage; -import javax.management.MBeanServer; -import javax.management.MBeanServerFactory; - import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration; import org.apache.activemq.artemis.api.core.QueueConfiguration; import org.apache.activemq.artemis.api.core.RoutingType; @@ -62,7 +52,6 @@ import org.apache.activemq.artemis.api.core.client.ActiveMQClient; import org.apache.activemq.artemis.api.core.client.ServerLocator; import org.apache.activemq.artemis.api.core.management.AcceptorControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.config.Configuration; import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl; import org.apache.activemq.artemis.core.postoffice.Binding; @@ -88,6 +77,15 @@ import org.apache.activemq.artemis.utils.ReusableLatch; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + public class RedeployTest extends ActiveMQTestBase { /* @@ -1499,7 +1497,7 @@ public void testRedeployNewAcceptorsAndRemoveOldAcceptor() throws Exception { assertEquals("127.0.0.1", acceptor0.getParams().get(TransportConstants.HOST_PROP_NAME)); assertEquals("61616", acceptor0.getParams().get(TransportConstants.PORT_PROP_NAME)); - final AcceptorControl acceptorControl = (AcceptorControl) managementService.getResource(ResourceNames.ACCEPTOR + "artemis"); + final AcceptorControl acceptorControl = managementService.getAcceptorControl("artemis"); assertNotNull(acceptorControl); assertTrue(acceptorControl.isStarted()); @@ -1523,7 +1521,7 @@ public void testRedeployNewAcceptorsAndRemoveOldAcceptor() throws Exception { latch.await(10, TimeUnit.SECONDS); // Should not be present in the server any longer - final AcceptorControl afterReload = (AcceptorControl) managementService.getResource(ResourceNames.ACCEPTOR + "artemis"); + final AcceptorControl afterReload = managementService.getAcceptorControl("artemis"); assertNull(afterReload); final TransportConfiguration acceptor1 = findInConfiguration("artemis1", embeddedActiveMQ.getActiveMQServer().getConfiguration()); @@ -1533,7 +1531,7 @@ public void testRedeployNewAcceptorsAndRemoveOldAcceptor() throws Exception { assertEquals("127.0.0.2", acceptor1.getParams().get(TransportConstants.HOST_PROP_NAME)); assertEquals("61617", acceptor1.getParams().get(TransportConstants.PORT_PROP_NAME)); - final AcceptorControl acceptorControl1 = (AcceptorControl) managementService.getResource(ResourceNames.ACCEPTOR + "artemis1"); + final AcceptorControl acceptorControl1 = managementService.getAcceptorControl("artemis1"); assertNotNull(acceptorControl1); assertTrue(acceptorControl1.isStarted()); @@ -1542,7 +1540,7 @@ public void testRedeployNewAcceptorsAndRemoveOldAcceptor() throws Exception { assertEquals("127.0.0.3", acceptor2.getParams().get(TransportConstants.HOST_PROP_NAME)); assertEquals("61618", acceptor2.getParams().get(TransportConstants.PORT_PROP_NAME)); - final AcceptorControl acceptorControl2 = (AcceptorControl) managementService.getResource(ResourceNames.ACCEPTOR + "artemis2"); + final AcceptorControl acceptorControl2 = managementService.getAcceptorControl("artemis2"); assertNotNull(acceptorControl2); assertFalse(acceptorControl2.isStarted()); @@ -1591,7 +1589,7 @@ public void testRedeploySameAcceptorChangedToNotAutoStart() throws Exception { assertEquals("61616", acceptor.getParams().get(TransportConstants.PORT_PROP_NAME)); assertNull(acceptor.getParams().get(TransportConstants.AUTO_START)); - final AcceptorControl acceptorControl = (AcceptorControl) managementService.getResource(ResourceNames.ACCEPTOR + "artemis"); + final AcceptorControl acceptorControl = (AcceptorControl) managementService.getAcceptorControl("artemis"); assertNotNull(acceptorControl); assertTrue(acceptorControl.isStarted()); @@ -1621,7 +1619,7 @@ public void testRedeploySameAcceptorChangedToNotAutoStart() throws Exception { assertEquals("61616", acceptorUpdated.getParams().get(TransportConstants.PORT_PROP_NAME)); assertEquals("false", acceptorUpdated.getParams().get(TransportConstants.AUTO_START)); - final AcceptorControl acceptorControl2 = (AcceptorControl) managementService.getResource(ResourceNames.ACCEPTOR + "artemis"); + final AcceptorControl acceptorControl2 = managementService.getAcceptorControl("artemis"); assertNotNull(acceptorControl2); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/multiprotocol/JMSMessageConsumerTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/multiprotocol/JMSMessageConsumerTest.java index 814fce61ccc..7db9d71ad44 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/multiprotocol/JMSMessageConsumerTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/multiprotocol/JMSMessageConsumerTest.java @@ -31,8 +31,6 @@ import org.apache.activemq.artemis.api.core.QueueConfiguration; import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.SimpleString; -import org.apache.activemq.artemis.api.core.management.AddressControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.paging.PagingStore; import org.apache.activemq.artemis.core.postoffice.impl.PostOfficeImpl; import org.apache.activemq.artemis.core.postoffice.impl.PostOfficeTestAccessor; @@ -511,7 +509,7 @@ public void testConvertedAndPaging() throws Exception { assertEquals(0, server.locateQueue(getQueueName()).getMessageCount()); Wait.assertEquals(0, store::getAddressSize, 5000); - assertEquals(0, ((AddressControl) server.getManagementService().getResource(ResourceNames.ADDRESS + getQueueName())).getAddressSize()); + assertEquals(0, (server.getManagementService().getAddressControl(getQueueName())).getAddressSize()); } } diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/multiprotocol/JMSNonDestructiveTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/multiprotocol/JMSNonDestructiveTest.java index 13e1070db29..82cbef48fd7 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/multiprotocol/JMSNonDestructiveTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/multiprotocol/JMSNonDestructiveTest.java @@ -16,12 +16,6 @@ */ package org.apache.activemq.artemis.tests.integration.jms.multiprotocol; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.fail; - import javax.jms.BytesMessage; import javax.jms.Connection; import javax.jms.JMSException; @@ -30,6 +24,7 @@ import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; +import java.lang.invoke.MethodHandles; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -47,7 +42,6 @@ import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.postoffice.QueueBinding; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.impl.AddressInfo; @@ -60,7 +54,12 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.lang.invoke.MethodHandles; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.fail; @ExtendWith(ParameterizedTestExtension.class) public class JMSNonDestructiveTest extends MultiprotocolJMSClientTestSupport { @@ -176,7 +175,7 @@ public void testNonDestructiveSingle(ConnectionSupplier producerConnectionSuppli receive(consumerConnectionSupplier, NON_DESTRUCTIVE_QUEUE_NAME); assertEquals(1, queueBinding.getQueue().getMessageCount(), "Ensure Message count"); - QueueControl control = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + NON_DESTRUCTIVE_QUEUE_NAME); + QueueControl control = server.getManagementService().getQueueControl(NON_DESTRUCTIVE_QUEUE_NAME); control.removeAllMessages(); assertEquals(0, queueBinding.getQueue().getMessageCount(), "Message count after clearing queue via queue control should be 0"); @@ -197,7 +196,7 @@ public void testNonDestructiveDualConsumer(ConnectionSupplier producerConnection receiveDualConsumer(consumerConnectionSupplier, NON_DESTRUCTIVE_QUEUE_NAME); assertEquals(1, queueBinding.getQueue().getMessageCount(), "Ensure Message count"); - QueueControl control = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + NON_DESTRUCTIVE_QUEUE_NAME); + QueueControl control = server.getManagementService().getQueueControl(NON_DESTRUCTIVE_QUEUE_NAME); control.removeAllMessages(); assertEquals(0, queueBinding.getQueue().getMessageCount(), "Message count after clearing queue via queue control should be 0"); @@ -222,7 +221,7 @@ public void testNonDestructiveExpiry(ConnectionSupplier producerConnectionSuppli receiveNull(consumerConnectionSupplier, NON_DESTRUCTIVE_EXPIRY_QUEUE_NAME); assertEquals(0, queueBinding.getQueue().getMessageCount(), "Ensure Message count"); - QueueControl control = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + NON_DESTRUCTIVE_EXPIRY_QUEUE_NAME); + QueueControl control = server.getManagementService().getQueueControl(NON_DESTRUCTIVE_EXPIRY_QUEUE_NAME); control.removeAllMessages(); assertEquals(0, queueBinding.getQueue().getMessageCount(), "Message count after clearing queue via queue control should be 0"); @@ -243,7 +242,7 @@ public void testNonDestructiveMulitpleMessages(ConnectionSupplier producerConnec //Consume Again as should be non-destructive receive(consumerConnectionSupplier, NON_DESTRUCTIVE_QUEUE_NAME, 3); - QueueControl control = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + NON_DESTRUCTIVE_QUEUE_NAME); + QueueControl control = server.getManagementService().getQueueControl(NON_DESTRUCTIVE_QUEUE_NAME); control.removeAllMessages(); assertEquals(0, queueBinding.getQueue().getMessageCount(), "Message count after clearing queue via queue control should be 0"); @@ -264,7 +263,7 @@ public void testNonDestructiveMulitpleMessagesDualConsumer(ConnectionSupplier pr //Consume Again as should be non-destructive receiveDualConsumer(consumerConnectionSupplier, NON_DESTRUCTIVE_QUEUE_NAME, 3); - QueueControl control = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + NON_DESTRUCTIVE_QUEUE_NAME); + QueueControl control = server.getManagementService().getQueueControl(NON_DESTRUCTIVE_QUEUE_NAME); control.removeAllMessages(); assertEquals(0, queueBinding.getQueue().getMessageCount(), "Message count after clearing queue via queue control should be 0"); @@ -300,7 +299,7 @@ public void testNonDestructiveLVQ(ConnectionSupplier producerConnectionSupplier, assertEquals(1, queueBinding.getQueue().getMessageCount(), "Ensure Message count"); - QueueControl control = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + NON_DESTRUCTIVE_LVQ_QUEUE_NAME); + QueueControl control = server.getManagementService().getQueueControl(NON_DESTRUCTIVE_LVQ_QUEUE_NAME); control.removeAllMessages(); assertEquals(0, queueBinding.getQueue().getMessageCount(), "Message count after clearing queue via queue control should be 0"); @@ -423,7 +422,7 @@ public void testMessageCount() throws Exception { receive(CoreConnection, NON_DESTRUCTIVE_QUEUE_NAME); assertEquals(2, queueBinding.getQueue().getMessageCount(), "Ensure Message count"); - QueueControl control = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + NON_DESTRUCTIVE_QUEUE_NAME); + QueueControl control = server.getManagementService().getQueueControl(NON_DESTRUCTIVE_QUEUE_NAME); control.removeAllMessages(); assertEquals(0, queueBinding.getQueue().getMessageCount(), "Message count after clearing queue via queue control should be 0"); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java index 6abdf316312..5bc25a7fa0e 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java @@ -3696,8 +3696,17 @@ public void testListAllSessionsAsJSONWithJMS() throws Exception { assertNotNull(obj.getJsonObject("metadata").getJsonString(ClientSession.JMS_SESSION_IDENTIFIER_PROPERTY)); } + @TestTemplate + public void testListQueuesLegacyFilter() throws Exception { + testListQueues(true); + } + @TestTemplate public void testListQueues() throws Exception { + testListQueues(false); + } + + public void testListQueues(boolean legacyFilter) throws Exception { SimpleString queueName1 = SimpleString.of("my_queue_one"); SimpleString queueName2 = SimpleString.of("my_queue_two"); SimpleString queueName3 = SimpleString.of("other_queue_three"); @@ -3726,7 +3735,7 @@ public void testListQueues() throws Exception { } //test with filter that matches 2 queues - String filterString = createJsonFilter("name", "CONTAINS", "my_queue"); + String filterString = createJsonFilter("name", "CONTAINS", "my_queue", legacyFilter); String queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); @@ -3738,7 +3747,7 @@ public void testListQueues() throws Exception { assertTrue(array.getJsonObject(1).getString("name").contains("my_queue")); //test with an empty filter - filterString = createJsonFilter("internalQueue", "NOT_CONTAINS", "true"); + filterString = createJsonFilter("internalQueue", "NOT_CONTAINS", "true", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); @@ -3783,8 +3792,16 @@ public void testListQueues() throws Exception { assertEquals("false", array.getJsonObject(0).getString("autoDelete"), "autoDelete"); } + @TestTemplate + public void testListQueuesOrderLegacyFilter() throws Exception { + testListQueuesOrder(true); + } + @TestTemplate public void testListQueuesOrder() throws Exception { + testListQueuesOrder(true); + } + public void testListQueuesOrder(boolean legacyFilter) throws Exception { SimpleString queueName1 = SimpleString.of("my_queue_1"); SimpleString queueName2 = SimpleString.of("my_queue_2"); SimpleString queueName3 = SimpleString.of("my_queue_3"); @@ -3816,7 +3833,7 @@ public void testListQueuesOrder() throws Exception { } //test default order - String filterString = createJsonFilter("name", "CONTAINS", "my_queue"); + String filterString = createJsonFilter("name", "CONTAINS", "my_queue", legacyFilter); String queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); JsonObject queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); JsonArray array = (JsonArray) queuesAsJsonObject.get("data"); @@ -3827,7 +3844,7 @@ public void testListQueuesOrder() throws Exception { assertEquals(queueName3.toString(), array.getJsonObject(2).getString("name"), "queue3 default Order"); //test ordered by id desc - filterString = createJsonFilter("name", "CONTAINS", "my_queue", "id", "desc"); + filterString = createJsonFilter("name", "CONTAINS", "my_queue", "id", "desc", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); array = (JsonArray) queuesAsJsonObject.get("data"); @@ -3838,7 +3855,7 @@ public void testListQueuesOrder() throws Exception { assertEquals(queueName1.toString(), array.getJsonObject(2).getString("name"), "queue1 ordered by id"); //ordered by address desc - filterString = createJsonFilter("name", "CONTAINS", "my_queue", "address", "desc"); + filterString = createJsonFilter("name", "CONTAINS", "my_queue", "address", "desc", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); array = (JsonArray) queuesAsJsonObject.get("data"); @@ -3849,7 +3866,7 @@ public void testListQueuesOrder() throws Exception { assertEquals(queueName1.toString(), array.getJsonObject(2).getString("name"), "queue1 ordered by address"); //ordered by auto create desc - filterString = createJsonFilter("name", "CONTAINS", "my_queue", "autoCreated", "asc"); + filterString = createJsonFilter("name", "CONTAINS", "my_queue", "autoCreated", "asc", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); array = (JsonArray) queuesAsJsonObject.get("data"); @@ -3860,7 +3877,7 @@ public void testListQueuesOrder() throws Exception { assertEquals("true", array.getJsonObject(2).getString("autoCreated"), "pos3 ordered by autocreate"); //ordered by filter desc - filterString = createJsonFilter("name", "CONTAINS", "my_queue", "filter", "desc"); + filterString = createJsonFilter("name", "CONTAINS", "my_queue", "filter", "desc", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); array = (JsonArray) queuesAsJsonObject.get("data"); @@ -3871,7 +3888,7 @@ public void testListQueuesOrder() throws Exception { assertEquals(queueName3.toString(), array.getJsonObject(2).getString("name"), "queue3 ordered by filter"); //ordered by max consumers asc - filterString = createJsonFilter("name", "CONTAINS", "my_queue", "maxConsumers", "asc"); + filterString = createJsonFilter("name", "CONTAINS", "my_queue", "maxConsumers", "asc", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); array = (JsonArray) queuesAsJsonObject.get("data"); @@ -3883,7 +3900,7 @@ public void testListQueuesOrder() throws Exception { //ordering between the pages //page 1 - filterString = createJsonFilter("name", "CONTAINS", "my_queue", "address", "desc"); + filterString = createJsonFilter("name", "CONTAINS", "my_queue", "address", "desc", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 1); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); array = (JsonArray) queuesAsJsonObject.get("data"); @@ -3891,7 +3908,7 @@ public void testListQueuesOrder() throws Exception { assertEquals(queueName3.toString(), array.getJsonObject(0).getString("name"), "queue3 ordered by page"); //page 2 - filterString = createJsonFilter("name", "CONTAINS", "my_queue", "address", "desc"); + filterString = createJsonFilter("name", "CONTAINS", "my_queue", "address", "desc", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 2, 1); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); array = (JsonArray) queuesAsJsonObject.get("data"); @@ -3899,7 +3916,7 @@ public void testListQueuesOrder() throws Exception { assertEquals(queueName2.toString(), array.getJsonObject(0).getString("name"), "queue2 ordered by page"); //page 3 - filterString = createJsonFilter("name", "CONTAINS", "my_queue", "address", "desc"); + filterString = createJsonFilter("name", "CONTAINS", "my_queue", "address", "desc", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 3, 1); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); array = (JsonArray) queuesAsJsonObject.get("data"); @@ -3908,8 +3925,17 @@ public void testListQueuesOrder() throws Exception { } + @TestTemplate + public void testListQueuesNumericFilterLegacyFilter() throws Exception { + testListQueuesNumericFilter(true); + } + @TestTemplate public void testListQueuesNumericFilter() throws Exception { + testListQueuesNumericFilter(false); + } + + public void testListQueuesNumericFilter(boolean legacyFilter) throws Exception { SimpleString queueName1 = SimpleString.of("my_queue_one"); SimpleString queueName2 = SimpleString.of("my_queue_two"); SimpleString queueName3 = SimpleString.of("one_consumer_queue_three"); @@ -3973,7 +3999,7 @@ public void testListQueuesNumericFilter() throws Exception { session.commit(); //test with CONTAINS returns nothing for numeric field - String filterString = createJsonFilter("CONSUMER_COUNT", "CONTAINS", "0"); + String filterString = createJsonFilter("CONSUMER_COUNT", "CONTAINS", "0", legacyFilter); String queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); JsonObject queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -3981,7 +4007,7 @@ public void testListQueuesNumericFilter() throws Exception { assertEquals(0, array.size(), "number of queues returned from query"); //test with LESS_THAN returns 1 queue - filterString = createJsonFilter("CONSUMER_COUNT", "LESS_THAN", "1"); + filterString = createJsonFilter("CONSUMER_COUNT", "LESS_THAN", "1", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -3990,7 +4016,7 @@ public void testListQueuesNumericFilter() throws Exception { assertEquals(queueName4.toString(), array.getJsonObject(1).getString("name"), "correct queue returned from query"); //test with GREATER_THAN returns 2 queue - filterString = createJsonFilter("CONSUMER_COUNT", "GREATER_THAN", "2"); + filterString = createJsonFilter("CONSUMER_COUNT", "GREATER_THAN", "2", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -3999,7 +4025,7 @@ public void testListQueuesNumericFilter() throws Exception { assertEquals(queueName2.toString(), array.getJsonObject(0).getString("name"), "correct queue returned from query"); //test with GREATER_THAN returns 2 queue - filterString = createJsonFilter("CONSUMER_COUNT", "EQUALS", "3"); + filterString = createJsonFilter("CONSUMER_COUNT", "EQUALS", "3", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4008,7 +4034,7 @@ public void testListQueuesNumericFilter() throws Exception { assertEquals(queueName2.toString(), array.getJsonObject(0).getString("name"), "correct queue returned from query"); //test with MESSAGE_COUNT returns 2 queue - filterString = createJsonFilter("MESSAGE_COUNT", "GREATER_THAN", "5"); + filterString = createJsonFilter("MESSAGE_COUNT", "GREATER_THAN", "5", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4017,7 +4043,7 @@ public void testListQueuesNumericFilter() throws Exception { assertEquals(queueName1.toString(), array.getJsonObject(0).getString("name"), "correct queue returned from query"); //test with MESSAGE_ADDED returns 1 queue - filterString = createJsonFilter("MESSAGES_ADDED", "GREATER_THAN", "5"); + filterString = createJsonFilter("MESSAGES_ADDED", "GREATER_THAN", "5", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4026,7 +4052,7 @@ public void testListQueuesNumericFilter() throws Exception { assertEquals(queueName1.toString(), array.getJsonObject(0).getString("name"), "correct queue returned from query"); //test with DELIVERING_COUNT returns 1 queue - filterString = createJsonFilter("DELIVERING_COUNT", "GREATER_THAN", "5"); + filterString = createJsonFilter("DELIVERING_COUNT", "GREATER_THAN", "5", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4035,7 +4061,7 @@ public void testListQueuesNumericFilter() throws Exception { assertEquals(queueName1.toString(), array.getJsonObject(0).getString("name"), "correct queue returned from query"); //test with MESSAGE_ACKED returns 1 queue - filterString = createJsonFilter("MESSAGES_ACKED", "GREATER_THAN", "0"); + filterString = createJsonFilter("MESSAGES_ACKED", "GREATER_THAN", "0", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4044,7 +4070,7 @@ public void testListQueuesNumericFilter() throws Exception { assertEquals(queueName1.toString(), array.getJsonObject(0).getString("name"), "correct queue returned from query"); //test with MAX_CONSUMERS returns 1 queue - filterString = createJsonFilter("MAX_CONSUMERS", "GREATER_THAN", "9"); + filterString = createJsonFilter("MAX_CONSUMERS", "GREATER_THAN", "9", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4053,7 +4079,7 @@ public void testListQueuesNumericFilter() throws Exception { assertEquals(queueName3.toString(), array.getJsonObject(0).getString("name"), "correct queue returned from query"); //test with MESSAGES_KILLED returns 0 queue - filterString = createJsonFilter("MESSAGES_KILLED", "GREATER_THAN", "0"); + filterString = createJsonFilter("MESSAGES_KILLED", "GREATER_THAN", "0", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4064,8 +4090,17 @@ public void testListQueuesNumericFilter() throws Exception { } + @TestTemplate + public void testListQueuesNumericFilterInvalidLegacyFilter() throws Exception { + testListQueuesNumericFilterInvalid(true); + } + @TestTemplate public void testListQueuesNumericFilterInvalid() throws Exception { + testListQueuesNumericFilterInvalid(false); + } + + public void testListQueuesNumericFilterInvalid(boolean legacyFilter) throws Exception { SimpleString queueName1 = SimpleString.of("my_queue_one"); SimpleString queueName2 = SimpleString.of("one_consumer_queue_two"); SimpleString queueName3 = SimpleString.of("one_consumer_queue_three"); @@ -4111,7 +4146,7 @@ public void testListQueuesNumericFilterInvalid() throws Exception { ClientConsumer consumer2_q1 = session.createConsumer(queueName1); //test with CONTAINS returns nothing for numeric field - String filterString = createJsonFilter("CONSUMER_COUNT", "CONTAINS", "NOT_NUMBER"); + String filterString = createJsonFilter("CONSUMER_COUNT", "CONTAINS", "NOT_NUMBER", legacyFilter); String queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); JsonObject queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4119,7 +4154,7 @@ public void testListQueuesNumericFilterInvalid() throws Exception { assertEquals(0, array.size(), "number of queues returned from query"); //test with LESS_THAN and not a number - filterString = createJsonFilter("CONSUMER_COUNT", "LESS_THAN", "NOT_NUMBER"); + filterString = createJsonFilter("CONSUMER_COUNT", "LESS_THAN", "NOT_NUMBER", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4127,7 +4162,7 @@ public void testListQueuesNumericFilterInvalid() throws Exception { assertEquals(0, array.size(), "number of queues returned from LESS_THAN query"); //test with GREATER_THAN and not a number - filterString = createJsonFilter("CONSUMER_COUNT", "GREATER_THAN", "NOT_NUMBER"); + filterString = createJsonFilter("CONSUMER_COUNT", "GREATER_THAN", "NOT_NUMBER", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4135,7 +4170,7 @@ public void testListQueuesNumericFilterInvalid() throws Exception { assertEquals(0, array.size(), "number of queues returned from GREATER_THAN query"); //test with EQUALS and not number - filterString = createJsonFilter("CONSUMER_COUNT", "EQUALS", "NOT_NUMBER"); + filterString = createJsonFilter("CONSUMER_COUNT", "EQUALS", "NOT_NUMBER", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4143,7 +4178,7 @@ public void testListQueuesNumericFilterInvalid() throws Exception { assertEquals(0, array.size(), "number of queues returned from EQUALS query"); //test with LESS_THAN on string value returns no queue - filterString = createJsonFilter("name", "LESS_THAN", "my_queue"); + filterString = createJsonFilter("name", "LESS_THAN", "my_queue", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4151,7 +4186,7 @@ public void testListQueuesNumericFilterInvalid() throws Exception { assertEquals(0, array.size(), "number of queues returned from LESS_THAN on non numeric field"); //test with GREATER_THAN on string value returns no queue - filterString = createJsonFilter("name", "GREATER_THAN", "my_queue"); + filterString = createJsonFilter("name", "GREATER_THAN", "my_queue", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4159,7 +4194,7 @@ public void testListQueuesNumericFilterInvalid() throws Exception { assertEquals(0, array.size(), "number of queues returned from GREATER_THAN on non numeric field"); //test with GREATER_THAN and empty string - filterString = createJsonFilter("CONSUMER_COUNT", "GREATER_THAN", " "); + filterString = createJsonFilter("CONSUMER_COUNT", "GREATER_THAN", " ", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4167,7 +4202,7 @@ public void testListQueuesNumericFilterInvalid() throws Exception { assertEquals(0, array.size(), "number of queues returned from GREATER_THAN query"); //test with CONSUMER_COUNT against a float value - filterString = createJsonFilter("CONSUMER_COUNT", "GREATER_THAN", "0.12"); + filterString = createJsonFilter("CONSUMER_COUNT", "GREATER_THAN", "0.12", legacyFilter); queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); @@ -4178,6 +4213,97 @@ public void testListQueuesNumericFilterInvalid() throws Exception { } + @TestTemplate + public void testListQueuesMultipleFilters() throws Exception { + SimpleString queueName1 = SimpleString.of("my_queue_one"); + SimpleString queueName2 = SimpleString.of("my_queue_two"); + SimpleString queueName3 = SimpleString.of("my_queue_one_two"); + + ActiveMQServerControl serverControl = createManagementControl(); + + server.addAddressInfo(new AddressInfo(queueName1, RoutingType.ANYCAST)); + if (legacyCreateQueue) { + server.createQueue(queueName1, RoutingType.ANYCAST, queueName1, null, false, false); + } else { + server.createQueue(QueueConfiguration.of(queueName1).setRoutingType(RoutingType.ANYCAST).setDurable(false)); + } + + server.addAddressInfo(new AddressInfo(queueName2, RoutingType.ANYCAST)); + if (legacyCreateQueue) { + server.createQueue(queueName2, RoutingType.ANYCAST, queueName2, null, false, false); + } else { + server.createQueue(QueueConfiguration.of(queueName2).setRoutingType(RoutingType.ANYCAST).setDurable(false)); + } + + server.addAddressInfo(new AddressInfo(queueName3, RoutingType.ANYCAST)); + if (legacyCreateQueue) { + server.createQueue(queueName3, RoutingType.ANYCAST, queueName3, null, true, false); + } else { + server.createQueue(QueueConfiguration.of(queueName3).setRoutingType(RoutingType.ANYCAST).setDurable(true)); + } + + //test with filter that matches 2 queues + String filterString = createJsonFilter("name", "CONTAINS", "my_queue"); + + String queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); + + JsonObject queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); + JsonArray array = (JsonArray) queuesAsJsonObject.get("data"); + + assertEquals(3, array.size(), "number of queues returned from query"); + assertTrue(array.getJsonObject(0).getString("name").contains("my_queue")); + assertTrue(array.getJsonObject(1).getString("name").contains("my_queue")); + assertTrue(array.getJsonObject(2).getString("name").contains("my_queue")); + + //test with an 2 filters + filterString = createJsonArrayFilter("name", "CONTAINS", "my_queue", "name", "CONTAINS", "one"); + + queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); + + queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); + array = (JsonArray) queuesAsJsonObject.get("data"); + + // at least 3 queues or more + assertEquals(2, array.size(), "number of queues returned from query"); + assertTrue(array.getJsonObject(0).getString("name").contains("my_queue")); + assertTrue(array.getJsonObject(1).getString("name").contains("my_queue")); + assertTrue(array.getJsonObject(0).getString("name").contains("one")); + assertTrue(array.getJsonObject(1).getString("name").contains("one")); + filterString = createJsonArrayFilter("name", "CONTAINS", "my_queue", "name", "CONTAINS", "one", "durable", "EQUALS", "true"); + + queuesAsJsonString = serverControl.listQueues(filterString, 1, 50); + + queuesAsJsonObject = JsonUtil.readJsonObject(queuesAsJsonString); + array = (JsonArray) queuesAsJsonObject.get("data"); + + assertEquals(1, array.size(), "number of queues returned from query"); + //check all field names are available + assertNotEquals("", array.getJsonObject(0).getString("name"), "name"); + assertNotEquals("", array.getJsonObject(0).getString("id"), "id"); + assertNotEquals("", array.getJsonObject(0).getString("address"), "address"); + assertEquals("", array.getJsonObject(0).getString("filter"), "filter"); + assertEquals("true", array.getJsonObject(0).getString("durable"), "durable"); + assertEquals("false", array.getJsonObject(0).getString("paused"), "paused"); + assertNotEquals("", array.getJsonObject(0).getString("temporary"), "temporary"); + assertEquals("false", array.getJsonObject(0).getString("purgeOnNoConsumers"), "purgeOnNoConsumers"); + assertNotEquals("", array.getJsonObject(0).getString("consumerCount"), "consumerCount"); + assertEquals("-1", array.getJsonObject(0).getString("maxConsumers"), "maxConsumers"); + assertEquals("false", array.getJsonObject(0).getString("autoCreated"), "autoCreated"); + assertNotEquals("", array.getJsonObject(0).getString("routingType"), "routingType"); + assertEquals("0", array.getJsonObject(0).getString("messagesAdded"), "messagesAdded"); + assertEquals("0", array.getJsonObject(0).getString("messageCount"), "messageCount"); + assertEquals("0", array.getJsonObject(0).getString("messagesAcked"), "messagesAcked"); + assertEquals("0", array.getJsonObject(0).getString("deliveringCount"), "deliveringCount"); + assertEquals("0", array.getJsonObject(0).getString("messagesKilled"), "messagesKilled"); + assertEquals("false", array.getJsonObject(0).getString("exclusive"), "exclusive"); + assertEquals("false", array.getJsonObject(0).getString("lastValue"), "lastValue"); + assertEquals("0", array.getJsonObject(0).getString("scheduledCount"), "scheduledCount"); + assertEquals("false", array.getJsonObject(0).getString("groupRebalance"), "groupRebalance"); + assertEquals("-1", array.getJsonObject(0).getString("groupBuckets"), "groupBuckets"); + assertEquals("", array.getJsonObject(0).getString("groupFirstKey"), "groupFirstKey"); + assertEquals("false", array.getJsonObject(0).getString("autoDelete"), "autoDelete"); + } + @TestTemplate public void testListAddresses() throws Exception { SimpleString queueName1 = SimpleString.of("my_queue_one"); @@ -6584,6 +6710,27 @@ private String createJsonFilter(String fieldName, String operationName, String v return jsonFilterObject.toString(); } + public String createJsonFilter(String fieldName, String operationName, String value, String sortField, String sortOrder, boolean legacyFilter) throws Exception { + Map filterMap = new HashMap<>(); + filterMap.put("field", fieldName); + filterMap.put("operation", operationName); + filterMap.put("value", value); + filterMap.put("sortField", sortField); + filterMap.put("sortOrder", sortOrder); + if (legacyFilter) { + JsonObject jsonFilterObject = JsonUtil.toJsonObject(filterMap); + return jsonFilterObject.toString(); + } else { + Map[] filtersArray = new HashMap[1]; + filtersArray[0] = filterMap; + Map filtersMap = new HashMap<>(); + filtersMap.put("searchFilters", filtersArray); + JsonObject jsonFiltersObject = JsonUtil.toJsonObject(filtersMap); + return jsonFiltersObject.toString(); + } + } + + private void sendMessagesWithPredefinedSize(int numberOfMessages, ClientSession session, ClientProducer producer, 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 10583ed8c8f..0bd7a3469f9 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.UUIDGenerator; import org.junit.jupiter.api.Test; +import java.util.List; + public class ManagementServiceImplTest extends ActiveMQTestBase { @Test @@ -148,17 +150,19 @@ public void testGetResources() throws Exception { 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 addresses = managementService.getAddressControls(); + assertEquals(1, addresses.size()); + assertInstanceOf(AddressControl.class, addresses.get(0)); + AddressControl addressControl = addresses.get(0); assertEquals(address.toString(), addressControl.getAddress()); + assertEquals(1, managementService.getAddressControlCount()); - Object[] queues = managementService.getResources(QueueControl.class); - assertEquals(1, queues.length); - assertInstanceOf(QueueControl.class, queues[0]); - QueueControl queueControl = (QueueControl) queues[0]; + List queues = managementService.getQueueControls(); + assertEquals(1, queues.size()); + assertInstanceOf(QueueControl.class, queues.get(0)); + QueueControl queueControl = queues.get(0); assertEquals(queue.getName().toString(), queueControl.getName()); + assertEquals(1, managementService.getQueueControlCount()); } @Test diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java index 00a0205a2fa..09e1659d26c 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java @@ -140,13 +140,13 @@ public QueueControlTest(boolean durable) { @TestTemplate public void testMoveMessagesInPagingMode() throws Exception { + SimpleString queueName = SimpleString.of("testQueue"); final int TOTAL_MESSAGES = 100; final String DLA = "DLA"; ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(false, false); - SimpleString queueAddr = SimpleString.of("testQueue"); - session.createQueue(QueueConfiguration.of(queueAddr).setDurable(durable)); + session.createQueue(QueueConfiguration.of(queueName).setDurable(durable)); SimpleString dlq = SimpleString.of(DLA); session.createQueue(QueueConfiguration.of(dlq)); @@ -154,9 +154,9 @@ public void testMoveMessagesInPagingMode() throws Exception { AddressSettings addressSettings = new AddressSettings().setPageSizeBytes(1024 * 1024).setMaxSizeBytes(1).setDeadLetterAddress(dlq); server.getAddressSettingsRepository().addMatch("#", addressSettings); - sendMessageBatch(TOTAL_MESSAGES, session, queueAddr); + sendMessageBatch(TOTAL_MESSAGES, session, queueName); - Queue queue = server.locateQueue(queueAddr); + Queue queue = server.locateQueue(queueName); // Give time Queue.deliverAsync to deliver messages assertTrue(waitForMessages(queue, TOTAL_MESSAGES, 5000)); @@ -165,9 +165,7 @@ public void testMoveMessagesInPagingMode() throws Exception { assertTrue(queuePagingStore != null && queuePagingStore.isPaging()); //invoke moveMessages op - String queueControlResourceName = ResourceNames.QUEUE + "testQueue"; - Object resource = server.getManagementService().getResource(queueControlResourceName); - QueueControl queueControl = (QueueControl) resource; + QueueControl queueControl = server.getManagementService().getQueueControl(queueName.toString()); assertEquals(TOTAL_MESSAGES, queueControl.getMessageCount()); // move messages to DLQ @@ -176,7 +174,7 @@ public void testMoveMessagesInPagingMode() throws Exception { //messages shouldn't move on to the same queue try { - queueControl.moveMessages(1000, "", "testQueue", false, 9000); + queueControl.moveMessages(1000, "", queueName.toString(), false, 9000); fail("messages cannot be moved on to the queue itself"); } catch (IllegalArgumentException ok) { //ok 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 f2daf451790..f6c3e86a322 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.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 void testTempTopicLeak() throws Exception { private AddressControl assertNonNullAddressControl(String match) { AddressControl advisoryAddressControl = null; - Object[] addressResources = server.getManagementService().getResources(AddressControl.class); + List 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"); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/JmsClientAckTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/JmsClientAckTest.java index 5b9179fba60..f49f0c58496 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/JmsClientAckTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/JmsClientAckTest.java @@ -16,25 +16,23 @@ */ package org.apache.activemq.artemis.tests.integration.openwire.amq; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; - import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; - import java.util.ArrayList; import java.util.List; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.tests.integration.openwire.BasicOpenWireTest; import org.apache.activemq.artemis.utils.Wait; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; + /** * adapted from: org.apache.activemq.JmsClientAckTest */ @@ -146,8 +144,7 @@ public void testAckedMessageDeliveringWithPrefetch() throws Exception { connection.start(); Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); Queue queue = session.createQueue(getQueueName()); - QueueControl queueControl = (QueueControl)server.getManagementService(). - getResource(ResourceNames.QUEUE + queueName); + QueueControl queueControl = server.getManagementService().getQueueControl(queueName); MessageProducer producer = session.createProducer(queue); for (int i = 0; i < messageCount; i++) { producer.send(session.createTextMessage("MSG" + i)); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/RedeliveryPolicyTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/RedeliveryPolicyTest.java index eadc309b271..54231cc2349 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/RedeliveryPolicyTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/RedeliveryPolicyTest.java @@ -16,12 +16,6 @@ */ package org.apache.activemq.artemis.tests.integration.openwire.amq; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.Message; @@ -30,17 +24,15 @@ import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; - import java.util.concurrent.TimeUnit; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.RedeliveryPolicy; +import org.apache.activemq.artemis.api.core.management.QueueControl; import org.apache.activemq.artemis.core.protocol.openwire.amq.AMQConsumer; import org.apache.activemq.artemis.core.protocol.openwire.amq.AMQConsumerAccessor; import org.apache.activemq.artemis.core.server.ServerConsumer; import org.apache.activemq.artemis.core.server.ServerSession; -import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.tests.integration.openwire.BasicOpenWireTest; import org.apache.activemq.artemis.tests.util.Wait; import org.apache.activemq.broker.region.policy.RedeliveryPolicyMap; @@ -50,6 +42,12 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + /** * adapted from: org.apache.activemq.RedeliveryPolicyTest */ @@ -405,8 +403,7 @@ public void testRedeliveredMessageNotOverflowingPrefetch() throws Exception { ActiveMQQueue destination = new ActiveMQQueue("TEST"); this.makeSureCoreQueueExist("TEST"); - QueueControl queueControl = (QueueControl)server.getManagementService(). - getResource(ResourceNames.QUEUE + "TEST"); + QueueControl queueControl = server.getManagementService().getQueueControl("TEST"); MessageProducer producer = session.createProducer(destination); for (int i = 0; i < messageCount; i++) { @@ -448,8 +445,7 @@ public void testCanRollbackPastPrefetch() throws Exception { ActiveMQQueue destination = new ActiveMQQueue("TEST"); this.makeSureCoreQueueExist("TEST"); - QueueControl queueControl = (QueueControl)server.getManagementService(). - getResource(ResourceNames.QUEUE + "TEST"); + QueueControl queueControl = server.getManagementService().getQueueControl("TEST"); MessageProducer producer = session.createProducer(destination); for (int i = 0; i < messageCount; i++) { @@ -490,8 +486,7 @@ public void testCountersAreCorrectAfterSendToDLQ() throws Exception { ActiveMQQueue destination = new ActiveMQQueue("TEST"); this.makeSureCoreQueueExist("TEST"); - QueueControl queueControl = (QueueControl)server.getManagementService(). - getResource(ResourceNames.QUEUE + "TEST"); + QueueControl queueControl = server.getManagementService().getQueueControl("TEST"); MessageProducer producer = session.createProducer(destination); producer.send(session.createTextMessage("The Message")); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/interop/GeneralInteropTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/interop/GeneralInteropTest.java index 7a48bb5fea3..1076ed4bf99 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/interop/GeneralInteropTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/interop/GeneralInteropTest.java @@ -16,12 +16,6 @@ */ package org.apache.activemq.artemis.tests.integration.openwire.interop; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - import javax.jms.BytesMessage; import javax.jms.Connection; import javax.jms.MapMessage; @@ -48,7 +42,6 @@ import org.apache.activemq.artemis.api.core.QueueConfiguration; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.protocol.openwire.OpenWireInterceptor; import org.apache.activemq.artemis.core.server.ServerSession; import org.apache.activemq.artemis.core.settings.impl.AddressSettings; @@ -61,6 +54,12 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + /** * This test covers interactions between core clients and openwire clients, i.e. core producers sending messages to be * received by openwire receivers, and vice versa. @@ -243,11 +242,9 @@ public void testFailoverReceivingFromCore() throws Exception { Message message = null; Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); Queue queue = session.createQueue(queueName); - QueueControl queueControl = (QueueControl)server.getManagementService(). - getResource(ResourceNames.QUEUE + queueName); + QueueControl queueControl = server.getManagementService().getQueueControl(queueName); - QueueControl dlqControl = (QueueControl)server.getManagementService(). - getResource(ResourceNames.QUEUE + dlq.toString()); + QueueControl dlqControl = server.getManagementService().getQueueControl(dlq.toString()); MessageConsumer consumer = session.createConsumer(queue); @@ -324,8 +321,7 @@ public void testFailoverReceivingFromCoreWithAckAfterInterrupt() throws Exceptio Message message = null; Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); Queue queue = session.createQueue(queueName); - QueueControl queueControl = (QueueControl)server.getManagementService(). - getResource(ResourceNames.QUEUE + queueName); + QueueControl queueControl = server.getManagementService().getQueueControl(queueName); MessageConsumer consumer = session.createConsumer(queue); message = consumer.receive(5000); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/ResourceAdapterTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/ResourceAdapterTest.java index b9819dd366e..96961cd0143 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/ResourceAdapterTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/ResourceAdapterTest.java @@ -33,8 +33,6 @@ 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.AddressControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient; import org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl; import org.apache.activemq.artemis.core.server.Queue; @@ -176,7 +174,7 @@ public void testAutoCreateQueuePrefixWhenUseJndiIsFalse() throws Exception { public void testTopicPrefixWhenUseJndiIsFalse() throws Exception { final String prefix = "jms.topic."; final String destinationName = "test"; - final SimpleString prefixedDestinationName = SimpleString.of(prefix + destinationName); + final String prefixedDestinationName = prefix + destinationName; server.addAddressInfo(new AddressInfo(prefixedDestinationName).addRoutingType(RoutingType.MULTICAST)); ActiveMQResourceAdapter ra = new ActiveMQResourceAdapter(); ra.setConnectorClassName(INVM_CONNECTOR_FACTORY); @@ -197,7 +195,7 @@ public void testTopicPrefixWhenUseJndiIsFalse() throws Exception { activation.start(); - assertEquals(1, ((AddressControl)server.getManagementService().getResource(ResourceNames.ADDRESS + prefixedDestinationName)).getQueueNames().length); + assertEquals(1, (server.getManagementService().getAddressControl(prefixedDestinationName)).getQueueNames().length); activation.stop(); } diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/routing/MQTTRedirectTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/routing/MQTTRedirectTest.java index ec2cc95367f..8a234c20cee 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/routing/MQTTRedirectTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/routing/MQTTRedirectTest.java @@ -16,10 +16,6 @@ */ package org.apache.activemq.artemis.tests.integration.routing; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; - import javax.management.openmbean.CompositeData; import javax.management.openmbean.TabularData; import java.lang.management.ManagementFactory; @@ -33,12 +29,11 @@ import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.management.ConnectionRouterControl; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.protocol.mqtt.MQTTReasonCodes; import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants; import org.apache.activemq.artemis.core.server.ActiveMQServers; -import org.apache.activemq.artemis.core.server.routing.policies.FirstElementPolicy; import org.apache.activemq.artemis.core.server.routing.KeyType; +import org.apache.activemq.artemis.core.server.routing.policies.FirstElementPolicy; import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager; import org.apache.activemq.artemis.tests.integration.security.SecurityTest; import org.apache.activemq.artemis.utils.Wait; @@ -49,6 +44,10 @@ import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + public class MQTTRedirectTest extends RoutingTestBase { static { @@ -75,10 +74,8 @@ public void testSimpleRedirect() throws Exception { getServer(0).createQueue(QueueConfiguration.of(topicName).setRoutingType(RoutingType.ANYCAST)); getServer(1).createQueue(QueueConfiguration.of(topicName).setRoutingType(RoutingType.ANYCAST)); - QueueControl queueControl0 = (QueueControl)getServer(0).getManagementService() - .getResource(ResourceNames.QUEUE + topicName); - QueueControl queueControl1 = (QueueControl)getServer(1).getManagementService() - .getResource(ResourceNames.QUEUE + topicName); + QueueControl queueControl0 = getServer(0).getManagementService().getQueueControl(topicName); + QueueControl queueControl1 = getServer(1).getManagementService().getQueueControl(topicName); assertEquals(0, queueControl0.countMessages()); assertEquals(0, queueControl1.countMessages()); @@ -97,8 +94,7 @@ public void testSimpleRedirect() throws Exception { } client0.close(); - ConnectionRouterControl connectionRouterControl = (ConnectionRouterControl)getServer(0).getManagementService() - .getResource(ResourceNames.CONNECTION_ROUTER + CONNECTION_ROUTER_NAME); + ConnectionRouterControl connectionRouterControl = (ConnectionRouterControl)getServer(0).getManagementService().getConnectionRouterControl(CONNECTION_ROUTER_NAME); CompositeData targetData = connectionRouterControl.getTarget("admin"); CompositeData targetConnectorData = (CompositeData)targetData.get("connector"); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/routing/RedirectTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/routing/RedirectTest.java index 17f1f6748c3..966bcaf6f06 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/routing/RedirectTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/routing/RedirectTest.java @@ -30,7 +30,6 @@ import org.apache.activemq.artemis.api.core.QueueConfiguration; import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants; import org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType; import org.apache.activemq.artemis.core.server.routing.KeyType; @@ -93,10 +92,8 @@ public void testSimpleRedirect() throws Exception { } private void testSimpleRedirectWithProtocol(final String protocol, final String queueName) throws Exception { - QueueControl queueControl0 = (QueueControl)getServer(0).getManagementService() - .getResource(ResourceNames.QUEUE + queueName); - QueueControl queueControl1 = (QueueControl)getServer(1).getManagementService() - .getResource(ResourceNames.QUEUE + queueName); + QueueControl queueControl0 = getServer(0).getManagementService().getQueueControl(queueName); + QueueControl queueControl1 = getServer(1).getManagementService().getQueueControl(queueName); assertEquals(0, queueControl0.countMessages()); assertEquals(0, queueControl1.countMessages()); @@ -195,8 +192,8 @@ private void testEvenlyRedirectWithProtocol(final String protocol, final String QueueControl[] queueControls = new QueueControl[nodes.length]; for (int node : nodes) { - queueControls[node] = (QueueControl)getServer(node).getManagementService() - .getResource(ResourceNames.QUEUE + queueName); + queueControls[node] = getServer(node).getManagementService() + .getQueueControl(queueName); assertEquals(0, queueControls[node].countMessages(), "Unexpected message count for node " + node); } @@ -234,8 +231,8 @@ private void testEvenlyRedirectWithProtocol(final String protocol, final String startServers(0); - queueControls[0] = (QueueControl)getServer(0).getManagementService() - .getResource(ResourceNames.QUEUE + queueName); + queueControls[0] = getServer(0).getManagementService() + .getQueueControl(queueName); } for (int i = 0; i < nodes.length - 1; i++) { @@ -290,10 +287,10 @@ public void testSymmetricRedirect() throws Exception { } private void testSymmetricRedirectWithProtocol(final String protocol, final String queueName) throws Exception { - QueueControl queueControl0 = (QueueControl)getServer(0).getManagementService() - .getResource(ResourceNames.QUEUE + queueName); - QueueControl queueControl1 = (QueueControl)getServer(1).getManagementService() - .getResource(ResourceNames.QUEUE + queueName); + QueueControl queueControl0 = getServer(0).getManagementService() + .getQueueControl(queueName); + QueueControl queueControl1 = getServer(1).getManagementService() + .getQueueControl(queueName); assertEquals(0, queueControl0.countMessages(), "Unexpected message count for node 0"); assertEquals(0, queueControl1.countMessages(), "Unexpected message count for node 1"); @@ -370,8 +367,7 @@ public void testRedirectAfterFailure() throws Exception { private void testRedirectAfterFailureWithProtocol(final String protocol, final String queueName, final int[] nodes) throws Exception { QueueControl[] queueControls = new QueueControl[nodes.length]; for (int node : nodes) { - queueControls[node] = (QueueControl)getServer(node).getManagementService() - .getResource(ResourceNames.QUEUE + queueName); + queueControls[node] = getServer(node).getManagementService().getQueueControl(queueName); assertEquals(0, queueControls[node].countMessages(), "Unexpected message count for node " + node); } @@ -403,8 +399,7 @@ private void testRedirectAfterFailureWithProtocol(final String protocol, final S startServers(failedNode); - queueControls[failedNode] = (QueueControl)getServer(failedNode).getManagementService() - .getResource(ResourceNames.QUEUE + queueName); + queueControls[failedNode] = getServer(failedNode).getManagementService().getQueueControl(queueName); try (Connection connection = connectionFactory.createConnection()) { connection.start(); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/scheduling/ScheduledMessageTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/scheduling/ScheduledMessageTest.java index f69f52948e4..70e35218603 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/scheduling/ScheduledMessageTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/scheduling/ScheduledMessageTest.java @@ -16,11 +16,6 @@ */ package org.apache.activemq.artemis.tests.integration.scheduling; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - import javax.transaction.xa.XAResource; import javax.transaction.xa.Xid; import java.util.ArrayList; @@ -37,7 +32,6 @@ 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.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.config.Configuration; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.settings.impl.AddressSettings; @@ -49,6 +43,11 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + public class ScheduledMessageTest extends ActiveMQTestBase { private final SimpleString atestq = SimpleString.of("ascheduledtestq"); @@ -531,7 +530,7 @@ public void testManagementDeliveryById() throws Exception { ClientMessage message = consumer.receive(500); assertNull(message); - QueueControl queueControl = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + atestq); + QueueControl queueControl = server.getManagementService().getQueueControl(atestq.toString()); queueControl.deliverScheduledMessage((long) queueControl.listScheduledMessages()[0].get("messageID")); message = consumer.receive(500); @@ -557,7 +556,7 @@ public void testManagementDeleteById() throws Exception { session.commit(); } - QueueControl queueControl = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + atestq); + QueueControl queueControl = server.getManagementService().getQueueControl(atestq.toString()); assertEquals(1, queueControl.getMessageCount()); assertEquals(1, queueControl.getScheduledCount()); assertTrue(queueControl.removeMessage((long) queueControl.listScheduledMessages()[0].get("messageID"))); @@ -593,7 +592,7 @@ public void testManagementDeliveryByFilter() throws Exception { ClientMessage message = consumer.receive(500); assertNull(message); - QueueControl queueControl = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + atestq); + QueueControl queueControl = server.getManagementService().getQueueControl(atestq.toString()); queueControl.deliverScheduledMessages(propertyName + " = '" + propertyValue + "'"); message = consumer.receive(500); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/AutoCreateDeadLetterResourcesTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/AutoCreateDeadLetterResourcesTest.java index 71482e15aee..924cd4c5dee 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/AutoCreateDeadLetterResourcesTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/AutoCreateDeadLetterResourcesTest.java @@ -16,10 +16,6 @@ */ package org.apache.activemq.artemis.tests.integration.server; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; - import javax.jms.JMSContext; import org.apache.activemq.artemis.api.core.QueueConfiguration; @@ -32,19 +28,22 @@ 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.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.config.DivertConfiguration; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.Queue; import org.apache.activemq.artemis.core.settings.impl.AddressSettings; import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; import org.apache.activemq.artemis.tests.util.ActiveMQTestBase; -import org.apache.activemq.artemis.utils.RandomUtil; import org.apache.activemq.artemis.tests.util.Wait; import org.apache.activemq.artemis.utils.CompositeAddress; +import org.apache.activemq.artemis.utils.RandomUtil; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; + public class AutoCreateDeadLetterResourcesTest extends ActiveMQTestBase { public final SimpleString addressA = SimpleString.of("addressA"); public final SimpleString queueA = SimpleString.of("queueA"); @@ -281,10 +280,10 @@ public void testOngoingSendToDLAPreventAutoDelete() throws Exception { producer.send(message); } - QueueControl queueControl = (QueueControl)server.getManagementService().getResource(ResourceNames.QUEUE + queueA); + QueueControl queueControl = server.getManagementService().getQueueControl(queueA.toString()); queueControl.sendMessagesToDeadLetterAddress(null); - QueueControl dlqControl = (QueueControl)server.getManagementService().getResource(ResourceNames.QUEUE + dlqName); + QueueControl dlqControl = server.getManagementService().getQueueControl(dlqName.toString()); dlqControl.retryMessages(); for (int i = 0; i < 10; i++) { diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/QueueConfigPersistenceTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/QueueConfigPersistenceTest.java index b2dec6bd85f..2bd84bb0569 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/QueueConfigPersistenceTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/QueueConfigPersistenceTest.java @@ -16,19 +16,18 @@ */ package org.apache.activemq.artemis.tests.integration.server; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - import org.apache.activemq.artemis.api.core.QueueConfiguration; +import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.SimpleString; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.Queue; -import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.tests.util.ActiveMQTestBase; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + public class QueueConfigPersistenceTest extends ActiveMQTestBase { @Test @@ -72,7 +71,7 @@ public void testInternalQueue() throws Exception { server.start(); Queue queue = server.locateQueue(getName()); assertTrue(queue.isInternalQueue()); - assertNotNull(server.getManagementService().getResource(ResourceNames.QUEUE + getName())); + assertNotNull(server.getManagementService().getQueueControl(getName())); server.stop(); } diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/ScaleDownTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/ScaleDownTest.java index bdfb88546a3..2d722e8b468 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/ScaleDownTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/ScaleDownTest.java @@ -40,7 +40,6 @@ 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.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl; import org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl; import org.apache.activemq.artemis.core.client.impl.ServerLocatorInternal; @@ -187,7 +186,7 @@ public void testBasicScaleDown() throws Exception { assertEquals(TEST_SIZE - 1, getMessageCount(((LocalQueueBinding) servers[0].getPostOffice().getBinding(SimpleString.of(queueName2))).getQueue())); // trigger scaleDown from node 0 to node 1 - ActiveMQServerControlImpl serverControl = (ActiveMQServerControlImpl) servers[0].getManagementService().getResource(ResourceNames.BROKER); + ActiveMQServerControlImpl serverControl = (ActiveMQServerControlImpl) servers[0].getManagementService().getServerControl(); serverControl.scaleDown(null); // get the 2 messages from queue 1 diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/UuidNamespaceTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/UuidNamespaceTest.java index a808c0660d0..e13192bbdc0 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/UuidNamespaceTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/server/UuidNamespaceTest.java @@ -21,7 +21,6 @@ import org.apache.activemq.artemis.api.core.QueueConfiguration; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.config.MetricsConfiguration; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.metrics.plugins.SimpleMetricsPlugin; @@ -70,7 +69,7 @@ private void testUuidNamespace(boolean legacy) throws Exception { session.createQueue(QueueConfiguration.of(queue).setAddress(address).setDurable(false).setTemporary(true)); - QueueControl queueControl = (QueueControl) server.getManagementService().getResource(ResourceNames.QUEUE + queue); + QueueControl queueControl = server.getManagementService().getQueueControl(queue.toString()); assertEquals(RING_SIZE, queueControl.getRingSize()); assertEquals(DLA.toString(), queueControl.getDeadLetterAddress()); assertEquals(EA.toString(), queueControl.getExpiryAddress()); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaTest.java index 5b68934175a..6eee623cedd 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaTest.java @@ -303,10 +303,11 @@ public void testInterleavedXaTxRollbackFailed() throws Exception { message.acknowledge(); clientSession.end(xid2, XAResource.TMSUCCESS); + Wait.assertEquals(1L, () -> testQueue.getAcknowledgeAttempts(), 2000, 20); clientSession.rollback(xid2); - assertEquals(0, testQueue.getMessagesAcknowledged()); - assertEquals(0, testQueue.getDeliveringCount()); - assertEquals(1, testQueue.getMessageCount()); + Wait.assertEquals(0L, () -> testQueue.getMessagesAcknowledged(), 2000, 20); + Wait.assertEquals(0L, () -> testQueue.getDeliveringCount(), 5000, 20); + Wait.assertEquals(1L, () -> testQueue.getMessageCount(), 2000, 20); } @TestTemplate diff --git a/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/tools/container/LocalTestServer.java b/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/tools/container/LocalTestServer.java index 5a46b243491..39425d5194d 100644 --- a/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/tools/container/LocalTestServer.java +++ b/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/tools/container/LocalTestServer.java @@ -20,6 +20,7 @@ import javax.management.ObjectName; import javax.naming.InitialContext; import java.io.File; +import java.lang.invoke.MethodHandles; import java.lang.management.ManagementFactory; import java.util.ArrayList; import java.util.Collection; @@ -35,7 +36,6 @@ import org.apache.activemq.artemis.api.core.management.AddressControl; import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.api.jms.JMSFactoryType; import org.apache.activemq.artemis.core.config.FileDeploymentManager; import org.apache.activemq.artemis.core.config.impl.FileConfiguration; @@ -51,7 +51,6 @@ import org.apache.activemq.artemis.spi.core.security.jaas.InVMLoginModule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.lang.invoke.MethodHandles; public class LocalTestServer implements Server, Runnable { @@ -324,7 +323,7 @@ public void run() { @Override public Long getMessageCountForQueue(final String queueName) throws Exception { - QueueControl queue = (QueueControl) getActiveMQServer().getManagementService().getResource("queue." + queueName); + QueueControl queue = getActiveMQServer().getManagementService().getQueueControl(queueName); if (queue != null) { queue.flushExecutor(); return queue.getMessageCount(); @@ -335,7 +334,7 @@ public Long getMessageCountForQueue(final String queueName) throws Exception { @Override public void removeAllMessages(final String queueName) throws Exception { - QueueControl queue = (QueueControl) getActiveMQServer().getManagementService().getResource(ResourceNames.QUEUE + queueName); + QueueControl queue = getActiveMQServer().getManagementService().getQueueControl(queueName); queue.removeMessages(null); } diff --git a/tests/soak-tests/src/test/java/org/apache/activemq/artemis/tests/soak/client/ClientCrashMassiveRollbackTest.java b/tests/soak-tests/src/test/java/org/apache/activemq/artemis/tests/soak/client/ClientCrashMassiveRollbackTest.java index 18192546275..e14a287696a 100644 --- a/tests/soak-tests/src/test/java/org/apache/activemq/artemis/tests/soak/client/ClientCrashMassiveRollbackTest.java +++ b/tests/soak-tests/src/test/java/org/apache/activemq/artemis/tests/soak/client/ClientCrashMassiveRollbackTest.java @@ -16,8 +16,6 @@ */ package org.apache.activemq.artemis.tests.soak.client; -import static org.junit.jupiter.api.Assertions.assertEquals; - import javax.jms.Connection; import javax.jms.MessageConsumer; import javax.jms.Queue; @@ -31,7 +29,6 @@ import org.apache.activemq.artemis.api.core.client.SendAcknowledgementHandler; import org.apache.activemq.artemis.api.core.client.ServerLocator; import org.apache.activemq.artemis.api.core.management.QueueControl; -import org.apache.activemq.artemis.api.core.management.ResourceNames; import org.apache.activemq.artemis.core.config.Configuration; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; @@ -41,6 +38,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + public class ClientCrashMassiveRollbackTest extends ActiveMQTestBase { protected ActiveMQServer server; protected ClientSession session; @@ -97,7 +96,7 @@ public void clientCrashMassiveRollbackTest() throws Exception { session.setSendAcknowledgementHandler(sendHandler); session.createQueue(QueueConfiguration.of(queueName).setAddress(queueName).setRoutingType(RoutingType.ANYCAST)); ClientProducer producer = session.createProducer(queueName); - QueueControl queueControl = (QueueControl)server.getManagementService().getResource(ResourceNames.QUEUE + queueName); + QueueControl queueControl = server.getManagementService().getQueueControl(queueName); thread.start();