Author: robbie
Date: Fri Jul 24 09:32:11 2009
New Revision: 797387
URL: http://svn.apache.org/viewvc?rev=797387&view=rev
Log:
QPID-2005: make the fanout exchange mbean return a single wildcard binding
entry with all queues listed.
Modify the management console to auto-select the wildcard binding when the
exchange is viewed. Also, suppress the warning on entering no binding key when
creating a fanout exchange binding, but auto-fill the field with the wildcard
for clarity.
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java?rev=797387&r1=797386&r2=797387&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java
(original)
+++
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java
Fri Jul 24 09:32:11 2009
@@ -59,6 +59,8 @@
@MBeanDescription("Management Bean for Fanout Exchange")
private final class FanoutExchangeMBean extends ExchangeMBean
{
+ private static final String BINDING_KEY_SUBSTITUTE = "*";
+
@MBeanConstructor("Creates an MBean for AMQ fanout exchange")
public FanoutExchangeMBean() throws JMException
{
@@ -71,15 +73,23 @@
{
_bindingList = new TabularDataSupport(_bindinglistDataType);
+
+ if(_queues.isEmpty())
+ {
+ return _bindingList;
+ }
+
+ ArrayList<String> queueNames = new ArrayList<String>();
for (AMQQueue queue : _queues)
{
String queueName = queue.getName().toString();
-
- Object[] bindingItemValues = {queueName, new
String[]{queueName}};
- CompositeData bindingData = new
CompositeDataSupport(_bindingDataType, COMPOSITE_ITEM_NAMES, bindingItemValues);
- _bindingList.put(bindingData);
+ queueNames.add(queueName);
}
+
+ Object[] bindingItemValues = {BINDING_KEY_SUBSTITUTE,
queueNames.toArray(new String[0])};
+ CompositeData bindingData = new
CompositeDataSupport(_bindingDataType, COMPOSITE_ITEM_NAMES, bindingItemValues);
+ _bindingList.put(bindingData);
return _bindingList;
}
@@ -94,7 +104,7 @@
try
{
- queue.bind(FanoutExchange.this, new AMQShortString(binding),
null);
+ queue.bind(FanoutExchange.this, new
AMQShortString(BINDING_KEY_SUBSTITUTE), null);
}
catch (AMQException ex)
{
Modified:
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java?rev=797387&r1=797386&r2=797387&view=diff
==============================================================================
---
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java
(original)
+++
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java
Fri Jul 24 09:32:11 2009
@@ -20,6 +20,9 @@
*/
package org.apache.qpid.management.ui.views.exchange;
+import static org.apache.qpid.management.ui.Constants.EXCHANGE_TYPE;
+import static
org.apache.qpid.management.ui.Constants.DEFAULT_EXCHANGE_TYPE_VALUES;
+
import java.util.Collection;
import java.util.List;
@@ -29,6 +32,7 @@
import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.TabularDataSupport;
+import org.apache.qpid.management.ui.ApiVersion;
import org.apache.qpid.management.ui.ApplicationRegistry;
import org.apache.qpid.management.ui.ManagedBean;
import org.apache.qpid.management.common.mbeans.ManagedExchange;
@@ -79,6 +83,7 @@
private TabularDataSupport _bindings = null;
private ManagedExchange _emb;
+ private ApiVersion _ApiVersion;
static final String BINDING_KEY = ManagedExchange.COMPOSITE_ITEM_NAMES[0];
static final String QUEUES = ManagedExchange.COMPOSITE_ITEM_NAMES[1];
@@ -87,6 +92,7 @@
{
super(tabFolder);
_mbean = mbean;
+ _ApiVersion =
ApplicationRegistry.getServerRegistry(mbean).getManagementApiVersion();
_emb = (ManagedExchange)
MBeanServerInvocationHandler.newProxyInstance(mbsc,
mbean.getObjectName(), ManagedExchange.class,
false);
_toolkit = new FormToolkit(_tabFolder.getDisplay());
@@ -130,10 +136,26 @@
}
catch (Exception e)
{
- MBeanUtility.handleException(mbean,e);
+ MBeanUtility.handleException(_mbean,e);
}
_keysTableViewer.setInput(_bindings);
+
+ //if we have a Qpid JMX API 1.3+ server
+ if(_ApiVersion.greaterThanOrEqualTo(1, 3))
+ {
+ //if it is a fanout exchange
+ if(isFanoutExchange())
+ {
+ //if there are any queue bindings, there is a single wildcard
binding key
+ //auto-select it to show all the queues bound to the exchange
+ if (_keysTable.getItemCount() == 1)
+ {
+ _keysTable.setSelection(0);
+ updateQueuesTable();
+ }
+ }
+ }
layout();
}
@@ -263,19 +285,7 @@
_keysTableViewer.addSelectionChangedListener(new
ISelectionChangedListener(){
public void selectionChanged(SelectionChangedEvent evt)
{
- int selectionIndex = _keysTable.getSelectionIndex();
-
- if (selectionIndex != -1)
- {
- final CompositeData selectedMsg =
(CompositeData)_keysTable.getItem(selectionIndex).getData();
-
- String[] queues = (String[]) selectedMsg.get(QUEUES);
- _queuesTableViewer.setInput(queues);
- }
- else
- {
- _queuesTableViewer.setInput(new String[]{"Select a
binding key to view queues"});
- }
+ updateQueuesTable();
}
});
@@ -296,6 +306,28 @@
}
+ private void updateQueuesTable()
+ {
+ int selectionIndex = _keysTable.getSelectionIndex();
+
+ if (selectionIndex != -1)
+ {
+ final CompositeData selectedMsg =
(CompositeData)_keysTable.getItem(selectionIndex).getData();
+
+ String[] queues = (String[]) selectedMsg.get(QUEUES);
+ _queuesTableViewer.setInput(queues);
+ }
+ else
+ {
+ _queuesTableViewer.setInput(new String[]{"Select a binding key to
view queues"});
+ }
+ }
+
+ private boolean isFanoutExchange()
+ {
+ return
_mbean.getProperty(EXCHANGE_TYPE).equalsIgnoreCase(DEFAULT_EXCHANGE_TYPE_VALUES[1]);
+
+ }
/**
* Content Provider class for the table viewer
@@ -477,6 +509,10 @@
_toolkit.createLabel(bindingComposite,"Binding:").setBackground(shell.getBackground());
final Text bindingText = new Text(bindingComposite, SWT.BORDER);
bindingText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true,
false));
+ if(isFanoutExchange())
+ {
+ bindingText.setText("*");
+ }
Composite okCancelButtonsComp = _toolkit.createComposite(shell);
okCancelButtonsComp.setBackground(shell.getBackground());
@@ -507,7 +543,7 @@
{
String binding = bindingText.getText();
- if (binding == null || binding.length() == 0)
+ if (!isFanoutExchange() && (binding == null ||
binding.length() == 0))
{
ViewUtility.popupErrorMessage("Create New Binding",
"Please enter a valid binding");
return;
Modified:
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java?rev=797387&r1=797386&r2=797387&view=diff
==============================================================================
---
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java
(original)
+++
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java
Fri Jul 24 09:32:11 2009
@@ -132,7 +132,7 @@
}
catch (Exception e)
{
- MBeanUtility.handleException(mbean,e);
+ MBeanUtility.handleException(_mbean,e);
}
_bindingNumberTableViewer.setInput(_bindings);
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]