diff options
| author | Robert Gemmell <robbie@apache.org> | 2009-07-24 09:32:11 +0000 |
|---|---|---|
| committer | Robert Gemmell <robbie@apache.org> | 2009-07-24 09:32:11 +0000 |
| commit | e72790686cd57c7c069ca5e3a9807681f9e987cb (patch) | |
| tree | be21832c1221396fbd596deabd3e0390cef0dedb /qpid/java | |
| parent | 3b2bba5c270839ccc91836fde3f2ba0481b3ba74 (diff) | |
| download | qpid-python-e72790686cd57c7c069ca5e3a9807681f9e987cb.tar.gz | |
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.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@797387 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
3 files changed, 67 insertions, 21 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java index 23c716a0db..fcaec8bdd0 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java @@ -59,6 +59,8 @@ public class FanoutExchange extends AbstractExchange @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 @@ public class FanoutExchange extends AbstractExchange { _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 @@ public class FanoutExchange extends AbstractExchange try { - queue.bind(FanoutExchange.this, new AMQShortString(binding), null); + queue.bind(FanoutExchange.this, new AMQShortString(BINDING_KEY_SUBSTITUTE), null); } catch (AMQException ex) { diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java index 43744c99df..1dbb5340f4 100644 --- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java +++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java @@ -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.CompositeData; 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 @@ public class ExchangeOperationsTabControl extends TabControl 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 @@ public class ExchangeOperationsTabControl extends TabControl { 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 @@ public class ExchangeOperationsTabControl extends TabControl } 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 @@ public class ExchangeOperationsTabControl extends TabControl _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 @@ public class ExchangeOperationsTabControl extends TabControl } + 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 @@ public class ExchangeOperationsTabControl extends TabControl _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 @@ public class ExchangeOperationsTabControl extends TabControl { 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; diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java index 54135202db..6b3889a2eb 100644 --- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java +++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java @@ -132,7 +132,7 @@ public class HeadersExchangeOperationsTabControl extends TabControl } catch (Exception e) { - MBeanUtility.handleException(mbean,e); + MBeanUtility.handleException(_mbean,e); } _bindingNumberTableViewer.setInput(_bindings); |
