qpid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Qpid > Qpid Management Framework
Date Wed, 18 Nov 2009 16:09:00 GMT
<html>
<head>
    <base href="http://cwiki.apache.org/confluence">
            <link rel="stylesheet" href="/confluence/s/1519/1/1/_/styles/combined.css?spaceKey=qpid&amp;forWysiwyg=true"
type="text/css">
    </head>
<body style="background-color: white" bgcolor="white">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
     <h2><a href="http://cwiki.apache.org/confluence/display/qpid/Qpid+Management+Framework">Qpid
Management Framework</a></h2>
     <h4>Page <b>edited</b> by             <a href="http://cwiki.apache.org/confluence/display/~tross">Ted
Ross</a>
    </h4>
     
          <br/>
     <div class="notificationGreySide">
         <div>
<ul>
    <li><a href='#QpidManagementFramework-WhatIsQMF'>What Is QMF</a></li>
    <li><a href='#QpidManagementFramework-GettingStartedwithQMF'>Getting Started
with QMF</a></li>
    <li><a href='#QpidManagementFramework-QMFConcepts'>QMF Concepts</a></li>
<ul>
    <li><a href='#QpidManagementFramework-Console%2CAgent%2CandBroker'>Console,
Agent, and Broker</a></li>
    <li><a href='#QpidManagementFramework-Schema'>Schema</a></li>
    <li><a href='#QpidManagementFramework-ClassKeysandClassVersioning'>Class Keys
and Class Versioning</a></li>
</ul>
    <li><a href='#QpidManagementFramework-TheQMFProtocol'>The QMF Protocol</a></li>
    <li><a href='#QpidManagementFramework-HowtoWriteaQMFConsole'>How to Write
a QMF Console</a></li>
    <li><a href='#QpidManagementFramework-HowtoWriteaQMFAgent'>How to Write a
QMF Agent</a></li>
</ul></div>

<blockquote>
<p>Please visit the <a href="/confluence/pages/createpage.action?spaceKey=qpid&amp;title=QMFv2+Project+Page&amp;linkCreation=true&amp;fromPageId=95758"
class="createlink">QMFv2 Project Page</a> for information about the future of QMF.</p></blockquote>

<h1><a name="QpidManagementFramework-WhatIsQMF"></a>What Is QMF</h1>

<p>QMF (Qpid Management Framework) is a general-purpose management bus built on Qpid
Messaging.  It takes advantage of the scalability, security, and rich capabilities of Qpid
to provide flexible and easy-to-use manageability to a large set of applications.</p>

<h1><a name="QpidManagementFramework-GettingStartedwithQMF"></a>Getting
Started with QMF</h1>

<p>QMF is used through two primary APIs.  The <em>console</em> API is used
for console applications that wish to access and manipulate manageable components through
QMF.  The <em>agent</em> API is used for application that wish to be managed through
QMF.</p>

<p>The fastest way to get started with QMF is to work through the "How To" tutorials
for consoles and agents.  For a deeper understanding of what is happening in the tutorials,
it is recommended that you look at the <em>Qmf Concepts</em> section.</p>


<h1><a name="QpidManagementFramework-QMFConcepts"></a>QMF Concepts</h1>

<p>This section introduces important concepts underlying QMF.</p>

<h2><a name="QpidManagementFramework-Console%2CAgent%2CandBroker"></a>Console,
Agent, and Broker</h2>

<p>The major architectural components of QMF are the Console, the Agent, and the Broker.
 Console components are the "managing" components of QMF and agent components are the "managed"
parts.  The broker is a central (possibly distributed, clustered and fault-tolerant) component
that manages name spaces and caches schema information.</p>

<p>A console application may be a command-line utility, a three-tiered web-based GUI,
a collection and storage device, a specialized application that monitors and reacts to events
and conditions, or anything else somebody wishes to develop that uses QMF management data.</p>

<p>An agent application is any application that has been enhanced to allow itself to
be managed via QMF.</p>

<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent
panelContent">
<pre>       +-------------+    +---------+    +---------------+    +-------------------+
       | CLI utility |    | Web app |    | Audit storage |    | Event correlation |
       +-------------+    +---------+    +---------------+    +-------------------+
              ^                ^                 ^                ^          |
              |                |                 |                |          |
              v                v                 v                v          v
    +---------------------------------------------------------------------------------+
    |                Qpid Messaging Bus (with QMF Broker capability)                  |
    +---------------------------------------------------------------------------------+
                    ^                     ^                     ^
                    |                     |                     |
                    v                     v                     v
           +----------------+    +----------------+    +----------------+
           | Manageable app |    | Manageable app |    | Manageable app |
           +----------------+    +----------------+    +----------------+
