Types

Each type can be thought of like a table in an SQL database. Each table has a set of attributes that comprise it, and at least one of those attributes will comprise the primary key.

Tabulator comes with a set of sample "Type" classes in its examples. These illustrate various features of the sources provided.

It also provides other ready made "Type" classes.

QPid queue JMX

Apache QPid is messaging implementation which speaks the AMQP protocol.

Older versions of QPid support administration via JMX.

This uses the JMX source class to scan JMX MBeans matching this pattern :-

org.apache.qpid:type=VirtualHost.Queue,name=*,*

If the queue names are known, it can make targetted requests for just those named queues.

It fetches a basic set of attributes per queue.

The Config attribute group enables additional attributes relating to how the queue is configured, such as whether it is Durable.

The Status attribute group enables additional attributes relating to the status of the queue, such as its current MessageCount.

It only fetches attributes if their group has been selected.

The "Type" class provides an enrichQueue method which any subclass can use to provide additional attributes. One use of this is could be to annotate each queue using static reference data, such as a support group.

QPid message JMX

This is too complex to implement using the JMX source, so the logic to query queues for messages is actually in the QPid message "Type" class. This is because QPid JMX MBeans make extensive use of methods, CompositeData and TabularData.

There is a basic set of attributes returned per message.

The Headers attribute group enables additional non-JMS message header attributes.

The JMS Headers attribute group enables additional JMS message header attributes.

The Payload attribute group enables additional attributes, relating to, and including, the message payload itself.

The "Type" class provides an enrichQueue method which any subclass can use to provide additional queue level attributes. It also supplies an enrichMessage method for enriching the message. This could be used to decode the message content, perhaps XPath-ing out salient fields and presenting as attributes of their own.

The enrichment functions are obliged to apply the match expressions to the attribute values they create. So the sequence is :-

  1. compute enriched queue attributes
  2. apply matches to enriched queue attributes
  3. compute enriched message attributes
  4. apply matches to enriched message attributes

This means that if the queue is filtered out by the match criteria, the system doesn't bother fetching message level attributes.

The QPid message type implements an extended action which returns the raw message content to the browser. It uses the MIME type obtained from QPid when returning data to the browser.

QPid queue REST

Newer versions of QPid support administration via the QPid REST API, and have removed the JMX interface.

This uses the JSON source to process the output of calling the QPid REST API.

If the queue name is known, it can make a targetted request for just that named queue.

It fetches a basic set of attributes per queue, and there are attribute groups to fetch more.

The "Type" class provides an enrichQueue method which any subclass can use to provide additional attributes.

By default, queues in the default virtualhostnode and the default virtualhost are displayed, but these values can be overridden.

This code has been tested with QPid 6.1.4, but I don't know the earliest version it works with.

QPid message REST

This uses the JSON source to process the output of calling the QPid REST API.

If the queue name is known, it can make a targetted request for just that named queue.

If the range of desired queue positions is known, it can make targetted requests for just those ranges of messages.

It fetches a basic set of attributes per message, and there are attribute groups to fetch more.

The "Type" class provides enrichQueue and enrichMessage methods which any subclass can use to provide additional attributes.

The QPid message type implements an extended action which returns the raw message content to the browser. It uses the MIME type obtained from QPid when returning data to the browser.

This code has been tested with QPid 6.1.4, but I don't know the earliest version it works with. It doesn't work with QPid 5.1.11, as it doesn't support getMessageInfo.