From 43e2083f41206a88e28ead45cbfb97283f81b60d Mon Sep 17 00:00:00 2001 From: Christian Posta Date: Fri, 25 Jan 2013 19:50:15 +0000 Subject: [PATCH] Fix Type --> type and BrokerName --> brokerName in RemoteJMXBrokerFacade + Test, related to https://issues.apache.org/jira/browse/AMQ-4237 git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1438666 13f79535-47bb-0310-9956-ffa450edef68 --- activemq-web/pom.xml | 5 ++ .../activemq/web/RemoteJMXBrokerFacade.java | 6 +- .../activemq/web/RemoteJMXBrokerTest.java | 85 +++++++++++++++++++ 3 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 activemq-web/src/test/java/org/apache/activemq/web/RemoteJMXBrokerTest.java diff --git a/activemq-web/pom.xml b/activemq-web/pom.xml index f28c0cb1c0..2d56f0837e 100755 --- a/activemq-web/pom.xml +++ b/activemq-web/pom.xml @@ -121,5 +121,10 @@ junit test + + org.slf4j + slf4j-log4j12 + test + \ No newline at end of file diff --git a/activemq-web/src/main/java/org/apache/activemq/web/RemoteJMXBrokerFacade.java b/activemq-web/src/main/java/org/apache/activemq/web/RemoteJMXBrokerFacade.java index 1ead437968..362c4c0fff 100644 --- a/activemq-web/src/main/java/org/apache/activemq/web/RemoteJMXBrokerFacade.java +++ b/activemq-web/src/main/java/org/apache/activemq/web/RemoteJMXBrokerFacade.java @@ -197,10 +197,10 @@ public class RemoteJMXBrokerFacade extends BrokerFacadeSupport { throws IOException, MalformedObjectNameException { ObjectName name; if (this.brokerName == null) { - name = new ObjectName("org.apache.activemq:Type=Broker,*"); + name = new ObjectName("org.apache.activemq:type=Broker,*"); } else { - name = new ObjectName("org.apache.activemq:BrokerName=" - + this.brokerName + ",Type=Broker"); + name = new ObjectName("org.apache.activemq:brokerName=" + + this.brokerName + ",Type=broker"); } Set brokers = connection.queryNames(name, null); diff --git a/activemq-web/src/test/java/org/apache/activemq/web/RemoteJMXBrokerTest.java b/activemq-web/src/test/java/org/apache/activemq/web/RemoteJMXBrokerTest.java new file mode 100644 index 0000000000..bb3b8c7eb4 --- /dev/null +++ b/activemq-web/src/test/java/org/apache/activemq/web/RemoteJMXBrokerTest.java @@ -0,0 +1,85 @@ +/** + * 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.web; + +import org.apache.activemq.broker.BrokerFactory; +import org.apache.activemq.broker.BrokerService; +import org.apache.activemq.broker.jmx.ManagementContext; +import org.apache.activemq.web.config.SystemPropertiesConfiguration; +import org.junit.Before; +import org.junit.Test; + +import javax.management.ObjectName; +import javax.management.remote.JMXConnectorServer; +import java.lang.reflect.Field; +import java.util.Set; + +import static org.junit.Assert.assertEquals; + +/** + * @author Christian Posta + * + * You can use this class to connect up to a running web console and run some queries. + * Used to work through https://issues.apache.org/jira/browse/AMQ-4272 but would be useful + * in any scenario where you need access to the underlying broker in the web-console to hack + * at it + * + */ +public class RemoteJMXBrokerTest { + + + private BrokerService brokerService; + + @Before + public void startUp() throws Exception { + brokerService = BrokerFactory.createBroker("broker:()/remoteBroker?useJmx=true"); + brokerService.start(); + brokerService.waitUntilStarted(); + + } + + /** + * Test that we can query the remote broker... + * Specifically this tests that the domain and objectnames are correct (type and brokerName + * instead of Type and BrokerName, which they were) + * @throws Exception + */ + @Test + public void testConnectRemoteBrokerFacade() throws Exception { + String jmxUri = getJmxUri(); + System.setProperty("webconsole.jmx.url", jmxUri); + RemoteJMXBrokerFacade brokerFacade = new RemoteJMXBrokerFacade(); + + SystemPropertiesConfiguration configuration = new SystemPropertiesConfiguration(); + brokerFacade.setConfiguration(configuration); + + ObjectName query = new ObjectName("org.apache.activemq:type=Broker,brokerName=remoteBroker"); + Set queryResult = brokerFacade.queryNames(query, null); + + System.out.println("Number: " + queryResult.size()); + assertEquals(1, queryResult.size()); + + } + + + public String getJmxUri() throws NoSuchFieldException, IllegalAccessException { + Field field = ManagementContext.class.getDeclaredField("connectorServer"); + field.setAccessible(true); + JMXConnectorServer server = (JMXConnectorServer) field.get(brokerService.getManagementContext()); + return server.getAddress().toString(); + } +}