/** * Jon plugin doesn't recognize an Operation whose name is in * form getXXXX(), so add this one. */ @Operation(desc = "names of the diverts deployed on this server", impact = MBeanOperationInfo.INFO) default String[] listDivertNames() { return getDivertNames(); }
String json = serverControl.getConnectorsAsJSON(); context.getResult().set(json); } else if (RESET_ALL_MESSAGE_COUNTERS.equals(operationName)) { serverControl.resetAllMessageCounters(); context.getResult(); } else if (RESET_ALL_MESSAGE_COUNTER_HISTORIES.equals(operationName)) { serverControl.resetAllMessageCounterHistories(); context.getResult(); } else if (LIST_PREPARED_TRANSACTIONS.equals(operationName)) { String[] list = serverControl.listPreparedTransactions(); reportListOfStrings(context, list); } else if (LIST_PREPARED_TRANSACTION_DETAILS_AS_JSON.equals(operationName)) { String json = serverControl.listPreparedTransactionDetailsAsJSON(); context.getResult().set(json); } else if (LIST_PREPARED_TRANSACTION_DETAILS_AS_HTML.equals(operationName)) { String html = serverControl.listPreparedTransactionDetailsAsHTML(); context.getResult().set(html); } else if (LIST_HEURISTIC_COMMITTED_TRANSACTIONS.equals(operationName)) { String[] list = serverControl.listHeuristicCommittedTransactions(); reportListOfStrings(context, list); } else if (LIST_HEURISTIC_ROLLED_BACK_TRANSACTIONS.equals(operationName)) { String[] list = serverControl.listHeuristicRolledBackTransactions(); reportListOfStrings(context, list); } else if (COMMIT_PREPARED_TRANSACTION.equals(operationName)) { String txId = TRANSACTION_AS_BASE_64.resolveModelAttribute(context, operation).asString(); boolean committed = serverControl.commitPreparedTransaction(txId); context.getResult().set(committed); } else if (ROLLBACK_PREPARED_TRANSACTION.equals(operationName)) { String txId = TRANSACTION_AS_BASE_64.resolveModelAttribute(context, operation).asString();
String[] preparedTransactions = jmxServer.listPreparedTransactions(); Assert.assertEquals(0, jmxServer.listHeuristicCommittedTransactions().length); Assert.assertEquals(0, jmxServer.listHeuristicRolledBackTransactions().length); jmxServer.commitPreparedTransaction(XidImpl.toBase64String(xid)); } else { jmxServer.rollbackPreparedTransaction(XidImpl.toBase64String(xid)); Assert.assertEquals(0, jmxServer.listPreparedTransactions().length); if (isCommit) { Assert.assertEquals(1, jmxServer.listHeuristicCommittedTransactions().length); Assert.assertEquals(0, jmxServer.listHeuristicRolledBackTransactions().length); } else { Assert.assertEquals(0, jmxServer.listHeuristicCommittedTransactions().length); Assert.assertEquals(1, jmxServer.listHeuristicRolledBackTransactions().length);
private void applyOperationToActiveMQService(ModelNode operation, String attributeName, ModelNode newValue, ServiceController<?> activeMQServiceController) { ActiveMQServerControl serverControl = ActiveMQServer.class.cast(activeMQServiceController.getValue()).getActiveMQServerControl(); if (serverControl == null) { PathAddress address = PathAddress.pathAddress(operation.require(OP_ADDR)); throw ControllerLogger.ROOT_LOGGER.managementResourceNotFound(address); } try { if (attributeName.equals(ServerDefinition.MESSAGE_COUNTER_SAMPLE_PERIOD.getName())) { serverControl.setMessageCounterSamplePeriod(newValue.asLong()); } else if (attributeName.equals(ServerDefinition.MESSAGE_COUNTER_MAX_DAY_HISTORY.getName())) { serverControl.setMessageCounterMaxDayCount(newValue.asInt()); } else if (attributeName.equals(ServerDefinition.STATISTICS_ENABLED.getName())) { if (newValue.asBoolean()) { serverControl.enableMessageCounters(); } else { serverControl.disableMessageCounters(); } } else { // Bug! Someone added the attribute to the set but did not implement throw MessagingLogger.ROOT_LOGGER.unsupportedRuntimeAttribute(attributeName); } } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } }
@Test public void testListMessageCounterHistoryAsHTML() throws Exception { long counterPeriod = 1000; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, RoutingType.MULTICAST, queue, null, durable); QueueControl queueControl = createManagementControl(address, queue); ActiveMQServerControl serverControl = ManagementControlHelper.createActiveMQServerControl(mbeanServer); serverControl.enableMessageCounters(); serverControl.setMessageCounterSamplePeriod(counterPeriod); String history = queueControl.listMessageCounterHistoryAsHTML(); Assert.assertNotNull(history); session.deleteQueue(queue); }
@Test public void testCreateAndDestroyQueueClosingConsumers() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString name = RandomUtil.randomSimpleString(); boolean durable = true; ActiveMQServerControl serverControl = createManagementControl(); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); serverControl.createAddress(address.toString(), "ANYCAST"); serverControl.createQueue(address.toString(), "ANYCAST", name.toString(), null, durable, -1, false, false); ServerLocator receiveLocator = createInVMNonHALocator(); ClientSessionFactory receiveCsf = createSessionFactory(receiveLocator); ClientSession receiveClientSession = receiveCsf.createSession(true, false, false); final ClientConsumer consumer = receiveClientSession.createConsumer(name); Assert.assertFalse(consumer.isClosed()); checkResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); serverControl.destroyQueue(name.toString(), true); Wait.waitFor(new Wait.Condition() { @Override public boolean isSatisfied() throws Exception { return consumer.isClosed(); } }, 1000, 100); Assert.assertTrue(consumer.isClosed()); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); }
@Test public void testNullRouteNameOnDivert() throws Exception { String address = RandomUtil.randomString(); String name = RandomUtil.randomString(); String forwardingAddress = RandomUtil.randomString(); ActiveMQServerControl serverControl = createManagementControl(); checkNoResource(ObjectNameBuilder.DEFAULT.getDivertObjectName(name, address)); assertEquals(0, serverControl.getDivertNames().length); serverControl.createDivert(name.toString(), null, address, forwardingAddress, true, null, null); checkResource(ObjectNameBuilder.DEFAULT.getDivertObjectName(name, address)); }
assertEquals(0, serverControl.getDivertNames().length); serverControl.createDivert(name.toString(), routingName, address, forwardingAddress, true, null, null); assertNull(divertControl.getFilter()); assertNull(divertControl.getTransformerClassName()); String[] divertNames = serverControl.getDivertNames(); assertEquals(1, divertNames.length); assertEquals(name, divertNames[0]); assertEquals(text, message.getStringProperty("prop")); serverControl.destroyDivert(name.toString()); assertEquals(0, serverControl.getDivertNames().length);
/** * Stops this JMS server. */ public void stop() { started = false; senderSessionPool.close(); receiverSessionPool.close(); listenerConsumers.forEach(Util::closeQuietly); listenerSessions.forEach(Util::closeQuietly); closeQuietly(producerConnection); closeQuietly(consumerConnection); try { ActiveMQServerControl control = jmsServer.getActiveMQServer().getActiveMQServerControl(); String[] remoteAddresses = control.listRemoteAddresses(); for (String address : remoteAddresses) { control.closeConnectionsForAddress(address); } } catch (Exception e) { LOGGER.warn("exception trying to close remote connections.", e); } try { jmsServer.stop(); } catch (Exception e) { LOGGER.warn("exception trying to stop broker.", e); } }
@Test public void testGetQueueNames() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString name = RandomUtil.randomSimpleString(); ActiveMQServerControl serverControl = createManagementControl(); // due to replication, there can be another queue created for replicating // management operations Assert.assertFalse(ActiveMQServerControlTest.contains(name.toString(), serverControl.getQueueNames())); serverControl.createAddress(address.toString(), "ANYCAST"); serverControl.createQueue(address.toString(), "ANYCAST", name.toString(), null, true, -1, false, false); Assert.assertTrue(ActiveMQServerControlTest.contains(name.toString(), serverControl.getQueueNames())); serverControl.destroyQueue(name.toString()); Assert.assertFalse(ActiveMQServerControlTest.contains(name.toString(), serverControl.getQueueNames())); }
@Test public void testGetAddressNames() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString name = RandomUtil.randomSimpleString(); ActiveMQServerControl serverControl = createManagementControl(); // due to replication, there can be another queue created for replicating // management operations Assert.assertFalse(ActiveMQServerControlTest.contains(address.toString(), serverControl.getAddressNames())); serverControl.createQueue(address.toString(), "ANYCAST", name.toString(), null, true, -1, false, true); Assert.assertTrue(ActiveMQServerControlTest.contains(address.toString(), serverControl.getAddressNames())); serverControl.destroyQueue(name.toString(), true, true); Assert.assertFalse(ActiveMQServerControlTest.contains(address.toString(), serverControl.getAddressNames())); }
@Test public void testCreateQueueNotification() throws Exception { JMSUtil.JMXListener listener = new JMSUtil.JMXListener(); this.mbeanServer.addNotificationListener(ObjectNameBuilder.DEFAULT.getActiveMQServerObjectName(), listener, null, null); SimpleString testQueueName = new SimpleString("newQueue"); String testQueueName2 = "newQueue2"; this.server.createQueue(testQueueName, RoutingType.MULTICAST, testQueueName, null, durable, false); Notification notif = listener.getNotification(); System.out.println("got notif: " + notif); assertEquals(CoreNotificationType.BINDING_ADDED.toString(), notif.getType()); this.server.destroyQueue(testQueueName); notif = listener.getNotification(); System.out.println("got notif: " + notif); assertEquals(CoreNotificationType.BINDING_REMOVED.toString(), notif.getType()); ActiveMQServerControl control = ManagementControlHelper.createActiveMQServerControl(mbeanServer); control.createQueue(testQueueName2, testQueueName2, RoutingType.MULTICAST.toString()); notif = listener.getNotification(); System.out.println("got notif: " + notif); assertEquals(CoreNotificationType.BINDING_ADDED.toString(), notif.getType()); control.destroyQueue(testQueueName2); notif = listener.getNotification(); System.out.println("got notif: " + notif); assertEquals(CoreNotificationType.BINDING_REMOVED.toString(), notif.getType()); }
@Test public void testGetQueueNamesWithRoutingType() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString anycastName = RandomUtil.randomSimpleString(); SimpleString multicastName = RandomUtil.randomSimpleString(); ActiveMQServerControl serverControl = createManagementControl(); // due to replication, there can be another queue created for replicating // management operations Assert.assertFalse(ActiveMQServerControlTest.contains(anycastName.toString(), serverControl.getQueueNames())); Assert.assertFalse(ActiveMQServerControlTest.contains(multicastName.toString(), serverControl.getQueueNames())); serverControl.createQueue(address.toString(), RoutingType.ANYCAST.toString(), anycastName.toString(), null, true, -1, false, true); Assert.assertTrue(ActiveMQServerControlTest.contains(anycastName.toString(), serverControl.getQueueNames(RoutingType.ANYCAST.toString()))); Assert.assertFalse(ActiveMQServerControlTest.contains(anycastName.toString(), serverControl.getQueueNames(RoutingType.MULTICAST.toString()))); serverControl.createQueue(address.toString(), RoutingType.MULTICAST.toString(), multicastName.toString(), null, true, -1, false, true); Assert.assertTrue(ActiveMQServerControlTest.contains(multicastName.toString(), serverControl.getQueueNames(RoutingType.MULTICAST.toString()))); Assert.assertFalse(ActiveMQServerControlTest.contains(multicastName.toString(), serverControl.getQueueNames(RoutingType.ANYCAST.toString()))); serverControl.destroyQueue(anycastName.toString()); serverControl.destroyQueue(multicastName.toString()); Assert.assertFalse(ActiveMQServerControlTest.contains(anycastName.toString(), serverControl.getQueueNames())); Assert.assertFalse(ActiveMQServerControlTest.contains(multicastName.toString(), serverControl.getQueueNames())); }
@Test public void testDuplicateRecordId() throws Exception { for (int i = 0; i < 3; i++) { server.start(); ActiveMQServerControl serverControl = server.getActiveMQServerControl(); serverControl.removeAddressSettings("q"); AddressSettingsInfo defaultSettings = AddressSettingsInfo.from(serverControl.getAddressSettingsAsJSON("#")); serverControl.addAddressSettings("q", "dlq", defaultSettings.getExpiryAddress(), -1, false, 1, defaultSettings.getMaxSizeBytes(), defaultSettings.getPageSizeBytes(), defaultSettings.getPageCacheMaxSize(), defaultSettings.getRedeliveryDelay(), defaultSettings.getRedeliveryMultiplier(), defaultSettings.getMaxRedeliveryDelay(), defaultSettings.getRedistributionDelay(), defaultSettings.isSendToDLAOnNoRoute(), defaultSettings.getAddressFullMessagePolicy(), defaultSettings.getSlowConsumerThreshold(), defaultSettings.getSlowConsumerCheckPeriod(), defaultSettings.getSlowConsumerPolicy(), defaultSettings.isAutoCreateJmsQueues(), defaultSettings.isAutoDeleteJmsQueues(), defaultSettings.isAutoCreateJmsQueues(), defaultSettings.isAutoDeleteJmsTopics()); server.stop(); PrintData.printData(server.getConfiguration().getBindingsLocation().getAbsoluteFile(), server.getConfiguration().getJournalLocation().getAbsoluteFile(), server.getConfiguration().getPagingLocation().getAbsoluteFile()); } } }
private void dropAllSubscriptions(AddressControl addressControl, ManagementService managementService) throws Exception { ActiveMQServerControl serverControl = (ActiveMQServerControl) managementService.getResource(ResourceNames.BROKER); String[] queues = addressControl.getQueueNames(); for (String queue : queues) { // Drop all subscription shouldn't delete the dummy queue used to identify if the topic exists on the core queues. // we will just ignore this queue if (!queue.equals(addressControl.getAddress())) { serverControl.destroyQueue(queue); } } }
assertEquals(0, serverControl.getBridgeNames().length); session.createQueue(targetAddress, RoutingType.ANYCAST, targetQueue); serverControl.createBridge(name, sourceQueue, targetAddress, null, // forwardingAddress String[] bridgeNames = serverControl.getBridgeNames(); assertEquals(1, bridgeNames.length); assertEquals(name, bridgeNames[0]); assertNull(sourceConsumer.receiveImmediate()); serverControl.destroyBridge(name); assertEquals(0, serverControl.getBridgeNames().length);
boolean autoDeleteJmsTopics = false; serverControl.addAddressSettings(addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, maxSizeBytes, pageSizeBytes, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues, autoCreateJmsTopics, autoDeleteJmsTopics); serverControl.addAddressSettings(addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, 100, 1000, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues, autoCreateJmsTopics, autoDeleteJmsTopics); } catch (Exception expected) { ex = true; String jsonString = serverControl.getAddressSettingsAsJSON(exactAddress); AddressSettingsInfo info = AddressSettingsInfo.from(jsonString); serverControl.addAddressSettings(addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, -1, 1000, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues, autoCreateJmsTopics, autoDeleteJmsTopics); jsonString = serverControl.getAddressSettingsAsJSON(exactAddress); info = AddressSettingsInfo.from(jsonString); serverControl.addAddressSettings(addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, -2, 1000, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues, autoCreateJmsTopics, autoDeleteJmsTopics); } catch (Exception e) { ex = true;
@Test public void testInvalidCall() throws Exception { Configuration configuration = createDefaultInVMConfig().setJMXManagementEnabled(true); ActiveMQServer server = createServer(false, configuration); server.setMBeanServer(mbeanServer); server.start(); ActiveMQServerControl jmxServer = ManagementControlHelper.createActiveMQServerControl(mbeanServer); Assert.assertFalse(jmxServer.commitPreparedTransaction("Nananananana")); }
static void createDivert(String name, DivertConfiguration divertConfiguration, ActiveMQServerControl serverControl) { try { String transformerClassName = divertConfiguration.getTransformerConfiguration() != null ? divertConfiguration.getTransformerConfiguration().getClassName() : null; serverControl.createDivert(name, divertConfiguration.getRoutingName(), divertConfiguration.getAddress(), divertConfiguration.getForwardingAddress(), divertConfiguration.isExclusive(), divertConfiguration.getFilterString(), transformerClassName); } catch (RuntimeException e) { throw e; } catch (Exception e) { // TODO should this be an OFE instead? throw new RuntimeException(e); } } }
String transformerClassName = bridgeConfig.getTransformerConfiguration() != null ? bridgeConfig.getTransformerConfiguration().getClassName() : null; if (bridgeConfig.getDiscoveryGroupName() != null) { serverControl.createBridge(name, bridgeConfig.getQueueName(), bridgeConfig.getForwardingAddress(), bridgeConfig.getFilterString(), transformerClassName, bridgeConfig.getRetryInterval(), bridgeConfig.getRetryIntervalMultiplier(), bridgeConfig.getInitialConnectAttempts(), serverControl.createBridge(name, bridgeConfig.getQueueName(), bridgeConfig.getForwardingAddress(), bridgeConfig.getFilterString(), transformerClassName, bridgeConfig.getRetryInterval(), bridgeConfig.getRetryIntervalMultiplier(), bridgeConfig.getInitialConnectAttempts(),