Author: robbie
Date: Fri Jul 17 14:00:57 2009
New Revision: 795089

URL: http://svn.apache.org/viewvc?rev=795089&view=rev
Log:
QPID-1990: add the messages queue position to the viewMessages() operation 
results, update management console QueueOperations tab accordingly

Modified:
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueMBean.java
    
qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedQueue.java
    
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/queue/QueueOperationsTabControl.java

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueMBean.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueMBean.java?rev=795089&r1=795088&r2=795089&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueMBean.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueMBean.java
 Fri Jul 17 14:00:57 2009
@@ -82,7 +82,7 @@
     private String _queueName = null;
     // OpenMBean data types for viewMessages method
 
-    private static OpenType[] _msgAttributeTypes = new OpenType[4]; // AMQ 
message attribute types.
+    private static OpenType[] _msgAttributeTypes = new OpenType[5]; // AMQ 
message attribute types.
     private static CompositeType _messageDataType = null; // Composite type 
for representing AMQ Message data.
     private static TabularType _messagelistDataType = null; // Datatype for 
representing AMQ messages list.
 
@@ -139,6 +139,7 @@
         _msgAttributeTypes[1] = new ArrayType(1, SimpleType.STRING); // For 
header attributes
         _msgAttributeTypes[2] = SimpleType.LONG; // For size
         _msgAttributeTypes[3] = SimpleType.BOOLEAN; // For redelivered
+        _msgAttributeTypes[4] = SimpleType.LONG; // For queue position
 
         _messageDataType = new CompositeType("Message", "AMQ Message", 
VIEW_MSGS_COMPOSITE_ITEM_NAMES, 
                                 VIEW_MSGS_COMPOSITE_ITEM_DESCRIPTIONS, 
_msgAttributeTypes);
@@ -396,11 +397,12 @@
             // Create the tabular list of message header contents
             for (int i = beginIndex; (i <= endIndex) && (i <= list.size()); 
i++)
             {
+                long position = i;
                 AMQMessage msg = list.get(i - 1).getMessage();
                 ContentHeaderBody headerBody = msg.getContentHeaderBody();
                 // Create header attributes list
                 String[] headerAttributes = 
getMessageHeaderProperties(headerBody);
-                Object[] itemValues = { msg.getMessageId(), headerAttributes, 
headerBody.bodySize, msg.isRedelivered() };
+                Object[] itemValues = { msg.getMessageId(), headerAttributes, 
headerBody.bodySize, msg.isRedelivered(), position};
                 CompositeData messageData = new 
CompositeDataSupport(_messageDataType, VIEW_MSGS_COMPOSITE_ITEM_NAMES, 
itemValues);
                 _messageList.put(messageData);
             }

Modified: 
qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedQueue.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedQueue.java?rev=795089&r1=795088&r2=795089&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedQueue.java
 (original)
+++ 
qpid/trunk/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedQueue.java
 Fri Jul 17 14:00:57 2009
@@ -40,12 +40,13 @@
 public interface ManagedQueue
 {
     static final String TYPE = "Queue";
-    static final int VERSION = 2;
+    static final int VERSION = 3;
 
     //TabularType and contained CompositeType key/description information for 
message list
     //For compatibility reasons, DONT MODIFY the existing key values if 
expanding the set. 
-    String[] VIEW_MSGS_COMPOSITE_ITEM_NAMES = {"AMQ MessageId", "Header", 
"Size(bytes)", "Redelivered"};
-    String[] VIEW_MSGS_COMPOSITE_ITEM_DESCRIPTIONS = {"AMQ MessageId", 
"Header", "Size(bytes)", "Redelivered"};
+    //"Queue Position" added in Qpid JMX API 1.3
+    String[] VIEW_MSGS_COMPOSITE_ITEM_NAMES = {"AMQ MessageId", "Header", 
"Size(bytes)", "Redelivered", "Queue Position"};
+    String[] VIEW_MSGS_COMPOSITE_ITEM_DESCRIPTIONS = {"AMQ MessageId", 
"Header", "Size(bytes)", "Redelivered", "Queue Position"};
     String[] VIEW_MSGS_TABULAR_UNIQUE_INDEX = 
{VIEW_MSGS_COMPOSITE_ITEM_NAMES[0]};
 
     //CompositeType key/description information for message content

Modified: 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/queue/QueueOperationsTabControl.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/queue/QueueOperationsTabControl.java?rev=795089&r1=795088&r2=795089&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/queue/QueueOperationsTabControl.java
 (original)
+++ 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/queue/QueueOperationsTabControl.java
 Fri Jul 17 14:00:57 2009
@@ -35,6 +35,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.ManagedQueue;
@@ -84,6 +85,8 @@
     private TableViewer _tableViewer = null;
     private Composite _paramsComposite = null;
             
+    private ApiVersion _ApiVersion;
+    
     private TabularDataSupport _messages = null;
     private ManagedQueue _qmb;
     
@@ -91,11 +94,13 @@
     static final String MSG_HEADER = 
ManagedQueue.VIEW_MSGS_COMPOSITE_ITEM_NAMES[1];
     static final String MSG_SIZE = 
ManagedQueue.VIEW_MSGS_COMPOSITE_ITEM_NAMES[2];
     static final String MSG_REDELIVERED = 
ManagedQueue.VIEW_MSGS_COMPOSITE_ITEM_NAMES[3];
+    static final String MSG_QUEUE_POS = 
ManagedQueue.VIEW_MSGS_COMPOSITE_ITEM_NAMES[4];
     
     public QueueOperationsTabControl(TabFolder tabFolder, JMXManagedObject 
mbean, MBeanServerConnection mbsc)
     {
         super(tabFolder);
         _mbean = mbean;
+        _ApiVersion = 
ApplicationRegistry.getServerRegistry(mbean).getManagementApiVersion();
         _qmb = (ManagedQueue) 
MBeanServerInvocationHandler.newProxyInstance(mbsc, 
                                 mbean.getObjectName(), ManagedQueue.class, 
false);
         _toolkit = new FormToolkit(_tabFolder.getDisplay());
@@ -184,7 +189,13 @@
         final TableSorter tableSorter = new TableSorter();
         
         String[] titles = {"AMQ ID", "Size(bytes)"};
-        int[] bounds = { 175, 175 };
+        if(_ApiVersion.greaterThanOrEqualTo(1, 3))
+        {
+           //if server management API is >= 1.3, show message's queue position
+           titles = new String[]{"AMQ ID", "Size(bytes)", "Queue Position"};
+        }
+
+        int[] bounds = { 175, 175, 140 };
         for (int i = 0; i < titles.length; i++) 
         {
             final int index = i;
@@ -415,6 +426,8 @@
                     return String.valueOf(((CompositeDataSupport) 
element).get(MSG_AMQ_ID));
                 case 1 : // msg size column 
                     return String.valueOf(((CompositeDataSupport) 
element).get(MSG_SIZE));
+                case 2 : // msg position in queue 
+                    return String.valueOf(((CompositeDataSupport) 
element).get(MSG_QUEUE_POS));
                 default :
                     return "-";
             }
@@ -476,6 +489,9 @@
                 case 1:
                     comparison = ((Long) 
msg1.get(MSG_SIZE)).compareTo((Long)msg2.get(MSG_SIZE));
                     break;
+                case 2:
+                    comparison = ((Long) 
msg1.get(MSG_QUEUE_POS)).compareTo((Long)msg2.get(MSG_QUEUE_POS));
+                    break;
                 default:
                     comparison = 0;
             }



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to