You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by de...@apache.org on 2009/03/09 13:03:16 UTC
svn commit: r751656 - in /activemq/trunk:
activemq-web-console/src/main/resources/
activemq-web-console/src/main/webapp/
activemq-web-console/src/main/webapp/WEB-INF/
activemq-web-console/src/main/webapp/WEB-INF/tags/jms/
activemq-web-console/src/main/...
Author: dejanb
Date: Mon Mar 9 12:03:14 2009
New Revision: 751656
URL: http://svn.apache.org/viewvc?rev=751656&view=rev
Log:
fix for https://issues.apache.org/activemq/browse/AMQ-1324
Added:
activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/tags/jms/forEachConnection.tag
activemq/trunk/activemq-web-console/src/main/webapp/connection.jsp
activemq/trunk/activemq-web-console/src/main/webapp/connections.jsp
activemq/trunk/activemq-web-console/src/main/webapp/queueConsumers.jsp
activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/ConnectionQuery.java
activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/QueueConsumerQuery.java
activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/
activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/AbstractConfiguration.java
activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/JNDIConfiguration.java
activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/SystemPropertiesConfiguration.java
activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/WebConsoleConfiguration.java
Modified:
activemq/trunk/activemq-web-console/src/main/resources/log4j.properties
activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-embedded.xml
activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-invm.xml
activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-jndi.xml
activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-properties.xml
activemq/trunk/activemq-web-console/src/main/webapp/browse.jsp
activemq/trunk/activemq-web-console/src/main/webapp/decorators/main.jsp
activemq/trunk/activemq-web-console/src/main/webapp/index.jsp
activemq/trunk/activemq-web-console/src/main/webapp/queues.jsp
activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacade.java
activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacadeSupport.java
activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/LocalBrokerFacade.java
activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/RemoteJMXBrokerFacade.java
activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/WebClient.java
activemq/trunk/assembly/src/release/webapps/admin/WEB-INF/webconsole-embedded.xml
Modified: activemq/trunk/activemq-web-console/src/main/resources/log4j.properties
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/resources/log4j.properties?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/resources/log4j.properties (original)
+++ activemq/trunk/activemq-web-console/src/main/resources/log4j.properties Mon Mar 9 12:03:14 2009
@@ -18,8 +18,9 @@
#
# The logging properties used during tests..
#
-log4j.rootLogger=DEBUG, stdout
+log4j.rootLogger=INFO, stdout
+log4j.logger.org.apache.activemq=INFO
log4j.logger.org.apache.activemq.spring=WARN
log4j.logger.org.springframework=warn
Added: activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/tags/jms/forEachConnection.tag
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/tags/jms/forEachConnection.tag?rev=751656&view=auto
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/tags/jms/forEachConnection.tag (added)
+++ activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/tags/jms/forEachConnection.tag Mon Mar 9 12:03:14 2009
@@ -0,0 +1,35 @@
+<%--
+ 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.
+--%>
+<%@ attribute name="connection" type="java.lang.String" required="true" %>
+<%@ attribute name="connectionName" type="java.lang.String" required="true" %>
+<%@ attribute name="broker" type="org.apache.activemq.web.BrokerFacade" required="true" %>
+<%@ attribute name="connectorName" type="java.lang.String" required="true" %>
+<%@ tag import="java.util.Iterator" %>
+<%@ tag import="org.apache.activemq.broker.jmx.ConnectionViewMBean" %>
+<%
+ Iterator it = broker.getConnections(connectorName).iterator();
+ while (it.hasNext()) {
+ String conName = (String) it.next();
+ ConnectionViewMBean con = broker.getConnection(conName);
+ request.setAttribute(connectionName, conName);
+ request.setAttribute(connection, con);
+%>
+<jsp:doBody/>
+<%
+ }
+%>
+
Modified: activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-embedded.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-embedded.xml?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-embedded.xml (original)
+++ activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-embedded.xml Mon Mar 9 12:03:14 2009
@@ -40,5 +40,7 @@
<bean id="queueBrowser" class="org.apache.activemq.web.QueueBrowseQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
<bean id="messageQuery" class="org.apache.activemq.web.MessageQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
+ <bean id="queueConsumerQuery" class="org.apache.activemq.web.QueueConsumerQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
+ <bean id="connectionQuery" class="org.apache.activemq.web.ConnectionQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
</beans>
Modified: activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-invm.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-invm.xml?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-invm.xml (original)
+++ activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-invm.xml Mon Mar 9 12:03:14 2009
@@ -39,5 +39,7 @@
<bean id="queueBrowser" class="org.apache.activemq.web.QueueBrowseQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
<bean id="messageQuery" class="org.apache.activemq.web.MessageQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
+ <bean id="queueConsumerQuery" class="org.apache.activemq.web.QueueConsumerQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
+ <bean id="connectionQuery" class="org.apache.activemq.web.ConnectionQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
</beans>
Modified: activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-jndi.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-jndi.xml?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-jndi.xml (original)
+++ activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-jndi.xml Mon Mar 9 12:03:14 2009
@@ -27,20 +27,17 @@
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
+ <bean id="configuration" class="org.apache.activemq.web.config.JNDIConfiguration"/>
+
<bean id="brokerQuery" class="org.apache.activemq.web.RemoteJMXBrokerFacade" autowire="constructor" destroy-method="shutdown">
- <property name="jmxUrl" ref="jmxUrl"/>
+ <property name="configuration" ref="configuration"/>
<property name="brokerName"><null/></property>
</bean>
- <bean id="jmxUrl" class="org.springframework.jndi.JndiObjectFactoryBean">
- <property name="jndiName" value="java:comp/env/jmx/url" />
- </bean>
- <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
- <property name="jndiName" value="java:comp/env/jms/connectionFactory" />
- </bean>
-
+ <bean id="connectionFactory" factory-bean="configuration" factory-method="getConnectionFactory"/>
<bean id="queueBrowser" class="org.apache.activemq.web.QueueBrowseQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
<bean id="messageQuery" class="org.apache.activemq.web.MessageQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
-
+ <bean id="queueConsumerQuery" class="org.apache.activemq.web.QueueConsumerQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
+ <bean id="connectionQuery" class="org.apache.activemq.web.ConnectionQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
</beans>
Modified: activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-properties.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-properties.xml?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-properties.xml (original)
+++ activemq/trunk/activemq-web-console/src/main/webapp/WEB-INF/webconsole-properties.xml Mon Mar 9 12:03:14 2009
@@ -26,20 +26,19 @@
<bean id="sessionPool" class="org.apache.activemq.web.SessionPool">
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
+
+ <bean id="configuration" class="org.apache.activemq.web.config.SystemPropertiesConfiguration"/>
<bean id="brokerQuery" class="org.apache.activemq.web.RemoteJMXBrokerFacade" autowire="constructor" destroy-method="shutdown">
- <property name="jmxUrl" value="${webconsole.jmx.url}"/>
- <property name="jmxRole" value="${webconsole.jmx.role}"/>
- <property name="jmxPassword" value="${webconsole.jmx.password}"/>
+ <property name="configuration" ref="configuration"/>
<property name="brokerName"><null/></property>
</bean>
- <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
- <property name="brokerURL" value="${webconsole.jms.url}"/>
- </bean>
-
+ <bean id="connectionFactory" factory-bean="configuration" factory-method="getConnectionFactory"/>
<bean id="queueBrowser" class="org.apache.activemq.web.QueueBrowseQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
<bean id="messageQuery" class="org.apache.activemq.web.MessageQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
+ <bean id="queueConsumerQuery" class="org.apache.activemq.web.QueueConsumerQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
+ <bean id="connectionQuery" class="org.apache.activemq.web.ConnectionQuery" autowire="constructor" destroy-method="destroy" scope="request"/>
</beans>
Modified: activemq/trunk/activemq-web-console/src/main/webapp/browse.jsp
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/webapp/browse.jsp?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/webapp/browse.jsp (original)
+++ activemq/trunk/activemq-web-console/src/main/webapp/browse.jsp Mon Mar 9 12:03:14 2009
@@ -37,9 +37,6 @@
</tr>
</thead>
<tbody>
-<%--
-<c:forEach items="${requestContext.queueBrowser.browser.enumeration}" var="row">
----%>
<jms:forEachMessage queueBrowser="${requestContext.queueBrowser.browser}" var="row">
<tr>
<td><a href="message.jsp?id=${row.JMSMessageID}&JMSDestination=${requestContext.queueBrowser.JMSDestination}"
@@ -56,13 +53,12 @@
</td>
</tr>
</jms:forEachMessage>
-<%--
-</c:forEach>
---%>
</tbody>
</table>
-
+<div>
+<a href="queueConsumers.jsp?JMSDestination=${requestContext.queueBrowser.JMSDestination}">View Consumers</a>
+</div>
</body>
</html>
Added: activemq/trunk/activemq-web-console/src/main/webapp/connection.jsp
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/webapp/connection.jsp?rev=751656&view=auto
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/webapp/connection.jsp (added)
+++ activemq/trunk/activemq-web-console/src/main/webapp/connection.jsp Mon Mar 9 12:03:14 2009
@@ -0,0 +1,150 @@
+<%--
+ 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.
+--%>
+<html>
+<head>
+<c:set var="row" value="${requestContext.connectionQuery.connection}"/>
+<title>Connection ${requestContext.connectionQuery.connectionID}</title>
+</head>
+<body>
+
+
+<c:choose>
+<c:when test="${empty row}">
+
+<div>
+No connection could be found for ID ${requestContext.connectionQuery.connectionID}
+</div>
+
+</c:when>
+
+<c:otherwise>
+
+<h2>Connection ${requestContext.connectionQuery.connectionID}</h2>
+
+<table id="header" class="sortable autostripe">
+ <tbody>
+ <tr>
+ <td class="label" title="Unique ID for this connection">Connection ID</td>
+ <td>${requestContext.connectionQuery.connectionID}</td>
+ </tr>
+ <tr>
+ <td class="label" tite="Hostname and port of the connected party">Remote Address</td>
+ <td>${row.remoteAddress}</td>
+ </tr>
+ <tr>
+ <td class="label">Active</td>
+ <td>${row.active}</td>
+ </tr>
+ <tr>
+ <td class="label">Connected</td>
+ <td>${row.connected}</td>
+ </tr>
+ <tr>
+ <td class="label">Blocked</td>
+ <td>${row.blocked}</td>
+ </tr>
+ <tr>
+ <td class="label">Slow</td>
+ <td>${row.slow}</td>
+ </tr>
+ <tr>
+ <td class="label">Enqueue Count</td>
+ <td>${row.enqueueCount}</td>
+ </tr>
+ <tr>
+ <td class="label">Dequeue Count</td>
+ <td>${row.dequeueCount}</td>
+ </tr>
+ <tr>
+ <td class="label">Dispatch Queue Size</td>
+ <td>${row.dispatchQueueSize}</td>
+ </tr>
+ </tbody>
+</table>
+
+
+
+<h3>Consumers</h3>
+
+<table id="messages" class="sortable autostripe">
+<thead>
+<tr>
+ <th>Destination</th>
+ <th>SessionId</th>
+ <th>Selector</th>
+ <th>Enqueues</th>
+ <th>Dequeues</th>
+ <th>Dispatched</th>
+ <th>Dispatched Queue</th>
+ <th>
+ <span>Prefetch</span>
+ <br/>
+ <span>Max pending</span>
+ </th>
+ <th>
+ <span>Exclusive</span>
+ <br/>
+ <span>Retroactive</span>
+ </th>
+</tr>
+</thead>
+<tbody>
+<c:forEach items="${requestContext.connectionQuery.consumers}" var="consumer">
+<tr>
+ <td>
+ <c:choose>
+ <c:when test="${consumer.destinationQueue}">
+ Queue <a href="browse.jsp?JMSDestination=${consumer.destinationName}">${consumer.destinationName}</a>
+ </c:when>
+ <c:when test="${consumer.destinationTopic}">
+ Topic <a href="send.jsp?JMSDestination=${consumer.destinationName}">${consumer.destinationName}</a>
+ </c:when>
+ <c:otherwise>
+ ${consumer.destinationName}
+ </c:otherwise>
+ </c:choose>
+ </td>
+ <td>${consumer.sessionId}</td>
+ <td>${consumer.selector}</td>
+ <td>${consumer.enqueueCounter}</td>
+ <td>${consumer.dequeueCounter}</td>
+ <td>${consumer.dispachedCounter}</td>
+ <td>${consumer.dispatchedQueueSize}</td>
+ <td>
+ ${consumer.prefetchSize}<br/>
+ ${consumer.maximumPendingMessageLimit}
+ </td>
+ <td>
+ ${consumer.exclusive}<br/>
+ ${consumer.retroactive}
+ </td>
+</tr>
+</c:forEach>
+</tbody>
+</table>
+
+
+</c:otherwise>
+</c:choose>
+
+
+
+
+
+</body>
+</html>
+
\ No newline at end of file
Added: activemq/trunk/activemq-web-console/src/main/webapp/connections.jsp
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/webapp/connections.jsp?rev=751656&view=auto
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/webapp/connections.jsp (added)
+++ activemq/trunk/activemq-web-console/src/main/webapp/connections.jsp Mon Mar 9 12:03:14 2009
@@ -0,0 +1,91 @@
+<%--
+ 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.
+--%>
+<html>
+<head>
+<title>Connections</title>
+</head>
+<body>
+
+<h2>Connections</h2>
+
+<c:forEach items="${requestContext.brokerQuery.connectors}" var="connectorName">
+<h3>Connector ${connectorName}</h3>
+
+<table id="connections" class="sortable autostripe">
+<thead>
+<tr>
+ <th>Name</th>
+ <th>Remote Address</th>
+ <th>Enqueue Count</th>
+ <th>Dequeue Count</th>
+ <th>Dispatch Queue Size</th>
+ <th>Active</th>
+ <th>Slow</th>
+</tr>
+</thead>
+<tbody>
+<jms:forEachConnection broker="${requestContext.brokerQuery}" connectorName="${connectorName}"
+ connection="con" connectionName="conName">
+<tr>
+ <td><a href="connection.jsp?connectionID=${conName}">${conName}</a></td>
+ <td>${con.remoteAddress}</td>
+ <td>${con.enqueueCount}</td>
+ <td>${con.dequeueCount}</td>
+ <td>${con.dispatchQueueSize}</td>
+ <td>${con.active}</td>
+ <td>${con.slow}</td>
+</tr>
+</jms:forEachConnection>
+</tbody>
+</table>
+
+</c:forEach>
+
+<div style="margin-top: 5em">
+<h2>Network Connectors</h2>
+
+<table id="connections" class="sortable autostripe">
+<thead>
+<tr>
+ <th>Name</th>
+ <th>Network TTL</th>
+ <th>Dynamic Only</th>
+ <th>Conduit Subscriptions</th>
+ <th>Bridge Temps</th>
+ <th>Decrease Priorities</th>
+ <th>Dispatch Async</th>
+</tr>
+</thead>
+<tbody>
+<c:forEach items="${requestContext.brokerQuery.networkConnectors}" var="nc">
+<tr>
+ <td>${nc.name}</td>
+ <td>${nc.networkTTL}</td>
+ <td>${nc.dynamicOnly}</td>
+ <td>${nc.conduitSubscriptions}</td>
+ <td>${nc.bridgeTempDestinations}</td>
+ <td>${nc.decreaseNetworkConsumerPriority}</td>
+ <td>${nc.dispatchAsync}</td>
+</tr>
+</c:forEach>
+</tbody>
+</table>
+</div>
+
+</body>
+</html>
+
Modified: activemq/trunk/activemq-web-console/src/main/webapp/decorators/main.jsp
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/webapp/decorators/main.jsp?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/webapp/decorators/main.jsp (original)
+++ activemq/trunk/activemq-web-console/src/main/webapp/decorators/main.jsp Mon Mar 9 12:03:14 2009
@@ -72,6 +72,8 @@
|
<a href="<c:url value='/subscribers.jsp'/>" title="Subscribers">Subscribers</a>
|
+ <a href="<c:url value='/connections.jsp'/>" title="Connections">Connections</a>
+ |
<a href="<c:url value='/send.jsp'/>"
title="Send">Send</a>
</div>
Modified: activemq/trunk/activemq-web-console/src/main/webapp/index.jsp
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/webapp/index.jsp?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/webapp/index.jsp (original)
+++ activemq/trunk/activemq-web-console/src/main/webapp/index.jsp Mon Mar 9 12:03:14 2009
@@ -23,7 +23,7 @@
<h2>Welcome!</h2>
<p>
-Welcome to the ActiveMQ Console
+Welcome to the ActiveMQ Console of <b>${requestContext.brokerQuery.brokerName}</b> (${requestContext.brokerQuery.brokerAdmin.brokerId})
</p>
<p>
Added: activemq/trunk/activemq-web-console/src/main/webapp/queueConsumers.jsp
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/webapp/queueConsumers.jsp?rev=751656&view=auto
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/webapp/queueConsumers.jsp (added)
+++ activemq/trunk/activemq-web-console/src/main/webapp/queueConsumers.jsp Mon Mar 9 12:03:14 2009
@@ -0,0 +1,79 @@
+<%--
+ 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.
+--%>
+<html>
+<head>
+<title>Consumers for ${requestContext.queueConsumerQuery.JMSDestination}</title>
+</head>
+<body>
+
+<h2>Active Consumers for ${requestContext.queueConsumerQuery.JMSDestination}</h2>
+
+<table id="messages" class="sortable autostripe">
+<thead>
+<tr>
+ <th>
+ <span>Client ID</span>
+ <br/>
+ <span>Connection ID</span>
+ </th>
+ <th>SessionId</th>
+ <th>Selector</th>
+ <th>Enqueues</th>
+ <th>Dequeues</th>
+ <th>Dispatched</th>
+ <th>Dispatched Queue</th>
+ <th>
+ <span>Prefetch</span>
+ <br/>
+ <span>Max pending</span>
+ </th>
+ <th>
+ <span>Exclusive</span>
+ <br/>
+ <span>Retroactive</span>
+ </th>
+</tr>
+</thead>
+<tbody>
+<c:forEach items="${requestContext.queueConsumerQuery.consumers}" var="row">
+<tr>
+ <td>
+ <a href="connection.jsp?connectionID=${row.clientId}">${row.clientId}</a><br/>
+ ${row.connectionId}</a>
+ </td>
+ <td>${row.sessionId}</td>
+ <td>${row.selector}</td>
+ <td>${row.enqueueCounter}</td>
+ <td>${row.dequeueCounter}</td>
+ <td>${row.dispachedCounter}</td>
+ <td>${row.dispatchedQueueSize}</td>
+ <td>
+ ${row.prefetchSize}<br/>
+ ${row.maximumPendingMessageLimit}
+ </td>
+ <td>
+ ${row.exclusive}<br/>
+ ${row.retroactive}
+ </td>
+</tr>
+</c:forEach>
+</tbody>
+</table>
+
+</body>
+</html>
+
\ No newline at end of file
Modified: activemq/trunk/activemq-web-console/src/main/webapp/queues.jsp
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web-console/src/main/webapp/queues.jsp?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web-console/src/main/webapp/queues.jsp (original)
+++ activemq/trunk/activemq-web-console/src/main/webapp/queues.jsp Mon Mar 9 12:03:14 2009
@@ -56,9 +56,7 @@
<td>${row.dequeueCount}</td>
<td>
<a href="browse.jsp?JMSDestination=${row.name}">Browse</a>
-<%--
- <a href="graph.jsp?JMSDestination=${row.name}">Graph</a>
---%>
+ <a href="queueConsumers.jsp?JMSDestination=${row.name}">Active Consumers</a><br/>
<a href="queueBrowse/${row.name}?view=rss&feedType=atom_1.0" title="Atom 1.0"><img src="images/feed_atom.png"/></a>
<a href="queueBrowse/${row.name}?view=rss&feedType=rss_2.0" title="RSS 2.0"><img src="images/feed_rss.png"/></a>
</td>
Modified: activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacade.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacade.java?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacade.java (original)
+++ activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacade.java Mon Mar 9 12:03:14 2009
@@ -19,33 +19,163 @@
import java.util.Collection;
import org.apache.activemq.broker.jmx.BrokerViewMBean;
+import org.apache.activemq.broker.jmx.ConnectionViewMBean;
+import org.apache.activemq.broker.jmx.ConnectorViewMBean;
+import org.apache.activemq.broker.jmx.DurableSubscriptionViewMBean;
+import org.apache.activemq.broker.jmx.NetworkConnectorViewMBean;
import org.apache.activemq.broker.jmx.QueueViewMBean;
+import org.apache.activemq.broker.jmx.SubscriptionViewMBean;
import org.apache.activemq.broker.jmx.TopicViewMBean;
import org.apache.activemq.command.ActiveMQDestination;
/**
* A facade for either a local in JVM broker or a remote broker over JMX
*
+ *
* @version $Revision$
*/
public interface BrokerFacade {
- BrokerViewMBean getBrokerAdmin() throws Exception;
-
- Collection getQueues() throws Exception;
-
- Collection getTopics() throws Exception;
-
- Collection getDurableTopicSubscribers() throws Exception;
-
- /**
- * Purges the given destination
- * @param destination
- * @throws Exception
- */
- void purgeQueue(ActiveMQDestination destination) throws Exception;
-
- QueueViewMBean getQueue(String name) throws Exception;
-
- TopicViewMBean getTopic(String name) throws Exception;
-}
+ /**
+ * The name of the active broker (f.e. 'localhost' or 'my broker').
+ *
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ String getBrokerName() throws Exception;
+
+ /**
+ * Admin view of the broker.
+ *
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ BrokerViewMBean getBrokerAdmin() throws Exception;
+
+ /**
+ * All queues known to the broker.
+ *
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ Collection<QueueViewMBean> getQueues() throws Exception;
+
+ /**
+ * All topics known to the broker.
+ *
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ Collection<TopicViewMBean> getTopics() throws Exception;
+
+ /**
+ * All active consumers of a queue.
+ *
+ * @param queueName
+ * the name of the queue, not <code>null</code>
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ Collection<SubscriptionViewMBean> getQueueConsumers(String queueName)
+ throws Exception;
+
+ /**
+ * All durable subscribers to topics of the broker.
+ *
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ Collection<DurableSubscriptionViewMBean> getDurableTopicSubscribers()
+ throws Exception;
+
+ /**
+ * The names of all transport connectors of the broker (f.e. openwire, ssl)
+ *
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ Collection<String> getConnectors() throws Exception;
+
+ /**
+ * A transport connectors.
+ *
+ * @param name
+ * name of the connector (f.e. openwire)
+ * @return <code>null</code> if not found
+ * @throws Exception
+ */
+ ConnectorViewMBean getConnector(String name) throws Exception;
+
+ /**
+ * All connections to all transport connectors of the broker.
+ *
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ Collection<ConnectionViewMBean> getConnections() throws Exception;
+
+ /**
+ * The names of all connections to a specific transport connectors of the
+ * broker.
+ *
+ * @see #getConnection(String)
+ * @param connectorName
+ * not <code>null</code>
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ Collection<String> getConnections(String connectorName) throws Exception;
+
+ /**
+ * A specific connection to the broker.
+ *
+ * @param connectionName
+ * the name of the connection, not <code>null</code>
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ ConnectionViewMBean getConnection(String connectionName) throws Exception;
+ /**
+ * Returns all consumers of a connection.
+ *
+ * @param connectionName
+ * the name of the connection, not <code>null</code>
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ Collection<SubscriptionViewMBean> getConsumersOnConnection(
+ String connectionName) throws Exception;
+ /**
+ * The brokers network connectors.
+ *
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ Collection<NetworkConnectorViewMBean> getNetworkConnectors()
+ throws Exception;
+ /**
+ * Purges the given destination
+ *
+ * @param destination
+ * @throws Exception
+ */
+ void purgeQueue(ActiveMQDestination destination) throws Exception;
+ /**
+ * Get the view of the queue with the specified name.
+ *
+ * @param name
+ * not <code>null</code>
+ * @return <code>null</code> if no queue with this name exists
+ * @throws Exception
+ */
+ QueueViewMBean getQueue(String name) throws Exception;
+ /**
+ * Get the view of the topic with the specified name.
+ *
+ * @param name
+ * not <code>null</code>
+ * @return <code>null</code> if no topic with this name exists
+ * @throws Exception
+ */
+ TopicViewMBean getTopic(String name) throws Exception;
+}
\ No newline at end of file
Modified: activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacadeSupport.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacadeSupport.java?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacadeSupport.java (original)
+++ activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/BrokerFacadeSupport.java Mon Mar 9 12:03:14 2009
@@ -21,17 +21,24 @@
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import javax.management.MBeanServer;
+import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import org.apache.activemq.broker.jmx.BrokerViewMBean;
+import org.apache.activemq.broker.jmx.ConnectionViewMBean;
+import org.apache.activemq.broker.jmx.ConnectorViewMBean;
import org.apache.activemq.broker.jmx.DestinationViewMBean;
import org.apache.activemq.broker.jmx.DurableSubscriptionViewMBean;
import org.apache.activemq.broker.jmx.ManagementContext;
+import org.apache.activemq.broker.jmx.NetworkConnectorViewMBean;
import org.apache.activemq.broker.jmx.QueueViewMBean;
+import org.apache.activemq.broker.jmx.SubscriptionViewMBean;
import org.apache.activemq.broker.jmx.TopicViewMBean;
+import org.springframework.util.StringUtils;
/**
* A useful base class for an implementation of {@link BrokerFacade}
@@ -41,7 +48,7 @@
public abstract class BrokerFacadeSupport implements BrokerFacade {
public abstract ManagementContext getManagementContext();
- public Collection<Object> getQueues() throws Exception {
+ public Collection<QueueViewMBean> getQueues() throws Exception {
BrokerViewMBean broker = getBrokerAdmin();
if (broker == null) {
return Collections.EMPTY_LIST;
@@ -50,7 +57,7 @@
return getManagedObjects(queues, QueueViewMBean.class);
}
- public Collection<Object> getTopics() throws Exception {
+ public Collection<TopicViewMBean> getTopics() throws Exception {
BrokerViewMBean broker = getBrokerAdmin();
if (broker == null) {
return Collections.EMPTY_LIST;
@@ -59,7 +66,7 @@
return getManagedObjects(queues, TopicViewMBean.class);
}
- public Collection<Object> getDurableTopicSubscribers() throws Exception {
+ public Collection<DurableSubscriptionViewMBean> getDurableTopicSubscribers() throws Exception {
BrokerViewMBean broker = getBrokerAdmin();
if (broker == null) {
return Collections.EMPTY_LIST;
@@ -76,29 +83,162 @@
return (TopicViewMBean) getDestinationByName(getTopics(), name);
}
- protected DestinationViewMBean getDestinationByName(Collection<Object> collection, String name) {
- Iterator<Object> iter = collection.iterator();
- while (iter.hasNext()) {
- DestinationViewMBean destinationViewMBean = (DestinationViewMBean) iter.next();
- if (name.equals(destinationViewMBean.getName())) {
- return destinationViewMBean;
- }
- }
- return null;
- }
+ protected DestinationViewMBean getDestinationByName(
+ Collection<? extends DestinationViewMBean> collection, String name) {
+ Iterator<? extends DestinationViewMBean> iter = collection.iterator();
+ while (iter.hasNext()) {
+ DestinationViewMBean destinationViewMBean = iter.next();
+ if (name.equals(destinationViewMBean.getName())) {
+ return destinationViewMBean;
+ }
+ }
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected <T> Collection<T> getManagedObjects(ObjectName[] names,
+ Class<T> type) {
+ List<T> answer = new ArrayList<T>();
+ MBeanServer mbeanServer = getManagementContext().getMBeanServer();
+ if (mbeanServer != null) {
+ for (int i = 0; i < names.length; i++) {
+ ObjectName name = names[i];
+ T value = (T) MBeanServerInvocationHandler.newProxyInstance(
+ mbeanServer, name, type, true);
+ if (value != null) {
+ answer.add(value);
+ }
+ }
+ }
+ return answer;
+ }
+
+
+ /**
+ * Get the MBeanServer connection.
+ *
+ * @return not <code>null</code>
+ * @throws Exception
+ */
+ protected MBeanServerConnection getMBeanServerConnection() throws Exception {
+ return getManagementContext().getMBeanServer();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Collection<ConnectionViewMBean> getConnections() throws Exception {
+ MBeanServerConnection connection = getMBeanServerConnection();
+ String brokerName = getBrokerName();
+ ObjectName query = new ObjectName("org.apache.activemq:BrokerName="
+ + brokerName + ",Type=Connection,*");
+ System.out.println(query);
+ Set<ObjectName> queryResult = connection.queryNames(query, null);
+ return getManagedObjects(queryResult.toArray(new ObjectName[queryResult
+ .size()]), ConnectionViewMBean.class);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Collection<String> getConnections(String connectorName)
+ throws Exception {
+ MBeanServerConnection connection = getMBeanServerConnection();
+ String brokerName = getBrokerName();
+ ObjectName query = new ObjectName("org.apache.activemq:BrokerName="
+ + brokerName + ",Type=Connection,ConnectorName="
+ + connectorName + ",*");
+ Set<ObjectName> queryResult = connection.queryNames(query, null);
+
+ Collection<String> result = new ArrayList<String>(queryResult.size());
+ for (ObjectName on : queryResult) {
+ String name = StringUtils.replace(on.getKeyProperty("Connection"),
+ "_", ":");
+ result.add(name);
+ }
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ public ConnectionViewMBean getConnection(String connectionName)
+ throws Exception {
+ connectionName = StringUtils.replace(connectionName, ":", "_");
+
+ MBeanServerConnection connection = getMBeanServerConnection();
+ String brokerName = getBrokerName();
+ ObjectName query = new ObjectName("org.apache.activemq:BrokerName="
+ + brokerName + ",Type=Connection,*,Connection="
+ + connectionName);
+ Set<ObjectName> queryResult = connection.queryNames(query, null);
+ if (queryResult.size() == 0)
+ return null;
+ ObjectName objectName = queryResult.iterator().next();
+ return (ConnectionViewMBean) MBeanServerInvocationHandler
+ .newProxyInstance(connection, objectName,
+ ConnectionViewMBean.class, true);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Collection<String> getConnectors() throws Exception {
+ MBeanServerConnection connection = getMBeanServerConnection();
+ String brokerName = getBrokerName();
+ ObjectName query = new ObjectName("org.apache.activemq:BrokerName="
+ + brokerName + ",Type=Connector,*");
+ Set<ObjectName> queryResult = connection.queryNames(query, null);
+
+ Collection<String> result = new ArrayList<String>(queryResult.size());
+ for (ObjectName on : queryResult)
+ result.add(on.getKeyProperty("ConnectorName"));
+ return result;
+ }
+
+ public ConnectorViewMBean getConnector(String name) throws Exception {
+ MBeanServerConnection connection = getMBeanServerConnection();
+ String brokerName = getBrokerName();
+ ObjectName objectName = new ObjectName(
+ "org.apache.activemq:BrokerName=" + brokerName
+ + ",Type=Connector,ConnectorName=" + name);
+ return (ConnectorViewMBean) MBeanServerInvocationHandler
+ .newProxyInstance(connection, objectName,
+ ConnectorViewMBean.class, true);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Collection<NetworkConnectorViewMBean> getNetworkConnectors()
+ throws Exception {
+ MBeanServerConnection connection = getMBeanServerConnection();
+ String brokerName = getBrokerName();
+ ObjectName query = new ObjectName("org.apache.activemq:BrokerName="
+ + brokerName + ",Type=NetworkConnector,*");
+ Set<ObjectName> queryResult = connection.queryNames(query, null);
+ return getManagedObjects(queryResult.toArray(new ObjectName[queryResult
+ .size()]), NetworkConnectorViewMBean.class);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Collection<SubscriptionViewMBean> getQueueConsumers(String queueName)
+ throws Exception {
+ MBeanServerConnection connection = getMBeanServerConnection();
+ String brokerName = getBrokerName();
+ ObjectName query = new ObjectName("org.apache.activemq:BrokerName="
+ + brokerName
+ + ",Type=Subscription,destinationType=Queue,destinationName="
+ + queueName + ",*");
+ Set<ObjectName> queryResult = connection.queryNames(query, null);
+ return getManagedObjects(queryResult.toArray(new ObjectName[queryResult
+ .size()]), SubscriptionViewMBean.class);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Collection<SubscriptionViewMBean> getConsumersOnConnection(
+ String connectionName) throws Exception {
+ connectionName = StringUtils.replace(connectionName, ":", "_");
+
+ MBeanServerConnection connection = getMBeanServerConnection();
+ String brokerName = getBrokerName();
+ ObjectName query = new ObjectName("org.apache.activemq:BrokerName="
+ + brokerName + ",Type=Subscription,clientId=" + connectionName
+ + ",*");
+ Set<ObjectName> queryResult = connection.queryNames(query, null);
+ return getManagedObjects(queryResult.toArray(new ObjectName[queryResult
+ .size()]), SubscriptionViewMBean.class);
+ }
+
- protected Collection<Object> getManagedObjects(ObjectName[] names, Class type) {
- List<Object> answer = new ArrayList<Object>();
- MBeanServer mbeanServer = getManagementContext().getMBeanServer();
- if (mbeanServer != null) {
- for (int i = 0; i < names.length; i++) {
- ObjectName name = names[i];
- Object value = MBeanServerInvocationHandler.newProxyInstance(mbeanServer, name, type, true);
- if (value != null) {
- answer.add(value);
- }
- }
- }
- return answer;
- }
}
Added: activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/ConnectionQuery.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/ConnectionQuery.java?rev=751656&view=auto
==============================================================================
--- activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/ConnectionQuery.java (added)
+++ activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/ConnectionQuery.java Mon Mar 9 12:03:14 2009
@@ -0,0 +1,49 @@
+package org.apache.activemq.web;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import org.apache.activemq.broker.jmx.ConnectionViewMBean;
+import org.apache.activemq.broker.jmx.SubscriptionViewMBean;
+
+/**
+ * Query for a single connection.
+ *
+ * @author ms
+ */
+public class ConnectionQuery {
+
+ private final BrokerFacade mBrokerFacade;
+ private String mConnectionID;
+
+ public ConnectionQuery(BrokerFacade brokerFacade) {
+ mBrokerFacade = brokerFacade;
+ }
+
+ public void destroy() {
+ // empty
+ }
+
+ public void setConnectionID(String connectionID) {
+ mConnectionID = connectionID;
+ }
+
+ public String getConnectionID() {
+ return mConnectionID;
+ }
+
+ public ConnectionViewMBean getConnection() throws Exception {
+ String connectionID = getConnectionID();
+ if (connectionID == null)
+ return null;
+ return mBrokerFacade.getConnection(connectionID);
+ }
+
+ public Collection<SubscriptionViewMBean> getConsumers() throws Exception {
+ String connectionID = getConnectionID();
+ if (connectionID == null)
+ return Collections.emptyList();
+ return mBrokerFacade.getConsumersOnConnection(connectionID);
+ }
+
+}
\ No newline at end of file
Modified: activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/LocalBrokerFacade.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/LocalBrokerFacade.java?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/LocalBrokerFacade.java (original)
+++ activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/LocalBrokerFacade.java Mon Mar 9 12:03:14 2009
@@ -34,36 +34,34 @@
* @version $Revision$
*/
public class LocalBrokerFacade extends BrokerFacadeSupport {
- private BrokerService brokerService;
+ private BrokerService brokerService;
- public LocalBrokerFacade(BrokerService brokerService) {
- this.brokerService = brokerService;
- }
-
- public BrokerService getBrokerService() {
- return brokerService;
- }
-
- public Broker getBroker() throws Exception {
- return brokerService.getBroker();
- }
-
- public ManagementContext getManagementContext() {
- return brokerService.getManagementContext();
- }
-
- public BrokerViewMBean getBrokerAdmin() throws Exception {
- // TODO could use JMX to look this up
- return brokerService.getAdminView();
- }
-
- public ManagedRegionBroker getManagedBroker() throws Exception {
- BrokerView adminView = brokerService.getAdminView();
- if (adminView == null) {
- return null;
- }
- return adminView.getBroker();
- }
+ public LocalBrokerFacade(BrokerService brokerService) {
+ this.brokerService = brokerService;
+ }
+
+ public BrokerService getBrokerService() {
+ return brokerService;
+ }
+ public String getBrokerName() throws Exception {
+ return brokerService.getBrokerName();
+ }
+ public Broker getBroker() throws Exception {
+ return brokerService.getBroker();
+ }
+ public ManagementContext getManagementContext() {
+ return brokerService.getManagementContext();
+ }
+ public BrokerViewMBean getBrokerAdmin() throws Exception {
+ return brokerService.getAdminView();
+ }
+ public ManagedRegionBroker getManagedBroker() throws Exception {
+ BrokerView adminView = brokerService.getAdminView();
+ if (adminView == null) {
+ return null;
+ }
+ return adminView.getBroker();
+ }
public void purgeQueue(ActiveMQDestination destination) throws Exception {
Set destinations = getManagedBroker().getQueueRegion().getDestinations(destination);
@@ -72,4 +70,5 @@
regionQueue.purge();
}
}
+
}
Added: activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/QueueConsumerQuery.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/QueueConsumerQuery.java?rev=751656&view=auto
==============================================================================
--- activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/QueueConsumerQuery.java (added)
+++ activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/QueueConsumerQuery.java Mon Mar 9 12:03:14 2009
@@ -0,0 +1,45 @@
+/*
+ * 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 java.util.Collection;
+
+import javax.jms.JMSException;
+
+import org.apache.activemq.broker.jmx.SubscriptionViewMBean;
+
+/**
+ * Query for Queue consumers.
+ *
+ * @version $Revision: 504235 $
+ */
+public class QueueConsumerQuery extends DestinationFacade {
+
+ public QueueConsumerQuery(BrokerFacade brokerFacade) throws JMSException {
+ super(brokerFacade);
+ setJMSDestinationType("queue");
+ }
+
+ public Collection<SubscriptionViewMBean> getConsumers() throws Exception {
+ return getBrokerFacade().getQueueConsumers(getJMSDestination());
+ }
+
+ public void destroy() {
+ // empty
+ }
+
+}
\ No newline at end of file
Modified: activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/RemoteJMXBrokerFacade.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/RemoteJMXBrokerFacade.java?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/RemoteJMXBrokerFacade.java (original)
+++ activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/RemoteJMXBrokerFacade.java Mon Mar 9 12:03:14 2009
@@ -21,6 +21,7 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import javax.management.MBeanServerConnection;
@@ -35,6 +36,7 @@
import org.apache.activemq.broker.jmx.ManagementContext;
import org.apache.activemq.broker.jmx.QueueViewMBean;
import org.apache.activemq.command.ActiveMQDestination;
+import org.apache.activemq.web.config.WebConsoleConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -48,34 +50,30 @@
private static final transient Log LOG = LogFactory.getLog(RemoteJMXBrokerFacade.class);
- private String jmxUrl;
- private String jmxRole;
- private String jmxPassword;
private String brokerName;
private JMXConnector connector;
+ private WebConsoleConfiguration configuration;
public void setBrokerName(String brokerName) {
this.brokerName = brokerName;
}
- public void setJmxUrl(String url) {
- this.jmxUrl = url;
- }
-
- public void setJmxRole(String role) {
- this.jmxRole = role;
- }
-
- public void setJmxPassword(String password) {
- this.jmxPassword = password;
- }
-
/**
* Shutdown this facade aka close any open connection.
*/
public void shutdown() {
closeConnection();
}
+
+ private ObjectName getBrokerObjectName(MBeanServerConnection connection)
+ throws IOException, MalformedObjectNameException {
+ Set<ObjectName> brokers = findBrokers(connection);
+ if (brokers.size() == 0) {
+ throw new IOException("No broker could be found in the JMX.");
+ }
+ ObjectName name = brokers.iterator().next();
+ return name;
+ }
public BrokerViewMBean getBrokerAdmin() throws Exception {
MBeanServerConnection connection = getConnection();
@@ -89,6 +87,14 @@
return mbean;
}
+ public String getBrokerName() throws Exception,
+ MalformedObjectNameException {
+ MBeanServerConnection connection = getMBeanServerConnection();
+ ObjectName brokerObjectName = getBrokerObjectName(connection);
+ String brokerName = brokerObjectName.getKeyProperty("BrokerName");
+ return brokerName;
+ }
+
protected MBeanServerConnection getConnection() throws IOException {
JMXConnector connector = this.connector;
if (isConnectionActive(connector)) {
@@ -119,44 +125,43 @@
}
protected JMXConnector createConnection() {
- String[] urls = this.jmxUrl.split(",");
- HashMap env = new HashMap();
- env.put("jmx.remote.credentials", new String[] {
- this.jmxRole, this.jmxPassword
- });
-
- if (urls == null || urls.length == 0) {
- urls = new String[] {
- this.jmxUrl
- };
- }
+
+ Map<String, Object> env = new HashMap<String, Object>();
+ if (this.configuration.getJmxUser() != null) {
+ env.put("jmx.remote.credentials", new String[] {
+ this.configuration.getJmxUser(),
+ this.configuration.getJmxPassword() });
+ }
+ Collection<JMXServiceURL> jmxUrls = this.configuration.getJmxUrls();
Exception exception = null;
- for (int i = 0; i < urls.length; i++) {
- try {
- JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(urls[i]), env);
- connector.connect();
- MBeanServerConnection connection = connector.getMBeanServerConnection();
-
- Set brokers = findBrokers(connection);
- if (brokers.size() > 0) {
- LOG.info("Connected via JMX to the broker at " + urls[i]);
- return connector;
- }
- } catch (Exception e) {
- // Keep the exception for later
- exception = e;
- }
- }
- if (exception != null) {
- if (exception instanceof RuntimeException) {
- throw (RuntimeException)exception;
- } else {
- throw new RuntimeException(exception);
- }
- }
- throw new IllegalStateException("No broker is found at any of the urls " + this.jmxUrl);
- }
+ for (JMXServiceURL url : jmxUrls) {
+ try {
+ JMXConnector connector = JMXConnectorFactory.connect(url, env);
+ connector.connect();
+ MBeanServerConnection connection = connector
+ .getMBeanServerConnection();
+
+ Set<ObjectName> brokers = findBrokers(connection);
+ if (brokers.size() > 0) {
+ LOG.info("Connected via JMX to the broker at " + url);
+ return connector;
+ }
+ } catch (Exception e) {
+ // Keep the exception for later
+ exception = e;
+ }
+ }
+ if (exception != null) {
+ if (exception instanceof RuntimeException) {
+ throw (RuntimeException) exception;
+ } else {
+ throw new RuntimeException(exception);
+ }
+ }
+ throw new IllegalStateException("No broker is found at any of the "
+ + jmxUrls.size() + " configured urls");
+ }
protected synchronized void closeConnection() {
if (connector != null) {
@@ -171,55 +176,61 @@
}
}
- /**
- * Finds all ActiveMQ-Brokers registered on a certain JMX-Server or, if a
- * JMX-BrokerName has been set, the broker with that name.
- *
- * @param connection not <code>null</code>
- * @return Set with ObjectName-elements
- * @throws IOException
- * @throws MalformedObjectNameException
- */
- protected Set findBrokers(MBeanServerConnection connection) throws IOException, MalformedObjectNameException {
- ObjectName name;
- if (this.brokerName == null) {
- name = new ObjectName("org.apache.activemq:Type=Broker,*");
- } else {
- name = new ObjectName("org.apache.activemq:BrokerName=" + this.brokerName + ",Type=Broker");
- }
-
- Set brokers = connection.queryNames(name, null);
- return brokers;
- }
-
- public void purgeQueue(ActiveMQDestination destination) throws Exception {
- QueueViewMBean queue = getQueue(destination.getPhysicalName());
- queue.purge();
- }
-
- public ManagementContext getManagementContext() {
- throw new IllegalStateException("not supported");
- }
-
- protected Collection getManagedObjects(ObjectName[] names, Class type) {
- MBeanServerConnection connection;
- try {
- connection = getConnection();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
-
- List answer = new ArrayList();
- if (connection != null) {
- for (int i = 0; i < names.length; i++) {
- ObjectName name = names[i];
- Object value = MBeanServerInvocationHandler.newProxyInstance(connection, name, type, true);
- if (value != null) {
- answer.add(value);
- }
- }
- }
- return answer;
+ /**
+ * Finds all ActiveMQ-Brokers registered on a certain JMX-Server or, if a
+ * JMX-BrokerName has been set, the broker with that name.
+ *
+ * @param connection
+ * not <code>null</code>
+ * @return Set with ObjectName-elements
+ * @throws IOException
+ * @throws MalformedObjectNameException
+ */
+ @SuppressWarnings("unchecked")
+ protected Set<ObjectName> findBrokers(MBeanServerConnection connection)
+ throws IOException, MalformedObjectNameException {
+ ObjectName name;
+ if (this.brokerName == null) {
+ name = new ObjectName("org.apache.activemq:Type=Broker,*");
+ } else {
+ name = new ObjectName("org.apache.activemq:BrokerName="
+ + this.brokerName + ",Type=Broker");
+ }
+
+ Set<ObjectName> brokers = connection.queryNames(name, null);
+ return brokers;
+ }
+ public void purgeQueue(ActiveMQDestination destination) throws Exception {
+ QueueViewMBean queue = getQueue(destination.getPhysicalName());
+ queue.purge();
+ }
+ public ManagementContext getManagementContext() {
+ throw new IllegalStateException("not supported");
+ }
+
+
+ @SuppressWarnings("unchecked")
+ protected <T> Collection<T> getManagedObjects(ObjectName[] names,
+ Class<T> type) {
+ MBeanServerConnection connection;
+ try {
+ connection = getMBeanServerConnection();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ List<T> answer = new ArrayList<T>();
+ if (connection != null) {
+ for (int i = 0; i < names.length; i++) {
+ ObjectName name = names[i];
+ T value = (T) MBeanServerInvocationHandler.newProxyInstance(
+ connection, name, type, true);
+ if (value != null) {
+ answer.add(value);
+ }
+ }
+ }
+ return answer;
}
}
Modified: activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/WebClient.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/WebClient.java?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/WebClient.java (original)
+++ activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/WebClient.java Mon Mar 9 12:03:14 2009
@@ -56,8 +56,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import sun.util.logging.resources.logging;
-
/**
* Represents a messaging client used from inside a web container typically
* stored inside a HttpSession TODO controls to prevent DOS attacks with users
Added: activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/AbstractConfiguration.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/AbstractConfiguration.java?rev=751656&view=auto
==============================================================================
--- activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/AbstractConfiguration.java (added)
+++ activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/AbstractConfiguration.java Mon Mar 9 12:03:14 2009
@@ -0,0 +1,95 @@
+/*
+ * 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.config;
+
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.jms.ConnectionFactory;
+import javax.management.remote.JMXServiceURL;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+
+/**
+ * Base class for configurations.
+ *
+ * @version $Revision: $
+ */
+public abstract class AbstractConfiguration implements WebConsoleConfiguration {
+
+ public ConnectionFactory getConnectionFactory() {
+ return null;
+ }
+
+ public String getJmxPassword() {
+ return null;
+ }
+
+ public Collection<JMXServiceURL> getJmxUrls() {
+ return null;
+ }
+
+ public String getJmxUser() {
+ return null;
+ }
+
+ /**
+ * Creates the ActiveMQ-ConnectionFactory.
+ *
+ * @param jmsUrl
+ * not <code>null</code>
+ * @param jmsUser
+ * <code>null</code> if no authentication
+ * @param jmsPassword
+ * <code>null</code> is ok
+ * @return not <code>null</code>
+ */
+ protected ConnectionFactory makeConnectionFactory(String jmsUrl, String jmsUser,
+ String jmsPassword) {
+ if (jmsUser != null && jmsUser.length() > 0)
+ return new ActiveMQConnectionFactory(jmsUser, jmsPassword, jmsUrl);
+ else
+ return new ActiveMQConnectionFactory(jmsUrl);
+ }
+
+ /**
+ * Splits the JMX-Url string into a series of JMSServiceURLs.
+ *
+ * @param jmxUrls
+ * the JMX-url, multiple URLs are separated by commas.
+ * @return not <code>null</code>, contains at least one element.
+ */
+ protected Collection<JMXServiceURL> makeJmxUrls(String jmxUrls) {
+ String[] urls = jmxUrls.split(",");
+ if (urls == null || urls.length == 0) {
+ urls = new String[] { jmxUrls };
+ }
+
+ try {
+ Collection<JMXServiceURL> result = new ArrayList<JMXServiceURL>(
+ jmxUrls.length());
+ for (String url : urls) {
+ result.add(new JMXServiceURL(url));
+ }
+ return result;
+ } catch (MalformedURLException e) {
+ throw new IllegalArgumentException("Invalid JMX-url", e);
+ }
+ }
+
+}
\ No newline at end of file
Added: activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/JNDIConfiguration.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/JNDIConfiguration.java?rev=751656&view=auto
==============================================================================
--- activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/JNDIConfiguration.java (added)
+++ activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/JNDIConfiguration.java Mon Mar 9 12:03:14 2009
@@ -0,0 +1,104 @@
+/*
+ * 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.config;
+
+import java.util.Collection;
+
+import javax.jms.ConnectionFactory;
+import javax.management.remote.JMXServiceURL;
+import javax.naming.InitialContext;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingException;
+
+/**
+ * Configuration based on JNDI values.
+ *
+ * @version $Revision: $
+ */
+public class JNDIConfiguration extends AbstractConfiguration {
+
+ private static final String JNDI_JMS_CONNECTION_FACTORY = "java:comp/env/jms/connectionFactory";
+ private static final String JNDI_JMS_URL = "java:comp/env/jms/url";
+ private static final String JNDI_JMS_USER = "java:comp/env/jms/user";
+ private static final String JNDI_JMS_PASSWORD = "java:comp/env/jms/password";
+
+ private static final String JNDI_JMX_URL = "java:comp/env/jmx/url";
+ private static final String JNDI_JMX_USER = "java:comp/env/jmx/user";
+ private static final String JNDI_JMX_PASSWORD = "java:comp/env/jmx/password";
+
+ private InitialContext context;
+
+ public JNDIConfiguration() throws NamingException {
+ this.context = new InitialContext();
+ }
+
+ public JNDIConfiguration(InitialContext context) {
+ this.context = context;
+ }
+
+ public ConnectionFactory getConnectionFactory() {
+ try {
+ ConnectionFactory connectionFactory = (ConnectionFactory) this.context
+ .lookup(JNDI_JMS_CONNECTION_FACTORY);
+ return connectionFactory;
+ } catch (NameNotFoundException e) {
+ // try to find an url
+ } catch (NamingException e) {
+ throw new RuntimeException(e);
+ }
+
+ try {
+ String jmsUrl = (String) this.context.lookup(JNDI_JMS_URL);
+ if (jmsUrl == null) {
+ throw new IllegalArgumentException(
+ "A JMS-url must be specified (system property "
+ + JNDI_JMS_URL);
+ }
+
+ String jmsUser = getJndiString(JNDI_JMS_USER);
+ String jmsPassword = getJndiString(JNDI_JMS_PASSWORD);
+ return makeConnectionFactory(jmsUrl, jmsUser, jmsPassword);
+ } catch (NameNotFoundException e) {
+ throw new IllegalArgumentException(
+ "Neither a ConnectionFactory nor a JMS-url were specified");
+ } catch (NamingException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected String getJndiString(String name) {
+ try {
+ return (String) this.context.lookup(name);
+ } catch (NamingException e) {
+ return null;
+ }
+ }
+
+ public Collection<JMXServiceURL> getJmxUrls() {
+ String jmxUrls = getJndiString(JNDI_JMX_URL);
+ return makeJmxUrls(jmxUrls);
+ }
+
+ public String getJmxPassword() {
+ return getJndiString(JNDI_JMX_USER);
+ }
+
+ public String getJmxUser() {
+ return getJndiString(JNDI_JMX_PASSWORD);
+ }
+
+}
\ No newline at end of file
Added: activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/SystemPropertiesConfiguration.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/SystemPropertiesConfiguration.java?rev=751656&view=auto
==============================================================================
--- activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/SystemPropertiesConfiguration.java (added)
+++ activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/SystemPropertiesConfiguration.java Mon Mar 9 12:03:14 2009
@@ -0,0 +1,65 @@
+/*
+ * 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.config;
+
+import java.util.Collection;
+
+import javax.jms.ConnectionFactory;
+import javax.management.remote.JMXServiceURL;
+
+
+/**
+ * Configuration based on system-properties.
+ *
+ * @version $Revision: $
+ */
+public class SystemPropertiesConfiguration extends AbstractConfiguration {
+
+ private static final String PROPERTY_JMS_URL = "webconsole.jms.url";
+ private static final String PROPERTY_JMS_USER = "webconsole.jms.user";
+ private static final String PROPERTY_JMS_PASSWORD = "webconsole.jms.password";
+
+ private static final String PROPERTY_JMX_URL = "webconsole.jmx.url";
+ private static final String PROPERTY_JMX_USER = "webconsole.jmx.user";
+ private static final String PROPERTY_JMX_PASSWORD = "webconsole.jmx.password";
+
+ public ConnectionFactory getConnectionFactory() {
+ String jmsUrl = System.getProperty(PROPERTY_JMS_URL);
+ if (jmsUrl == null)
+ throw new IllegalArgumentException(
+ "A JMS-url must be specified (system property "
+ + PROPERTY_JMS_URL);
+
+ String jmsUser = System.getProperty(PROPERTY_JMS_USER);
+ String jmsPassword = System.getProperty(PROPERTY_JMS_PASSWORD);
+ return makeConnectionFactory(jmsUrl, jmsUser, jmsPassword);
+ }
+
+ public Collection<JMXServiceURL> getJmxUrls() {
+ String jmxUrls = System.getProperty(PROPERTY_JMX_URL);
+ return makeJmxUrls(jmxUrls);
+ }
+
+ public String getJmxPassword() {
+ return System.getProperty(PROPERTY_JMX_USER);
+ }
+
+ public String getJmxUser() {
+ return System.getProperty(PROPERTY_JMX_PASSWORD);
+ }
+
+}
\ No newline at end of file
Added: activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/WebConsoleConfiguration.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/WebConsoleConfiguration.java?rev=751656&view=auto
==============================================================================
--- activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/WebConsoleConfiguration.java (added)
+++ activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/config/WebConsoleConfiguration.java Mon Mar 9 12:03:14 2009
@@ -0,0 +1,62 @@
+/*
+ * 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.config;
+
+import java.util.Collection;
+
+import javax.jms.ConnectionFactory;
+import javax.management.remote.JMXServiceURL;
+
+/**
+ * The configuration used for the web console.
+ *
+ * @version $Revision: $
+ */
+public interface WebConsoleConfiguration {
+
+ /**
+ * The connection factory to use for sending/receiving messages.
+ *
+ * @return not <code>null</code>
+ */
+ ConnectionFactory getConnectionFactory();
+
+ /**
+ * The URL to the JMX connectors of the broker. The names of any failover
+ * (master-slave configuration) must also be specified.
+ *
+ * @return not <code>null</code>, must contain at least one entry
+ */
+ Collection<JMXServiceURL> getJmxUrls();
+
+ /**
+ * The user that is used in case of authenticated JMX connections. The user
+ * must be the same for all the brokers.
+ *
+ * @return <code>null</code> if no authentication should be used.
+ */
+ String getJmxUser();
+
+ /**
+ * Password for the JMX-user.
+ *
+ * @see #getJmxUser()
+ * @return <code>null</code> if no authentication
+ */
+ String getJmxPassword();
+
+}
Modified: activemq/trunk/assembly/src/release/webapps/admin/WEB-INF/webconsole-embedded.xml
URL: http://svn.apache.org/viewvc/activemq/trunk/assembly/src/release/webapps/admin/WEB-INF/webconsole-embedded.xml?rev=751656&r1=751655&r2=751656&view=diff
==============================================================================
--- activemq/trunk/assembly/src/release/webapps/admin/WEB-INF/webconsole-embedded.xml (original)
+++ activemq/trunk/assembly/src/release/webapps/admin/WEB-INF/webconsole-embedded.xml Mon Mar 9 12:03:14 2009
@@ -40,5 +40,7 @@
<bean id="queueBrowser" class="org.apache.activemq.web.QueueBrowseQuery" autowire='constructor' singleton="false"/>
<bean id="messageQuery" class="org.apache.activemq.web.MessageQuery" autowire='constructor' singleton="false"/>
+ <bean id="queueConsumerQuery" class="org.apache.activemq.web.QueueConsumerQuery" autowire="constructor" singleton="false"/>
+ <bean id="connectionQuery" class="org.apache.activemq.web.ConnectionQuery" autowire="constructor" singleton="false"/>
</beans>