</pre>
</div></div>

<p>In the above diagram, the <em>Manageable apps</em> are agents, the <em>CLI
utility</em>, <em>Web app</em>, and <em>Audit storage</em> are
consoles, and <em>Event correlation</em> is both a console and an agent because
it can create events based on the aggregation of what it sees.</p>

<h2><a name="QpidManagementFramework-Schema"></a>Schema</h2>

<p>A <em>schema</em> describes the structure of management data.  Each <em>agent</em>
provides a schema that describes its management model including the object classes, methods,
events, etc. that it provides.  In the current QMF distribution, the agent's schema is codified
in an XML document.  In the near future, there will also be ways to programatically create
QMF schemata.</p>

<h3><a name="QpidManagementFramework-Package"></a>Package</h3>

<p>Each agent that exports a schema identifies itself using a <em>package</em>
name.  The package provides a unique namespace for the classes in the agent's schema that
prevent collisions with identically named classes in other agents' schemata.</p>

<p>Package names are in "reverse domain name" form with levels of hierarchy separated
by periods.  For example, the Qpid messaging broker uses package "org.apache.qpid.broker"
and the Access Control List plugin for the broker uses package "org.apache.qpid.acl".  In
general, the package name should be the reverse of the internet domain name assigned to the
organization that owns the agent software followed by identifiers to uniquely identify the
agent.</p>

<p>The XML document for a package's schema uses an enclosing &lt;schema&gt;
tag.  For example:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;schema package=<span class="code-quote">"org.apache.qpid.broker"</span>&gt;</span>

<span class="code-tag">&lt;/schema&gt;</span>
</pre>
</div></div>

<h3><a name="QpidManagementFramework-ObjectClasses"></a>Object Classes</h3>

<p><em>Object classes</em> define types for manageable objects.  The agent
may create and destroy objects which are instances of object classes in the schema.  An object
class is defined in the XML document using the &lt;class&gt; tag.  An object class
is composed of properties, statistics, and methods.</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
  <span class="code-tag">&lt;class name=<span class="code-quote">"Exchange"</span>&gt;</span>
    <span class="code-tag">&lt;property name=<span class="code-quote">"vhostRef"</span>
  type=<span class="code-quote">"objId"</span> references=<span class="code-quote">"Vhost"</span>
access=<span class="code-quote">"RC"</span> index=<span class="code-quote">"y"</span>
parentRef=<span class="code-quote">"y"</span>/&gt;</span>
    <span class="code-tag">&lt;property name=<span class="code-quote">"name"</span>
      type=<span class="code-quote">"sstr"</span>  access=<span class="code-quote">"RC"</span>
index=<span class="code-quote">"y"</span>/&gt;</span>
    <span class="code-tag">&lt;property name=<span class="code-quote">"type"</span>
      type=<span class="code-quote">"sstr"</span>  access=<span class="code-quote">"RO"</span>/&gt;</span>
    <span class="code-tag">&lt;property name=<span class="code-quote">"durable"</span>
   type=<span class="code-quote">"bool"</span>  access=<span class="code-quote">"RC"</span>/&gt;</span>
    <span class="code-tag">&lt;property name=<span class="code-quote">"arguments"</span>
 type=<span class="code-quote">"map"</span>   access=<span class="code-quote">"RO"</span>
desc=<span class="code-quote">"Arguments supplied in exchange.declare"</span>/&gt;</span>

    <span class="code-tag">&lt;statistic name=<span class="code-quote">"producerCount"</span>
type=<span class="code-quote">"hilo32"</span>  desc=<span class="code-quote">"Current
producers on exchange"</span>/&gt;</span>
    <span class="code-tag">&lt;statistic name=<span class="code-quote">"bindingCount"</span>
 type=<span class="code-quote">"hilo32"</span>  desc=<span class="code-quote">"Current
bindings"</span>/&gt;</span>
    <span class="code-tag">&lt;statistic name=<span class="code-quote">"msgReceives"</span>
  type=<span class="code-quote">"count64"</span> desc=<span class="code-quote">"Total
messages received"</span>/&gt;</span>
    <span class="code-tag">&lt;statistic name=<span class="code-quote">"msgDrops"</span>
     type=<span class="code-quote">"count64"</span> desc=<span class="code-quote">"Total
