public String[] listTargetDestinations(ActiveMQServer server, String sessionID) throws Exception { ServerSession session = server.getSessionByID(sessionID); if (session == null) { return new String[0]; } String[] addresses = session.getTargetAddresses(); Map<String, QueueControl> allDests = new HashMap<>(); Object[] queueControls = server.getManagementService().getResources(QueueControl.class); for (Object queue : queueControls) { QueueControl queueControl = (QueueControl)queue; allDests.put(queueControl.getAddress(), queueControl); } List<String> destinations = new ArrayList<>(); for (String addresse : addresses) { QueueControl control = allDests.get(addresse); if (control != null) { destinations.add(control.getAddress()); } } return destinations.toArray(new String[destinations.size()]); } }
public String[] listTargetDestinations(ActiveMQServer server, String sessionID) throws Exception { ServerSession session = server.getSessionByID(sessionID); if (session == null) { return new String[0]; } String[] addresses = session.getTargetAddresses(); Map<String, QueueControl> allDests = new HashMap<>(); Object[] queueControls = server.getManagementService().getResources(QueueControl.class); for (Object queue : queueControls) { QueueControl queueControl = (QueueControl)queue; allDests.put(queueControl.getAddress(), queueControl); } List<String> destinations = new ArrayList<>(); for (String addresse : addresses) { QueueControl control = allDests.get(addresse); if (control != null) { destinations.add(control.getAddress()); } } return destinations.toArray(new String[destinations.size()]); } }
private JsonObject enrichConsumer(JsonObject originalConsumer, ActiveMQServer server) { JsonObjectBuilder enrichedConsumer = Json.createObjectBuilder(); for (Map.Entry<String, JsonValue> entry : originalConsumer.entrySet()) { enrichedConsumer.add(entry.getKey(), entry.getValue()); } String queueName = originalConsumer.getString("queueName"); final QueueControl queueControl = QueueControl.class.cast(server.getManagementService().getResource(ResourceNames.QUEUE + queueName)); if (queueControl == null) { return originalConsumer; } enrichedConsumer.add("durable", queueControl.isDurable()); String routingType = queueControl.getRoutingType(); String destinationType = routingType.equals("ANYCAST") ? "queue" : "topic"; enrichedConsumer.add("destinationType", destinationType); String address = queueControl.getAddress(); String destinationName = inferDestinationName(address); enrichedConsumer.add("destinationName", destinationName); return enrichedConsumer.build(); }
private JsonObject enrichConsumer(JsonObject originalConsumer, ActiveMQServer server) { JsonObjectBuilder enrichedConsumer = Json.createObjectBuilder(); for (Map.Entry<String, JsonValue> entry : originalConsumer.entrySet()) { enrichedConsumer.add(entry.getKey(), entry.getValue()); } String queueName = originalConsumer.getString("queueName"); final QueueControl queueControl = QueueControl.class.cast(server.getManagementService().getResource(ResourceNames.QUEUE + queueName)); if (queueControl == null) { return originalConsumer; } enrichedConsumer.add("durable", queueControl.isDurable()); String routingType = queueControl.getRoutingType(); String destinationType = routingType.equals("ANYCAST") ? "queue" : "topic"; enrichedConsumer.add("destinationType", destinationType); String address = queueControl.getAddress(); String destinationName = inferDestinationName(address); enrichedConsumer.add("destinationName", destinationName); return enrichedConsumer.build(); }
@Override public JsonObjectBuilder toJson(QueueControl queue) { Queue q = server.locateQueue(new SimpleString(queue.getName())); JsonObjectBuilder obj = JsonLoader.createObjectBuilder().add("id", toString(queue.getID())) .add("name", toString(queue.getName())).add("address", toString(queue.getAddress())) .add("filter", toString(queue.getFilter())).add("rate", toString(q.getRate())) .add("durable", toString(queue.isDurable())).add("paused", toString(q.isPaused())) .add("temporary", toString(queue.isTemporary())) .add("purgeOnNoConsumers", toString(queue.isPurgeOnNoConsumers())) .add("consumerCount", toString(queue.getConsumerCount())) .add("maxConsumers", toString(queue.getMaxConsumers())) .add("autoCreated", toString(q.isAutoCreated())) .add("user", toString(q.getUser())) .add("routingType", toString(queue.getRoutingType())) .add("messagesAdded", toString(queue.getMessagesAdded())) .add("messageCount", toString(queue.getMessageCount())) .add("messagesAcked", toString(queue.getMessagesAcknowledged())) .add("deliveringCount", toString(queue.getDeliveringCount())) .add("messagesKilled", toString(queue.getMessagesKilled())) .add("deliverDeliver", toString(q.isDirectDeliver())) .add("exclusive", toString(queue.isExclusive())) .add("lastValue", toString(queue.isLastValue())); return obj; }
context.getResult().set(control.getMessagesAdded()); } else if (JMSQueueDefinition.QUEUE_ADDRESS.getName().equals(attributeName)) { context.getResult().set(control.getAddress()); } else if (JMSQueueDefinition.EXPIRY_ADDRESS.getName().equals(attributeName)) {
context.getResult().set(control.getMessagesAdded()); } else if (JMSQueueDefinition.QUEUE_ADDRESS.getName().equals(attributeName)) { context.getResult().set(control.getAddress()); } else if (JMSQueueDefinition.EXPIRY_ADDRESS.getName().equals(attributeName)) {
context.getResult().set(control.getAddress()); } else if (DURABLE.getName().equals(attributeName)) { context.getResult().set(control.isDurable());
@Test public void testTempTopicLeak() throws Exception { Connection connection = null; try { connection = factory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); TemporaryTopic temporaryTopic = session.createTemporaryTopic(); temporaryTopic.delete(); Object[] queueResources = server.getManagementService().getResources(QueueControl.class); for (Object queueResource : queueResources) { if (((QueueControl) queueResource).getAddress().equals("ActiveMQ.Advisory.TempTopic")) { QueueControl queueControl = (QueueControl) queueResource; Wait.waitFor(() -> queueControl.getMessageCount() == 0); assertNotNull("addressControl for temp advisory", queueControl); Wait.assertEquals(0, queueControl::getMessageCount); Wait.assertEquals(2, queueControl::getMessagesAdded); } } } finally { if (connection != null) { connection.close(); } } }
@Test public void testTempQueueLeak() throws Exception { Connection connection = null; try { connection = factory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); TemporaryQueue temporaryQueue = session.createTemporaryQueue(); temporaryQueue.delete(); Object[] queueResources = server.getManagementService().getResources(QueueControl.class); for (Object queueResource : queueResources) { if (((QueueControl) queueResource).getAddress().equals("ActiveMQ.Advisory.TempQueue")) { QueueControl queueControl = (QueueControl) queueResource; Wait.waitFor(() -> queueControl.getMessageCount() == 0); assertNotNull("addressControl for temp advisory", queueControl); Wait.assertEquals(0, queueControl::getMessageCount); Wait.assertEquals(2, queueControl::getMessagesAdded); } } } finally { if (connection != null) { connection.close(); } } }
return queue.getName(); case "address": return queue.getAddress(); case "filter": return queue.getFilter();
@Test public void testAttributes() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); SimpleString filter = new SimpleString("color = 'blue'"); session.createQueue(address, RoutingType.MULTICAST, queue, filter, durable); QueueControl queueControl = createManagementControl(address, queue); Assert.assertEquals(queue.toString(), queueControl.getName()); Assert.assertEquals(address.toString(), queueControl.getAddress()); Assert.assertEquals(filter.toString(), queueControl.getFilter()); Assert.assertEquals(durable, queueControl.isDurable()); Assert.assertFalse(queueControl.isTemporary()); session.deleteQueue(queue); }
@Test public void testCreateQueueWithNullAddress() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString name = address; ActiveMQServerControl serverControl = createManagementControl(); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); serverControl.createQueue(null, name.toString(), "ANYCAST"); checkResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(name, name, RoutingType.ANYCAST)); QueueControl queueControl = ManagementControlHelper.createQueueControl(address, name, RoutingType.ANYCAST, mbeanServer); Assert.assertEquals(address.toString(), queueControl.getAddress()); Assert.assertEquals(name.toString(), queueControl.getName()); Assert.assertNull(queueControl.getFilter()); Assert.assertEquals(true, queueControl.isDurable()); Assert.assertEquals(false, queueControl.isTemporary()); serverControl.destroyQueue(name.toString()); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); }
@Test public void testCreateAndDestroyQueue() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString name = RandomUtil.randomSimpleString(); ActiveMQServerControl serverControl = createManagementControl(); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); serverControl.createAddress(address.toString(), "ANYCAST"); serverControl.createQueue(address.toString(), "ANYCAST", name.toString(), null, true, -1, false, false); checkResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); QueueControl queueControl = ManagementControlHelper.createQueueControl(address, name, RoutingType.ANYCAST, mbeanServer); Assert.assertEquals(address.toString(), queueControl.getAddress()); Assert.assertEquals(name.toString(), queueControl.getName()); Assert.assertNull(queueControl.getFilter()); Assert.assertEquals(true, queueControl.isDurable()); Assert.assertEquals(false, queueControl.isTemporary()); serverControl.destroyQueue(name.toString()); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); }
@Test public void testCreateAndDestroyQueueWithEmptyStringForFilter() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString name = RandomUtil.randomSimpleString(); String filter = ""; 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(), filter, durable, -1, false, false); checkResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); QueueControl queueControl = ManagementControlHelper.createQueueControl(address, name, RoutingType.ANYCAST, mbeanServer); Assert.assertEquals(address.toString(), queueControl.getAddress()); Assert.assertEquals(name.toString(), queueControl.getName()); Assert.assertNull(queueControl.getFilter()); Assert.assertEquals(durable, queueControl.isDurable()); Assert.assertEquals(false, queueControl.isTemporary()); serverControl.destroyQueue(name.toString()); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); }
@Test public void testCreateAndDestroyQueue_3() 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); checkResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); QueueControl queueControl = ManagementControlHelper.createQueueControl(address, name, RoutingType.ANYCAST, mbeanServer); Assert.assertEquals(address.toString(), queueControl.getAddress()); Assert.assertEquals(name.toString(), queueControl.getName()); Assert.assertNull(queueControl.getFilter()); Assert.assertEquals(durable, queueControl.isDurable()); Assert.assertEquals(false, queueControl.isTemporary()); serverControl.destroyQueue(name.toString()); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); }
@Test public void testCreateAndDestroyQueueWithNullFilter() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString name = RandomUtil.randomSimpleString(); String filter = null; 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(), filter, durable, -1, false, false); checkResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); QueueControl queueControl = ManagementControlHelper.createQueueControl(address, name, RoutingType.ANYCAST, mbeanServer); Assert.assertEquals(address.toString(), queueControl.getAddress()); Assert.assertEquals(name.toString(), queueControl.getName()); Assert.assertNull(queueControl.getFilter()); Assert.assertEquals(durable, queueControl.isDurable()); Assert.assertEquals(false, queueControl.isTemporary()); serverControl.destroyQueue(name.toString()); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); }
@Test public void testCreateAndDestroyQueue_2() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString name = RandomUtil.randomSimpleString(); String filter = "color = 'green'"; 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(), filter, durable, -1, false, false); checkResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); QueueControl queueControl = ManagementControlHelper.createQueueControl(address, name, RoutingType.ANYCAST, mbeanServer); Assert.assertEquals(address.toString(), queueControl.getAddress()); Assert.assertEquals(name.toString(), queueControl.getName()); Assert.assertEquals(filter, queueControl.getFilter()); Assert.assertEquals(durable, queueControl.isDurable()); Assert.assertEquals(false, queueControl.isTemporary()); serverControl.destroyQueue(name.toString()); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); }
return matches(queue.getMaxConsumers()); case ADDRESS: return matches(queue.getAddress()); case FILTER: return matches(queue.getFilter());
@Test public void testCreateAndDestroyQueue_4() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString name = RandomUtil.randomSimpleString(); boolean durable = RandomUtil.randomBoolean(); boolean purgeOnNoConsumers = RandomUtil.randomBoolean(); boolean autoCreateAddress = true; int maxConsumers = RandomUtil.randomInt(); ActiveMQServerControl serverControl = createManagementControl(); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); serverControl.createQueue(address.toString(), RoutingType.ANYCAST.toString(), name.toString(), null, durable, maxConsumers, purgeOnNoConsumers, autoCreateAddress); checkResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); QueueControl queueControl = ManagementControlHelper.createQueueControl(address, name, RoutingType.ANYCAST, mbeanServer); Assert.assertEquals(address.toString(), queueControl.getAddress()); Assert.assertEquals(name.toString(), queueControl.getName()); Assert.assertNull(queueControl.getFilter()); Assert.assertEquals(durable, queueControl.isDurable()); Assert.assertEquals(purgeOnNoConsumers, queueControl.isPurgeOnNoConsumers()); Assert.assertEquals(maxConsumers, queueControl.getMaxConsumers()); Assert.assertEquals(false, queueControl.isTemporary()); checkResource(ObjectNameBuilder.DEFAULT.getAddressObjectName(address)); AddressControl addressControl = ManagementControlHelper.createAddressControl(address, mbeanServer); Assert.assertEquals(address.toString(), addressControl.getAddress()); serverControl.destroyQueue(name.toString(), true, true); checkNoResource(ObjectNameBuilder.DEFAULT.getQueueObjectName(address, name, RoutingType.ANYCAST)); checkNoResource(ObjectNameBuilder.DEFAULT.getAddressObjectName(address)); }