summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2013-05-15 13:57:10 +0000
committerRobert Gemmell <robbie@apache.org>2013-05-15 13:57:10 +0000
commitc43f5d0600851d94511bd537674479511033c68a (patch)
tree4810d15584a91c334fd7a7fce3280ecbe870225e
parent8f3c8870bdfde16d130150bce14444bfb72eb7c7 (diff)
downloadqpid-python-c43f5d0600851d94511bd537674479511033c68a.tar.gz
QPID-4847: add support for message group attributes when creating/inspecting queues via the rest interface and web management ui
merged from trunk r1482838 git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.22@1482842 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html16
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js13
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js6
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html4
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java2
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/model/Queue.java2
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java14
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java18
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java17
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java3
10 files changed, 74 insertions, 21 deletions
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html
index 76123296b1..9a24e23407 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html
@@ -182,6 +182,22 @@
<td valign="top">NOTE: Configuring maximum delivery retries on a queue which has no DLQ / AlternateExchange will result in messages being discarded after the limit is reached.</td>
</tr>
</table>
+ <table cellpadding="0" cellspacing="2">
+
+ <!-- qpid.group_header_key -->
+ <tr>
+ <td valign="top"><strong>Message Group Key: </strong></td>
+ <td><input type="text" required="false" name="messageGroupKey" id="formAddQueue.messageGroupKey"
+ dojoType="dijit.form.ValidationTextBox"
+ trim="true"/></td>
+ </tr>
+
+ <!-- qpid.qpid.shared_msg_group -->
+ <tr>
+ <td valign="top"><strong>Shared Message Groups? </strong></td>
+ <td><input type="checkbox" name="messageGroupSharedGroups" id="formAddQueue.messageGroupSharedGroups" value="messageGroupSharedGroups" dojoType="dijit.form.CheckBox" /></td>
+ </tr>
+ </table>
</div>
</div>
<div class="dijitDialogPaneActionBar">
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
index cb6846878f..a47b24d1ab 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
@@ -282,6 +282,9 @@ define(["dojo/_base/xhr",
"alertThresholdQueueDepthBytesUnits",
"alertThresholdQueueDepthMessages",
"alternateExchange",
+ "messageGroups",
+ "messageGroupKey",
+ "messageGroupSharedGroups",
"queueDepthMessages",
"queueDepthBytes",
"queueDepthBytesUnits",
@@ -357,6 +360,16 @@ define(["dojo/_base/xhr",
this.typeQualifier.innerHTML = entities.encode("(" + queueTypeKeyNames[this.queueData.type] + ": " + this.queueData[queueTypeKeys[this.queueData.type]] + ")");
}
+ if(this.queueData["messageGroupKey"])
+ {
+ this.messageGroupKey.innerHTML = entities.encode(String(this.queueData["messageGroupKey"]));
+ this.messageGroupSharedGroups.innerHTML = entities.encode(String(this.queueData["messageGroupSharedGroups"]));
+ this.messageGroups.style.display = "block";
+ }
+ else
+ {
+ this.messageGroups.style.display = "none";
+ }
};
QueueUpdater.prototype.update = function()
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js
index b1357f8c98..e8b8dd1721 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js
@@ -89,6 +89,12 @@ define(["dojo/_base/xhr",
newQueue["x-qpid-dlq-enabled"] = true;
}
}
+ else if(propName === "messageGroupSharedGroups")
+ {
+ if (formValues.messageGroupSharedGroups[0] && formValues.messageGroupSharedGroups[0] == "messageGroupSharedGroups") {
+ newQueue["messageGroupSharedGroups"] = true;
+ }
+ }
else if (!typeSpecificFields.hasOwnProperty(propName) ||
formValues.type === typeSpecificFields[ propName ]) {
if(formValues[ propName ] !== "") {
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html
index 929e1d1f23..c31cae6f8a 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html
+++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html
@@ -51,6 +51,10 @@
<span style="position:absolute; left:26em">Type:</span><span style="position:absolute; left:29em" class="type"></span>
<span style="position:absolute; right:1em" class="typeQualifier"></span>
<br/>
+ <div class="messageGroups">
+ <span style="" class="messageGroupKeyLabel">Message Group Key:</span><span class="messageGroupKey" style="position:absolute; left:11em"></span>
+ <span style="position:absolute; left:26em" class="messageGroupSharedGroupsLabel">Shared Message Groups:</span><span style="position:absolute; left:39em" class="messageGroupSharedGroups"></span>
+ </div>
<br/>
<div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Bindings'">
<div class="bindings"></div>
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java
index e168e6ea98..0b31f5b81a 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java
@@ -50,6 +50,8 @@ public class BrokerProperties
public static final String PROPERTY_MANAGEMENT_RIGHTS_INFER_ALL_ACCESS = "qpid.broker_jmx_method_rights_infer_all_access";
public static final String PROPERTY_USE_CUSTOM_RMI_SOCKET_FACTORY = "qpid.broker_jmx_use_custom_rmi_socket_factory";
+ public static final String PROPERTY_DEFAULT_SHARED_MESSAGE_GROUP = "qpid.broker_default-shared-message-group";
+
public static final String PROPERTY_QPID_HOME = "QPID_HOME";
public static final String PROPERTY_QPID_WORK = "QPID_WORK";
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Queue.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Queue.java
index bf703e6fbe..6fe0607ab2 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Queue.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Queue.java
@@ -88,7 +88,6 @@ public interface Queue extends ConfiguredObject
public static final String ALTERNATE_EXCHANGE = "alternateExchange";
public static final String EXCLUSIVE = "exclusive";
public static final String MESSAGE_GROUP_KEY = "messageGroupKey";
- public static final String MESSAGE_GROUP_DEFAULT_GROUP = "messageGroupDefaultGroup";
public static final String MESSAGE_GROUP_SHARED_GROUPS = "messageGroupSharedGroups";
public static final String LVQ_KEY = "lvqKey";
public static final String MAXIMUM_DELIVERY_ATTEMPTS = "maximumDeliveryAttempts";
@@ -122,7 +121,6 @@ public interface Queue extends ConfiguredObject
LVQ_KEY,
SORT_KEY,
MESSAGE_GROUP_KEY,
- MESSAGE_GROUP_DEFAULT_GROUP,
MESSAGE_GROUP_SHARED_GROUPS,
MAXIMUM_DELIVERY_ATTEMPTS,
QUEUE_FLOW_CONTROL_SIZE_BYTES,
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
index 0916c4e730..afcce482b6 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java
@@ -308,10 +308,6 @@ final class QueueAdapter extends AbstractAdapter implements Queue, AMQQueue.Subs
{
// TODO
}
- else if(MESSAGE_GROUP_DEFAULT_GROUP.equals(name))
- {
- // TODO
- }
else if(MESSAGE_GROUP_SHARED_GROUPS.equals(name))
{
// TODO
@@ -416,15 +412,13 @@ final class QueueAdapter extends AbstractAdapter implements Queue, AMQQueue.Subs
}
else if(MESSAGE_GROUP_KEY.equals(name))
{
- // TODO
- }
- else if(MESSAGE_GROUP_DEFAULT_GROUP.equals(name))
- {
- // TODO
+ return _queue.getArguments().get(SimpleAMQQueue.QPID_GROUP_HEADER_KEY);
}
else if(MESSAGE_GROUP_SHARED_GROUPS.equals(name))
{
- // TODO
+ //We only return the boolean value if message groups are actually in use
+ return getAttribute(MESSAGE_GROUP_KEY) == null ? null :
+ SimpleAMQQueue.SHARED_MSG_GROUP_ARG_VALUE.equals(_queue.getArguments().get(SimpleAMQQueue.QPID_SHARED_MSG_GROUP));
}
else if(LVQ_KEY.equals(name))
{
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
index df171d61f6..71ec3c4008 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
@@ -70,6 +70,7 @@ import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.queue.AMQQueueFactory;
import org.apache.qpid.server.queue.QueueEntry;
import org.apache.qpid.server.queue.QueueRegistry;
+import org.apache.qpid.server.queue.SimpleAMQQueue;
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.security.access.Operation;
import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
@@ -338,6 +339,23 @@ public final class VirtualHostAdapter extends AbstractAdapter implements Virtual
throw new IllegalArgumentException("Sort key is not specified for sorted queue");
}
}
+
+ if (attributes.containsKey(Queue.MESSAGE_GROUP_KEY))
+ {
+ String key = MapValueConverter.getStringAttribute(Queue.MESSAGE_GROUP_KEY, attributes);
+ attributes.remove(Queue.MESSAGE_GROUP_KEY);
+ attributes.put(SimpleAMQQueue.QPID_GROUP_HEADER_KEY, key);
+ }
+
+ if (attributes.containsKey(Queue.MESSAGE_GROUP_SHARED_GROUPS))
+ {
+ if(MapValueConverter.getBooleanAttribute(Queue.MESSAGE_GROUP_SHARED_GROUPS, attributes))
+ {
+ attributes.remove(Queue.MESSAGE_GROUP_SHARED_GROUPS);
+ attributes.put(SimpleAMQQueue.QPID_SHARED_MSG_GROUP, SimpleAMQQueue.SHARED_MSG_GROUP_ARG_VALUE);
+ }
+ }
+
String name = MapValueConverter.getStringAttribute(Queue.NAME, attributes, null);
State state = MapValueConverter.getEnumAttribute(State.class, Queue.STATE, attributes, State.ACTIVE);
boolean durable = MapValueConverter.getBooleanAttribute(Queue.DURABLE, attributes, false);
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
index b16af05883..79cc2c0c1d 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
@@ -41,8 +41,8 @@ import org.apache.qpid.AMQSecurityException;
import org.apache.qpid.framing.AMQShortString;
import org.apache.qpid.pool.ReferenceCountingExecutorService;
import org.apache.qpid.server.binding.Binding;
+import org.apache.qpid.server.configuration.BrokerProperties;
import org.apache.qpid.server.configuration.QueueConfiguration;
-import org.apache.qpid.server.configuration.plugins.AbstractConfiguration;
import org.apache.qpid.server.exchange.Exchange;
import org.apache.qpid.server.logging.LogActor;
import org.apache.qpid.server.logging.LogSubject;
@@ -65,12 +65,15 @@ import org.apache.qpid.server.virtualhost.VirtualHost;
public class SimpleAMQQueue implements AMQQueue, Subscription.StateListener, MessageGroupManager.SubscriptionResetHelper
{
+
private static final Logger _logger = Logger.getLogger(SimpleAMQQueue.class);
- private static final String QPID_GROUP_HEADER_KEY = "qpid.group_header_key";
- private static final String QPID_SHARED_MSG_GROUP = "qpid.shared_msg_group";
- private static final String QPID_DEFAULT_MESSAGE_GROUP = "qpid.default-message-group";
+ public static final String QPID_GROUP_HEADER_KEY = "qpid.group_header_key";
+ public static final String QPID_SHARED_MSG_GROUP = "qpid.shared_msg_group";
+ public static final String SHARED_MSG_GROUP_ARG_VALUE = "1";
+ private static final String QPID_DEFAULT_MESSAGE_GROUP_ARG = "qpid.default-message-group";
private static final String QPID_NO_GROUP = "qpid.no-group";
+ private static final String DEFAULT_SHARED_MESSAGE_GROUP = System.getProperty(BrokerProperties.PROPERTY_DEFAULT_SHARED_MESSAGE_GROUP, QPID_NO_GROUP);
// TODO - should make this configurable at the vhost / broker level
private static final int DEFAULT_MAX_GROUPS = 255;
@@ -254,12 +257,12 @@ public class SimpleAMQQueue implements AMQQueue, Subscription.StateListener, Mes
if(arguments != null && arguments.containsKey(QPID_GROUP_HEADER_KEY))
{
- if(arguments.containsKey(QPID_SHARED_MSG_GROUP) && String.valueOf(arguments.get(QPID_SHARED_MSG_GROUP)).equals("1"))
+ if(arguments.containsKey(QPID_SHARED_MSG_GROUP) && String.valueOf(arguments.get(QPID_SHARED_MSG_GROUP)).equals(SHARED_MSG_GROUP_ARG_VALUE))
{
- Object defaultGroup = arguments.get(QPID_DEFAULT_MESSAGE_GROUP);
+ Object defaultGroup = arguments.get(QPID_DEFAULT_MESSAGE_GROUP_ARG);
_messageGroupManager =
new DefinedGroupMessageGroupManager(String.valueOf(arguments.get(QPID_GROUP_HEADER_KEY)),
- defaultGroup == null ? QPID_NO_GROUP : defaultGroup.toString(),
+ defaultGroup == null ? DEFAULT_SHARED_MESSAGE_GROUP : defaultGroup.toString(),
this);
}
else
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java
index 6f795cc61d..deaac2dd2a 100644
--- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java
@@ -88,8 +88,7 @@ public class Asserts
assertNotNull("Queue " + queueName + " is not found!", queueData);
Asserts.assertAttributesPresent(queueData, Queue.AVAILABLE_ATTRIBUTES, Queue.CREATED, Queue.UPDATED,
Queue.DESCRIPTION, Queue.TIME_TO_LIVE, Queue.ALTERNATE_EXCHANGE, Queue.OWNER, Queue.NO_LOCAL, Queue.LVQ_KEY,
- Queue.SORT_KEY, Queue.MESSAGE_GROUP_KEY, Queue.MESSAGE_GROUP_DEFAULT_GROUP,
- Queue.MESSAGE_GROUP_SHARED_GROUPS, Queue.PRIORITIES);
+ Queue.SORT_KEY, Queue.MESSAGE_GROUP_KEY, Queue.MESSAGE_GROUP_SHARED_GROUPS, Queue.PRIORITIES);
assertEquals("Unexpected value of queue attribute " + Queue.NAME, queueName, queueData.get(Queue.NAME));
assertNotNull("Unexpected value of queue attribute " + Queue.ID, queueData.get(Queue.ID));