messages dropped (no matching key)"</span>/&gt;</span>
    <span class="code-tag">&lt;statistic name=<span class="code-quote">"msgRoutes"</span>
    type=<span class="code-quote">"count64"</span> desc=<span class="code-quote">"Total
routed messages"</span>/&gt;</span>
    <span class="code-tag">&lt;statistic name=<span class="code-quote">"byteReceives"</span>
 type=<span class="code-quote">"count64"</span> desc=<span class="code-quote">"Total
bytes received"</span>/&gt;</span>
    <span class="code-tag">&lt;statistic name=<span class="code-quote">"byteDrops"</span>
    type=<span class="code-quote">"count64"</span> desc=<span class="code-quote">"Total
bytes dropped (no matching key)"</span>/&gt;</span>
    <span class="code-tag">&lt;statistic name=<span class="code-quote">"byteRoutes"</span>
   type=<span class="code-quote">"count64"</span> desc=<span class="code-quote">"Total
routed bytes"</span>/&gt;</span>
  <span class="code-tag">&lt;/class&gt;</span>
</pre>
</div></div>

<h3><a name="QpidManagementFramework-PropertiesandStatistics"></a>Properties
and Statistics</h3>

<p>&lt;property&gt; and &lt;statistic&gt; tags must be placed within
&lt;schema&gt; and &lt;/schema&gt; tags.</p>

<p>Properties, statistics, and methods are the building blocks of an object class. 
Properties and statistics are both object attributes, though they are treated differently.
 If an object attribute is defining, seldom or never changes, or is large in size, it should
be defined as a <em>property</em>.  If an attribute is rapidly changing or is
used to instrument the object (counters, etc.), it should be defined as a <em>statistic</em>.</p>

<p>The XML syntax for &lt;property&gt; and &lt;statistic&gt; have the
following XML-attributes:</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Attribute</th>
<th class='confluenceTh'>&lt;property&gt;</th>
<th class='confluenceTh'>&lt;statistic&gt;</th>
<th class='confluenceTh'>Meaning</th>
</tr>
<tr>
<td class='confluenceTd'>name</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>The name of the attribute</td>
</tr>
<tr>
<td class='confluenceTd'>type</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>The data type of the attribute</td>
</tr>
<tr>
<td class='confluenceTd'>unit</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>Optional unit name - use the singular (i.e. MByte)</td>
</tr>
<tr>
<td class='confluenceTd'>desc</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>Description to annotate the attribute</td>
</tr>
<tr>
<td class='confluenceTd'>references</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>If the type is "objId", names the referenced class</td>
</tr>
<tr>
<td class='confluenceTd'>access</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>Access rights (RC, RW, RO)</td>
</tr>
<tr>
<td class='confluenceTd'>index</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>"y" if this property is used to uniquely identify the object.
 There may be more than one index property in a class</td>
</tr>
<tr>
<td class='confluenceTd'>parentRef</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>"y" if this property references an object in which this object
is in a child-parent relationship.</td>
</tr>
<tr>
<td class='confluenceTd'>optional</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>"y" if this property is optional (i.e. may be NULL/not-present)</td>
</tr>
<tr>
<td class='confluenceTd'>min</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>Minimum value of a numeric attribute</td>
</tr>
<tr>
<td class='confluenceTd'>max</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>Maximum value of a numeric attribute</td>
</tr>
<tr>
<td class='confluenceTd'>maxLen</td>
<td class='confluenceTd'>Y</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>Maximum length of a string attribute</td>
</tr>
</tbody></table>

<h3><a name="QpidManagementFramework-Methods"></a>Methods</h3>

<p>&lt;method&gt; tags must be placed within &lt;schema&gt; and &lt;/schema&gt;
tags.</p>

<p>A <em>method</em> is an invokable function to be performed on instances
of the object class (i.e. a Remote Procedure Call).  A &lt;method&gt; tag has a name,
an optional description, and encloses zero or more arguments.  Method arguments are defined
by the &lt;arg&gt; tag and have a name, a type, a direction, and an optional description.
 The argument direction can be "I", "O", or "IO" indicating input, output, and input/output
respectively.  An example:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
   <span class="code-tag">&lt;method name=<span class="code-quote">"echo"</span>
desc=<span class="code-quote">"Request a response to test the path to the management
broker"</span>&gt;</span>
     <span class="code-tag">&lt;arg name=<span class="code-quote">"sequence"</span>
dir=<span class="code-quote">"IO"</span> type=<span class="code-quote">"uint32"</span>/&gt;</span>
     <span class="code-tag">&lt;arg name=<span class="code-quote">"body"</span>
    dir=<span class="code-quote">"IO"</span> type=<span class="code-quote">"lstr"</span>/&gt;</span>
   <span class="code-tag">&lt;/method&gt;</span>
</pre>
</div></div>

<h3><a name="QpidManagementFramework-EventClasses"></a>Event Classes</h3>

<h3><a name="QpidManagementFramework-DataTypes"></a>Data Types</h3>

<p>Object attributes, method arguments, and event arguments have data types.  The data
types are based on the rich data typing system provided by the AMQP messaging protocol.  The
following table describes the data types available for QMF:</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>QMF Type</th>
<th class='confluenceTh'>Description</th>
</tr>
<tr>
<td class='confluenceTd'>REF</td>
<td class='confluenceTd'>QMF Object ID - Used to reference another QMF object.</td>
</tr>
<tr>
<td class='confluenceTd'>U8</td>
<td class='confluenceTd'>8-bit unsigned integer</td>
</tr>
<tr>
<td class='confluenceTd'>U16</td>
<td class='confluenceTd'>16-bit unsigned integer</td>
</tr>
<tr>
<td class='confluenceTd'>U32</td>
<td class='confluenceTd'>32-bit unsigned integer</td>
</tr>
<tr>
<td class='confluenceTd'>U64</td>
<td class='confluenceTd'>64-bit unsigned integer</td>
</tr>
<tr>
<td class='confluenceTd'>S8</td>
<td class='confluenceTd'>8-bit signed integer</td>
</tr>
<tr>
<td class='confluenceTd'>S16</td>
<td class='confluenceTd'>16-bit signed integer</td>
</tr>
<tr>
<td class='confluenceTd'>S32</td>
<td class='confluenceTd'>32-bit signed integer</td>
</tr>
<tr>
<td class='confluenceTd'>S64</td>
<td class='confluenceTd'>64-bit signed integer</td>
</tr>
<tr>
<td class='confluenceTd'>BOOL</td>
<td class='confluenceTd'>Boolean - True or False</td>
</tr>
<tr>
<td class='confluenceTd'>SSTR</td>
<td class='confluenceTd'>Short String - String of up to 255 bytes</td>
</tr>
<tr>
<td class='confluenceTd'>LSTR</td>
<td class='confluenceTd'>Long String - String of up to 65535 bytes</td>
</tr>
<tr>
<td class='confluenceTd'>ABSTIME</td>
<td class='confluenceTd'>Absolute time since the epoch in nanoseconds (64-bits)</td>
</tr>
<tr>
<td class='confluenceTd'>DELTATIME</td>
<td class='confluenceTd'>Delta time in nanoseconds (64-bits)</td>
</tr>
<tr>
<td class='confluenceTd'>FLOAT</td>
<td class='confluenceTd'>Single precision floating point number</td>
</tr>
<tr>
<td class='confluenceTd'>DOUBLE</td>
<td class='confluenceTd'>Double precision floating point number</td>
</tr>
<tr>
<td class='confluenceTd'>UUID</td>
<td class='confluenceTd'>UUID - 128 bits</td>
</tr>
<tr>
<td class='confluenceTd'>FTABLE</td>
<td class='confluenceTd'>Field-table - std::map in C++, dictionary in Python</td>
</tr>
</tbody></table>

<p>In the XML schema definition, types go by different names and there are a number
of special cases.  This is because the XML schema is used in code-generation for the agent
API.  It provides options that control what kind of accessors are generated for attributes
of different types.  The following table enumerates the types available in the XML format,
which QMF types they map to, and other special handling that occurs.</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>XML Type</th>
<th class='confluenceTh'>QMF Type</th>
<th class='confluenceTh'>Accessor Style</th>
<th class='confluenceTh'>Special Characteristics</th>
</tr>
<tr>
<td class='confluenceTd'>objId</td>
<td class='confluenceTd'>REF</td>
<td class='confluenceTd'>Direct (get, set)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>uint8,16,32,64</td>
<td class='confluenceTd'>U8,16,32,64</td>
<td class='confluenceTd'>Direct (get, set)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>int8,16,32,64</td>
<td class='confluenceTd'>S8,16,32,64</td>
<td class='confluenceTd'>Direct (get, set)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>bool</td>
<td class='confluenceTd'>BOOL</td>
<td class='confluenceTd'>Direct (get, set)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>sstr</td>
<td class='confluenceTd'>SSTR</td>
<td class='confluenceTd'>Direct (get, set)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>lstr</td>
<td class='confluenceTd'>LSTR</td>
<td class='confluenceTd'>Direct (get, set)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>absTime</td>
<td class='confluenceTd'>ABSTIME</td>
<td class='confluenceTd'>Direct (get, set)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>deltaTime</td>
<td class='confluenceTd'>DELTATIME</td>
<td class='confluenceTd'>Direct (get, set)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>float</td>
<td class='confluenceTd'>FLOAT</td>
<td class='confluenceTd'>Direct (get, set)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>double</td>
<td class='confluenceTd'>DOUBLE</td>
<td class='confluenceTd'>Direct (get, set)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>uuid</td>
<td class='confluenceTd'>UUID</td>
<td class='confluenceTd'>Direct (get, set)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>map</td>
<td class='confluenceTd'>FTABLE</td>
<td class='confluenceTd'>Direct (get, set)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>hilo8,16,32,64</td>
<td class='confluenceTd'>U8,16,32,64</td>
<td class='confluenceTd'>Counter (inc, dec)</td>
<td class='confluenceTd'>Generates value, valueMin, valueMax</td>
</tr>
<tr>
<td class='confluenceTd'>count8,16,32,64</td>
<td class='confluenceTd'>U8,16,32,64</td>
<td class='confluenceTd'>Counter (inc, dec)</td>
<td class='confluenceTd'>&nbsp;</td>
</tr>
<tr>
<td class='confluenceTd'>mma32,64</td>
<td class='confluenceTd'>U32,64</td>
<td class='confluenceTd'>Direct</td>
<td class='confluenceTd'>Generates valueMin, valueMax, valueAverage, valueSamples</td>
</tr>
<tr>
<td class='confluenceTd'>mmaTime</td>
<td class='confluenceTd'>DELTATIME</td>
<td class='confluenceTd'>Direct</td>
<td class='confluenceTd'>Generates valueMin, valueMax, valueAverage, valueSamples</td>
</tr>
</tbody></table>

<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td
valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16"
align="absmiddle" alt="" border="0"></td><td><b>Important</b><br
/><p>When writing a schema using the XML format, types used in &lt;property&gt;
or &lt;arg&gt; must be types that have <em>Direct</em> accessor style.
 Any type may be used in &lt;statistic&gt; tags.</p></td></tr></table></div>

<h2><a name="QpidManagementFramework-ClassKeysandClassVersioning"></a>Class
Keys and Class Versioning</h2>

<h1><a name="QpidManagementFramework-TheQMFProtocol"></a>The QMF Protocol</h1>

<p>The QMF protocol defines the message formats and communication patterns used by the
different QMF components to communicate with one another.</p>

<p>A description of the current version of the QMF protocol can be found at <a href="/confluence/display/qpid/QMF+Protocol"
title="QMF Protocol">QMF Protocol</a>.</p>

<p>A proposal for an updated protocol based on map-messages is in progress and can be
found at <a href="/confluence/display/qpid/QMF+Map+Message+Protocol" title="QMF Map Message
Protocol">QMF Map Message Protocol</a>.</p>

<h1><a name="QpidManagementFramework-HowtoWriteaQMFConsole"></a>How to Write
a QMF Console</h1>

<p>Please see the <a href="/confluence/display/qpid/QMF+Python+Console+Tutorial"
title="QMF Python Console Tutorial">QMF Python Console Tutorial</a> for information
about using the console API with Python.</p>

<h1><a name="QpidManagementFramework-HowtoWriteaQMFAgent"></a>How to Write
a QMF Agent</h1>


     </div>
     <div id="commentsSection" class="wiki-content pageSection">
       <div style="float: right;">
            <a href="http://cwiki.apache.org/confluence/users/viewnotifications.action"
class="grey">Change Notification Preferences</a>
       </div>

       <a href="http://cwiki.apache.org/confluence/display/qpid/Qpid+Management+Framework">View
Online</a>
       |
       <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=95758&revisedVersion=22&originalVersion=21">View
Change</a>
              |
       <a href="http://cwiki.apache.org/confluence/display/qpid/Qpid+Management+Framework?showComments=true&amp;showCommentArea=true#addcomment">Add
Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org


Mime
View raw message