You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by jo...@apache.org on 2010/06/20 00:15:13 UTC

svn commit: r956304 [29/33] - in /qpid/site/docs/books/0.7: ./ AMQP-Messaging-Broker-CPP-Book/ AMQP-Messaging-Broker-CPP-Book/html-single/ AMQP-Messaging-Broker-CPP-Book/html-single/images/ AMQP-Messaging-Broker-CPP-Book/html-single/images/jmx_console/...

Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch13.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch13.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch13.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch13.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,1014 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 13.  AMQP .NET Messaging Client</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="pt04.html" title="Part IV. AMQP Messaging Clients Clients"><link rel="prev" href="ch12s02.html" title="2.  Examples"><link rel="next" href="ch13s02.html" title="2.  Examples"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. 
+    AMQP .NET Messaging Client
+  </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch12s02.html">Prev</a> </td><th width="60%" align="center">Part IV. AMQP Messaging Clients Clients</th><td width="20%" align="right"> <a accesskey="n" href="ch13s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 13.  AMQP .NET Messaging Client"><div class="titlepage"><div><div><h2 class="title"><a name="id2946269"></a>Chapter 13. 
+    AMQP .NET Messaging Client
+  </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch13.html#AMQP.NETMessagingClient-UserGuides">1. 
+      User Guides
+    </a></span></dt><dd><dl><dt><span class="section"><a href="ch13.html#id2964732">1.1. 
+    Apache Qpid: Open Source AMQP Messaging - .NET User Guide
+  </a></span></dt><dt><span class="section"><a href="ch13.html#id2996247">1.2. 
+    Excel AddIn
+  </a></span></dt><dt><span class="section"><a href="ch13.html#id2991428">1.3. 
+    WCF
+  </a></span></dt></dl></dd><dt><span class="section"><a href="ch13s02.html">2. 
+      Examples
+    </a></span></dt></dl></div><p>
+    Currently the .NET code base provides two client libraries that
+    are compatible respectively with AMQP 0.8 and 0.10. The 0.8 client
+    is located in <code class="filename">qpid\dotnet</code> and the 0.10 client
+    in: <code class="filename">qpid\dotnet\client-010</code>.
+  </p><p>
+    You will need an AMQP broker to fully use those client libraries.
+    Use M4 or later C++ broker for AMQP 0.10 or Java broker for AMQP
+    0.8/0.9.
+  </p><div class="section" title="1.  User Guides"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQP.NETMessagingClient-UserGuides"></a>1. 
+      User Guides
+    </h2></div></div></div><div class="section" title="1.1.  Apache Qpid: Open Source AMQP Messaging - .NET User Guide"><div class="titlepage"><div><div><h3 class="title"><a name="id2964732"></a>1.1. 
+    Apache Qpid: Open Source AMQP Messaging - .NET User Guide
+  </h3></div></div></div><div class="section" title="1.1.1.  Tutorial"><div class="titlepage"><div><div><h4 class="title"><a name="NETUserGuide-Tutorial"></a>1.1.1. 
+      Tutorial
+    </h4></div></div></div><p>
+      This tutorial consists of a series of examples using the three
+      most commonly used exchange types - Direct, Fanout and
+      Topic
+      exchanges. These examples show how to write applications that use
+      the most common messaging paradigms.
+    </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>direct</p><p>In the direct examples, a message producer writes to the direct
+	exchange, specifying a routing key. A message consumer reads
+	messages from a named queue. This illustrates clean separation
+	of concerns - message producers need to know only the exchange
+	and the routing key, message consumers need to know only which
+	queue to use on the broker.
+	</p></li><li class="listitem"><p>fanout</p><p>The fanout examples use a fanout exchange and do not use
+	routing keys. Each binding specifies that all messages for a
+	given exchange should be delivered to a given queue.
+	</p></li><li class="listitem"><p>pub-sub</p><p>In the publish/subscribe examples, a publisher
+	application writes messages to an exchange, specifying a
+	multi-part key. A subscriber application subscribes to
+	messages that match the relevant parts of these keys, using a
+	private queue for each subscription.
+	</p></li><li class="listitem"><p>request-response</p><p>In the request/response examples, a simple service accepts
+	requests from clients and sends responses back to them. Clients
+	create their own private queues and corresponding routing keys.
+	When a client sends a request to the server, it specifies its
+	own routing key in the reply-to field of the request. The
+	server uses the client's reply-to field as the routing key for
+	the response.
+	</p></li></ul></div><div class="section" title="1.1.1.1.  Running the Examples"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-RunningtheExamples"></a>1.1.1.1. 
+	Running the
+	Examples
+      </h5></div></div></div><p>
+	Before running the examples, you need to unzip the file
+	Qpid.NET-net-2.0-M4.zip, the following tree is created:
+      </p><pre class="programlisting">
+&lt;home&gt;
+  |-qpid
+     |-lib (contains the required dlls)
+     |-examples
+          |- direct
+          |    |-example-direct-Listener.exe
+          |    |-example-direct-Producer.exe
+          |- fanout
+          |    |-example-fanout-Listener.exe
+          |    |-example-fanout-Producer.exe
+          |- pub-sub
+          |    |-example-pub-sub-Listener.exe
+          |    |-example-pub-sub-Publisher.exe
+          |- request-response
+               |-example-request-response-Client.exe
+               |-example-request-response-Server.exe
+      </pre><p>
+	Make sure your PATH contains the directory
+	&lt;home&gt;/qpid/lib
+	The examples can be run by executing the provided exe files:
+      </p><pre class="programlisting">
+$ cd &lt;home&gt;/qpid/examples/examplefolder
+$ example-...-.exe [hostname] [portnumber]
+      </pre><p>
+	where [hostname] is the qpid broker host name
+	(default is localhost) and [portnumber] is the port number on which the
+	qpid broker is accepting connection (default is 5672).
+      </p></div><div class="section" title="1.1.1.2.  Creating and Closing Sessions"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-CreatingandClosingSessions"></a>1.1.1.2. 
+	Creating
+	and Closing Sessions
+      </h5></div></div></div><p>
+      All of the examples have been written using the Apache Qpid .NEt
+      0.10 API. The examples use the same skeleton code to initialize
+      the program, create a session, and clean up before exiting:
+    </p><pre class="programlisting">
+using System;
+using System.IO;
+using System.Text;
+using System.Threading;
+using org.apache.qpid.client;
+using org.apache.qpid.transport;
+
+...
+
+        private static void Main(string[] args)
+        {
+            string host = args.Length &gt; 0 ? args[0] : "localhost";
+            int port = args.Length &gt; 1 ? Convert.ToInt32(args[1]) : 5672;
+            Client connection = new Client();
+            try
+            {
+                connection.connect(host, port, "test", "guest", "guest");
+                ClientSession session = connection.createSession(50000);
+
+                //--------- Main body of program --------------------------------------------
+
+                connection.close();
+            }
+            catch (Exception e)
+            {
+                Console.WriteLine("Error: \n" + e.StackTrace);
+            }
+        }
+...
+    </pre></div><div class="section" title="1.1.1.3.  Writing Direct Applications"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-WritingDirectApplications"></a>1.1.1.3. 
+	Writing
+	Direct Applications
+      </h5></div></div></div><p>
+      This section describes two programs that implement direct
+      messaging using a Direct exchange:
+      &#8226; org.apache.qpid.example.direct.Producer (from
+      example-direct-producer) publishes messages to the amq.direct
+      exchange, using the routing key routing_key.
+      &#8226;org.apache.qpid.example.direct.Listener (from
+      example-direct-Listener) uses a message listener to receive
+      messages from the queue named message_queue.
+    </p><div class="section" title="1.1.1.3.1.  Running the Direct Examples"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-RunningtheDirectExamples"></a>1.1.1.3.1. 
+	Running the
+	Direct Examples
+      </h6></div></div></div><p>
+      1) Make sure your PATH contains the directory
+      &lt;home&gt;/qpid/lib
+    </p><p>
+      2) Make sure that a qpid broker is running:
+    </p><pre class="programlisting">
+$ ps -eaf | grep qpidd
+    </pre><p>
+      If a broker is running, you should see the qpidd process in the
+      output of the above
+      command.
+    </p><p>
+      3) Read the messages from the message queue using direct
+      listener, as follows:
+    </p><pre class="programlisting">
+$ cd &lt;home&gt;/qpid/examples/direct
+    </pre><p>
+      With cygwin:
+    </p><pre class="programlisting">
+$ ./example-direct-Listener.exe [hostname] [portnumber]
+    </pre><p>
+      or with mono:
+    </p><pre class="programlisting">
+$ mono ./example-direct-Listener.exe [hostname] [portnumber]
+    </pre><p>
+      This program is waiting for messages to be published, see next
+      step:
+    </p><p>
+      4) Publish a series of messages to the amq.direct exchange by
+      running direct producer, as follows:
+    </p><pre class="programlisting">
+$ cd &lt;home&gt;/qpid/examples/direct
+    </pre><p>
+      With cygwin:
+    </p><pre class="programlisting">
+$ ./example-direct-Producer.exe  [hostname] [portnumber]
+    </pre><p>
+      or with mono:
+    </p><pre class="programlisting">
+$ mono ./example-direct-Producer.exe [hostname] [portnumber]
+    </pre><p>
+      This program has no output; the messages are routed to the
+      message queue, as instructed by the binding.
+    </p><p>
+      5) Go to the windows where you are running your listener. You
+      should see the following output:
+    </p><pre class="programlisting">
+Message: Message 0
+Message: Message 1
+Message: Message 2
+Message: Message 3
+Message: Message 4
+Message: Message 5
+Message: Message 6
+Message: Message 7
+Message: Message 8
+Message: Message 9
+Message: That's all, folks!
+    </pre><p>
+      Now we will examine the code for each of these programs. In each
+      section, we will discuss only
+      the code that must be added to the skeleton shown in Section
+      "Creating and Closing Sessions".
+    </p></div><div class="section" title="1.1.1.3.2.  Reading Messages from the Queue"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-ReadingMessagesfromtheQueue"></a>1.1.1.3.2. 
+	Reading
+	Messages from the Queue
+      </h6></div></div></div><p>
+      The program , listener.cs, is a message listener that receives
+      messages from a queue.
+    </p><p>
+      First it creates a queue named message_queue, then binds it to
+      the amq.direct exchange using the binding key routing_key.
+    </p><pre class="programlisting">
+//--------- Main body of program --------------------------------------------
+// Create a queue named "message_queue", and route all messages whose
+// routing key is "routing_key" to this newly created queue.
+session.queueDeclare("message_queue");
+session.exchangeBind("message_queue", "amq.direct", "routing_key");    
+    </pre><p>
+      The queue created by this program continues to exist after the
+      program exits, and any message whose routing key matches the key
+      specified in the binding will be routed to the corresponding
+      queue by the broker. Note that the queue could have been be
+      deleted using the following code:
+    </p><pre class="programlisting">
+session.queueDelete("message_queue");
+    </pre><p>
+      To create a message listener, create a class derived from
+      IMessageListener, and override the messageTransfer method,
+      providing the code that should be executed when a message is
+      received.
+    </p><pre class="programlisting">
+public class MessageListener : IMessageListener
+{
+  ......
+  public void messageTransfer(IMessage m)
+  {
+  .....
+}
+    </pre><p>
+      The main body of the program creates a listener for the
+      subscription; attaches the listener to a message queue; and
+      subscribe to the queue to receive messages from the queue.
+    </p><pre class="programlisting">
+lock (session)
+{
+  // Create a listener and subscribe it to the queue named "message_queue"
+  IMessageListener listener = new MessageListener(session);
+  session.attachMessageListener(listener, "message_queue");                              
+  session.messageSubscribe("message_queue");
+  // Receive messages until all messages are received
+  Monitor.Wait(session);
+}
+    </pre><p>
+      The MessageListener's messageTransfer() function is called
+      whenever a message is received. In this example the message is
+      printed and tested to see if it is the final message. Once the
+      final message is received, the messages are acknowledged.
+    </p><pre class="programlisting">
+BinaryReader reader = new BinaryReader(m.Body, Encoding.UTF8);
+byte[] body = new byte[m.Body.Length - m.Body.Position];
+reader.Read(body, 0, body.Length);
+ASCIIEncoding enc = new ASCIIEncoding();
+string message = enc.GetString(body);
+ Console.WriteLine("Message: " + message);
+// Add this message to the list of message to be acknowledged 
+_range.add(m.Id);       
+if( message.Equals("That's all, folks!") )
+{
+  // Acknowledge all the received messages 
+  _session.messageAccept(_range);     
+  lock(_session)
+  {
+      Monitor.Pulse(_session);
+  }
+}
+    </pre></div><div class="section" title="1.1.1.3.3.  Publishing Messages to a Direct Exchange"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-PublishingMessagestoaDirectExchange"></a>1.1.1.3.3. 
+	Publishing
+	Messages to a Direct Exchange
+      </h6></div></div></div><p>
+      The second program in the direct example, Producer.cs, publishes
+      messages to the amq.direct exchange using the routing key
+      routing_key.
+    </p><p>
+      First, create a message and set a routing key. The same routing
+      key will be used for each message we send, so you only need to
+      set this property once.
+    </p><pre class="programlisting">
+IMessage message = new Message();
+// The routing key is a message property. We will use the same
+// routing key for each message, so we'll set this property
+// just once. (In most simple cases, there is no need to set
+// other message properties.)
+message.DeliveryProperties.setRoutingKey("routing_key"); 
+    </pre><p>
+      Now send some messages:
+    </p><pre class="programlisting">
+// Asynchronous transfer sends messages as quickly as
+// possible without waiting for confirmation.
+for (int i = 0; i &lt; 10; i++)
+{
+  message.clearData();
+  message.appendData(Encoding.UTF8.GetBytes("Message " + i));                  
+  session.messageTransfer("amq.direct", message);                    
+}
+    </pre><p>
+      Send a final synchronous message to indicate termination:
+    </p><pre class="programlisting">
+// And send a syncrhonous final message to indicate termination.
+message.clearData();
+message.appendData(Encoding.UTF8.GetBytes("That's all, folks!"));
+session.messageTransfer("amq.direct", "routing_key", message); 
+session.sync();
+    </pre></div></div><div class="section" title="1.1.1.4.  Writing Fanout Applications"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-WritingFanoutApplications"></a>1.1.1.4. 
+	Writing
+	Fanout Applications
+      </h5></div></div></div><p>
+      This section describes two programs that illustrate the use of a
+      Fanout exchange.
+    </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Listener.cs makes a unique queue private for each instance of
+	the listener, and binds that queue to the fanout exchange. All
+	messages sent to the fanout exchange are delivered to each
+	listener's queue.
+	</p></li><li class="listitem"><p>Producer.cs publishes messages to the fanout exchange. It
+	does not use a routing key, which is not needed by the fanout
+	exchange.
+	</p></li></ul></div><div class="section" title="1.1.1.4.1.  Running the Fanout Examples"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-RunningtheFanoutExamples"></a>1.1.1.4.1. 
+	Running the
+	Fanout Examples
+      </h6></div></div></div><p>
+      1) Make sure your PATH contains the directory
+      &lt;home&gt;/qpid/lib
+    </p><p>
+      2) Make sure that a qpid broker is running:
+    </p><pre class="programlisting">
+$ ps -eaf | grep qpidd
+    </pre><p>
+      If a broker is running, you should see the qpidd process in the
+      output of the above
+      command.
+    </p><p>
+      3) In separate windows, start one or more fanout listeners as
+      follows:
+    </p><pre class="programlisting">
+$ cd &lt;home&gt;/qpid/examples/direct
+    </pre><p>
+      With cygwin:
+    </p><pre class="programlisting">
+$ ./example-fanout-Listener.exe [hostname] [portnumber]
+    </pre><p>
+      or with mono:
+    </p><pre class="programlisting">
+$ mono ./example-fanout-Listener.exe [hostname] [portnumber]
+    </pre><p>
+      The listener creates a private queue, binds it to the amq.fanout
+      exchange, and waits for messages to arrive on the queue. When the
+      listener starts, you will see the following message:
+    </p><pre class="programlisting">
+Listening
+    </pre><p>
+      This program is waiting for messages to be published, see next
+      step:
+    </p><p>
+      4) In a separate window, publish a series of messages to the
+      amq.fanout exchange by running fanout producer, as follows:
+    </p><pre class="programlisting">
+$ cd &lt;home&gt;/qpid/examples/direct
+    </pre><p>
+      With cygwin:
+    </p><pre class="programlisting">
+$ ./example-fanout-Producer.exe  [hostname] [portnumber]
+    </pre><p>
+      or with mono:
+    </p><pre class="programlisting">
+$ mono ./example-fanout-Producer.exe [hostname] [portnumber]
+    </pre><p>
+      This program has no output; the messages are routed to the
+      message queue, as prescribed by the binding.
+    </p><p>
+      5) Go to the windows where you are running listeners. You should
+      see the following output for each listener:
+    </p><pre class="programlisting">
+Message: Message 0
+Message: Message 1
+Message: Message 2
+Message: Message 3
+Message: Message 4
+Message: Message 5
+Message: Message 6
+Message: Message 7
+Message: Message 8
+Message: Message 9
+Message: That's all, folks!
+    </pre><p>
+      Now we will examine the code for each of these programs. In each
+      section, we will discuss only
+      the code that must be added to the skeleton shown in Section
+      "Creating and Closing Sessions".
+    </p></div></div><div class="section" title="1.1.1.5.  Consuming from a Fanout Exchange"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-ConsumingfromaFanoutExchange"></a>1.1.1.5. 
+	Consuming from a
+	Fanout Exchange
+      </h5></div></div></div><p>
+      The first program in the fanout example, Listener.cs, creates a
+      private queue, binds it to the amq.fanout exchange, and waits for
+      messages to arrive on the queue, printing them out as they
+      arrive. It uses a Listener that is identical to the one used in
+      the direct example:
+    </p><pre class="programlisting">
+  public class MessageListener : IMessageListener
+    {
+        private readonly ClientSession _session;
+        private readonly RangeSet _range = new RangeSet();
+        public MessageListener(ClientSession session)
+        {
+            _session = session;
+        }
+
+        public void messageTransfer(IMessage m)
+        {
+            BinaryReader reader = new BinaryReader(m.Body, Encoding.UTF8);
+            byte[] body = new byte[m.Body.Length - m.Body.Position];
+            reader.Read(body, 0, body.Length);
+            ASCIIEncoding enc = new ASCIIEncoding();
+            string message = enc.GetString(body);
+            Console.WriteLine("Message: " + message);
+            // Add this message to the list of message to be acknowledged 
+            _range.add(m.Id);
+            if (message.Equals("That's all, folks!"))
+            {
+                // Acknowledge all the received messages 
+                _session.messageAccept(_range);
+                lock (_session)
+                {
+                    Monitor.Pulse(_session);
+                }
+            }
+        }
+    }
+    </pre><p>
+      The listener creates a private queue to receive its messages and
+      binds it to the fanout exchange:
+    </p><pre class="programlisting">
+string myQueue = session.Name;
+session.queueDeclare(myQueue, Option.EXCLUSIVE, Option.AUTO_DELETE);
+session.exchangeBind(myQueue, "amq.fanout", "my-key");
+    </pre><p>
+      Now we create a listener and subscribe it to the queue:
+    </p><pre class="programlisting">
+lock (session)
+{
+   Console.WriteLine("Listening");
+   // Create a listener and subscribe it to my queue.
+   IMessageListener listener = new MessageListener(session);
+   session.attachMessageListener(listener, myQueue);
+   session.messageSubscribe(myQueue);
+   // Receive messages until all messages are received
+   Monitor.Wait(session);
+}
+    </pre><div class="section" title="1.1.1.5.1.  Publishing Messages to the Fanout Exchange"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-PublishingMessagestotheFanoutExchange"></a>1.1.1.5.1. 
+	Publishing
+	Messages to the Fanout Exchange
+      </h6></div></div></div><p>
+      The second program in this example, Producer.cs, writes messages
+      to the fanout queue.
+    </p><pre class="programlisting">
+// Unlike topic exchanges and direct exchanges, a fanout
+// exchange need not set a routing key. 
+IMessage message = new Message();
+// Asynchronous transfer sends messages as quickly as
+// possible without waiting for confirmation.
+for (int i = 0; i &lt; 10; i++)
+{
+    message.clearData();
+    message.appendData(Encoding.UTF8.GetBytes("Message " + i));
+    session.messageTransfer("amq.fanout", message);
+}
+
+// And send a syncrhonous final message to indicate termination.
+message.clearData();
+message.appendData(Encoding.UTF8.GetBytes("That's all, folks!"));
+session.messageTransfer("amq.fanout", message);
+session.sync();
+    </pre></div></div><div class="section" title="1.1.1.6.  Writing Publish/Subscribe Applications"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-WritingPublish-2FSubscribeApplications"></a>1.1.1.6. 
+	Writing
+	Publish/Subscribe Applications
+      </h5></div></div></div><p>
+      This section describes two programs that implement
+      Publish/Subscribe messaging using a topic exchange.
+    </p><p>
+      &#8226; Publisher.cS sends messages to the amq.topic exchange,
+      using the multipart routing keys usa.news, usa.weather,
+      europe.news, and europe.weather.
+      &#8226; Listener.cs creates private queues for news, weather,
+      usa, and europe, binding them to the amq.topic exchange using
+      bindings that match the corresponding parts of the multipart
+      routing keys.
+    </p><p>
+      In this example, the publisher creates messages for topics like
+      news, weather, and sports that happen in regions like Europe,
+      Asia, or the United States. A given consumer may be interested in
+      all weather messages, regardless of region, or it may be
+      interested in news and weather for the United States, but
+      uninterested in items for other regions. In this example, each
+      consumer sets up its own private queues, which receive precisely
+      the messages that particular consumer is interested in.
+    </p><div class="section" title="1.1.1.6.1.  Running the Publish-Subscribe Examples"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-RunningthePublishSubscribeExamples"></a>1.1.1.6.1. 
+	Running
+	the Publish-Subscribe Examples
+      </h6></div></div></div><p>
+      1) Make sure your PATH contains the directory
+      &lt;home&gt;/qpid/lib
+    </p><p>
+      2) Make sure that a qpid broker is running:
+    </p><pre class="programlisting">
+$ ps -eaf | grep qpidd
+    </pre><p>
+      If a broker is running, you should see the qpidd process in the
+      output of the above
+      command.
+    </p><p>
+      3) In separate windows, start one or more topic subscribers as
+      follows:
+    </p><pre class="programlisting">
+$ cd &lt;home&gt;/qpid/examples/direct
+    </pre><p>
+      With cygwin:
+    </p><pre class="programlisting">
+$ ./example-pub-sub--Listener.exe [hostname] [portnumber]
+    </pre><p>
+      or with mono:
+    </p><pre class="programlisting">
+$ mono ./example-pub-sub-Listener.exe [hostname] [portnumber]
+    </pre><p>
+      You will see output similar to this:
+    </p><pre class="programlisting">
+Listening for messages ...
+Declaring queue: usa
+Declaring queue: europe
+Declaring queue: news
+Declaring queue: weather
+    </pre><p>
+      Each topic consumer creates a set of private queues, and binds
+      each queue to the amq.topic exchange together with a binding that
+      indicates which messages should be routed to the queue.
+    </p><p>
+      4) In another window, start the topic publisher, which publishes
+      messages to the amq.topic exchange, as follows:
+    </p><pre class="programlisting">
+$ cd &lt;home&gt;/qpid/examples/direct
+    </pre><p>
+      With cygwin:
+    </p><pre class="programlisting">
+$ ./example-pub-sub-Producer.exe  [hostname] [portnumber]
+    </pre><p>
+      or with mono:
+    </p><pre class="programlisting">
+$ mono ./example-pub-sub-Producer.exe [hostname] [portnumber]
+    </pre><p>
+      This program has no output; the messages are routed to the
+      message queues for each topic_consumer as specified by the
+      bindings the consumer created.
+    </p><p>
+      5) Go back to the window for each topic consumer. You should see
+      output like this:
+    </p><pre class="programlisting">
+Message: Message 0 from usa
+Message: Message 0 from news
+Message: Message 0 from weather
+Message: Message 1 from usa
+Message: Message 1 from news
+Message: Message 2 from usa
+Message: Message 2 from news
+Message: Message 3 from usa
+Message: Message 3 from news
+Message: Message 4 from usa
+Message: Message 4 from news
+Message: Message 5 from usa
+Message: Message 5 from news
+Message: Message 6 from usa
+Message: Message 6 from news
+Message: Message 7 from usa
+Message: Message 7 from news
+Message: Message 8 from usa
+Message: Message 8 from news
+Message: Message 9 from usa
+....
+Message: That's all, folks! from weather
+Shutting down listener for control
+Message: That's all, folks! from europe
+Shutting down listener for control
+    </pre><p>
+      Now we will examine the code for each of these programs. In each
+      section, we will discuss only
+      the code that must be added to the skeleton shown in Section
+      "Creating and Closing Sessions".
+    </p></div><div class="section" title="1.1.1.6.2.  Publishing Messages to a Topic Exchange"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-PublishingMessagestoaTopicExchange"></a>1.1.1.6.2. 
+	Publishing
+	Messages to a Topic Exchange
+      </h6></div></div></div><p>
+      The first program in the publish/subscribe example, Publisher.cs,
+      defines two new functions: one that publishes messages to the
+      topic exchange, and one that indicates that no more messages are
+      coming.
+    </p><p>
+      The publishMessages function publishes a series of five messages
+      using the specified routing key.
+    </p><pre class="programlisting">
+private static void publishMessages(ClientSession session, string routing_key)
+{
+ IMessage message = new Message();
+ // Asynchronous transfer sends messages as quickly as
+ // possible without waiting for confirmation.
+ for (int i = 0; i &lt; 10; i++)
+ {
+    message.clearData();
+    message.appendData(Encoding.UTF8.GetBytes("Message " + i));
+    session.messageTransfer("amq.topic", routing_key, message);
+ }
+}
+    </pre><p>
+      The noMoreMessages function signals the end of messages using the
+      control routing key, which is reserved for control messages.
+    </p><pre class="programlisting">
+private static void noMoreMessages(ClientSession session)
+{
+  IMessage message = new Message();
+  // And send a syncrhonous final message to indicate termination.
+  message.clearData();
+  message.appendData(Encoding.UTF8.GetBytes("That's all, folks!"));
+  session.messageTransfer("amq.topic", "control", message);
+  session.sync();
+}
+    </pre><p>
+      In the main body of the program, messages are published using
+      four different routing keys, and then the end of messages is
+      indicated by a message sent to a separate routing key.
+    </p><pre class="programlisting">
+publishMessages(session, "usa.news");
+publishMessages(session, "usa.weather");
+publishMessages(session, "europe.news");
+publishMessages(session, "europe.weather");
+
+noMoreMessages(session);
+    </pre></div><div class="section" title="1.1.1.6.3.  Reading Messages from the Queue"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-ReadingMessagesfromtheQueue2"></a>1.1.1.6.3. 
+	Reading
+	Messages from the Queue
+      </h6></div></div></div><p>
+      The second program in the publish/subscribe example, Listener.cs,
+      creates a local private queue, with a unique name, for each of
+      the four binding keys it specifies: usa.#, europe.#, #.news, and
+      #.weather, and creates a listener.
+    </p><pre class="programlisting">
+Console.WriteLine("Listening for messages ...");
+// Create a listener                    
+prepareQueue("usa", "usa.#", session);
+prepareQueue("europe", "europe.#", session);
+prepareQueue("news", "#.news", session);
+prepareQueue("weather", "#.weather", session);
+    </pre><p>
+      The prepareQueue() method creates a queue using a queue name and
+      a routing key supplied as arguments it then attaches a listener
+      with the session for the created queue and subscribe for this
+      receiving messages from the queue:
+    </p><pre class="programlisting">
+// Create a unique queue name for this consumer by concatenating
+// the queue name parameter with the Session ID.     
+Console.WriteLine("Declaring queue: " + queue);
+session.queueDeclare(queue, Option.EXCLUSIVE, Option.AUTO_DELETE);
+
+// Route messages to the new queue if they match the routing key.
+// Also route any messages to with the "control" routing key to
+// this queue so we know when it's time to stop. A publisher sends
+// a message with the content "That's all, Folks!", using the
+// "control" routing key, when it is finished.
+
+session.exchangeBind(queue, "amq.topic", routing_key);
+session.exchangeBind(queue, "amq.topic", "control");
+
+// subscribe the listener to the queue
+IMessageListener listener = new MessageListener(session);
+session.attachMessageListener(listener, queue);
+session.messageSubscribe(queue);
+    </pre></div></div><div class="section" title="1.1.1.7.  Writing Request/Response Applications"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-WritingRequest-2FResponseApplications"></a>1.1.1.7. 
+	Writing
+	Request/Response Applications
+      </h5></div></div></div><p>
+      In the request/response examples, we write a server that accepts
+      strings from clients and converts them to upper case, sending the
+      result back to the requesting client. This example consists of
+      two programs.
+    </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Client.cs is a client application that sends messages to the
+	server.
+	&#8226; Server.cs is a service that accepts messages, converts
+	their content to upper case, and sends the result to the
+	amq.direct exchange, using the request's reply-to property as
+	the routing key for the response.
+	</p></li></ul></div><div class="section" title="1.1.1.7.1.  Running the Request/Response Examples"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-RunningtheRequest-2FResponseExamples"></a>1.1.1.7.1. 
+	Running
+	the Request/Response Examples
+      </h6></div></div></div><p>
+      1) Make sure your PATH contains the directory
+      &lt;home&gt;/qpid/lib
+    </p><p>
+      2) Make sure that a qpid broker is running:
+    </p><pre class="programlisting">
+$ ps -eaf | grep qpidd
+    </pre><p>
+      If a broker is running, you should see the qpidd process in the
+      output of the above
+      command.
+    </p><p>
+      3) Run the server.
+    </p><p>
+      $ cd &lt;home&gt;/qpid/examples/direct
+    </p><pre class="programlisting">
+      With cygwin: 
+    </pre><p>
+      $ ./example-request-response-Server.exe [hostname] [portnumber]
+    </p><pre class="programlisting">
+      or with mono:
+    </pre><p>
+      $ mono ./example-request-response-Server.exe  [hostname] [portnumber]
+    </p><pre class="programlisting">
+      You will see output similar to this:
+    </pre><p>
+      Waiting for requests
+    </p><pre class="programlisting">
+4) In a separate window, start a client:
+
+$ cd &lt;home&gt;/qpid/examples/direct
+    </pre><p>
+      With cygwin:
+    </p><pre class="programlisting">
+$ ./example-request-response-Client.exe [hostname] [portnumber]
+    </pre><p>
+      or with mono:
+    </p><pre class="programlisting">
+$ mono ./example-request-response-Client.exe [hostname] [portnumber]
+    </pre><p>
+      You will see output similar to this:
+    </p><pre class="programlisting">
+Activating response queue listener for: clientSystem.Byte[]
+Waiting for all responses to arrive ...
+Response: TWAS BRILLIG, AND THE SLITHY TOVES
+Response: DID GIRE AND GYMBLE IN THE WABE.
+Response: ALL MIMSY WERE THE BOROGROVES,
+Response: AND THE MOME RATHS OUTGRABE.
+Shutting down listener for clientSystem.Byte[]
+Response: THAT'S ALL, FOLKS!
+    </pre><p>
+      4) Go back to the server window, the output should be similar to
+      this:
+    </p><pre class="programlisting">
+Waiting for requests
+Request: Twas brillig, and the slithy toves
+Request: Did gire and gymble in the wabe.
+Request: All mimsy were the borogroves,
+Request: And the mome raths outgrabe.
+Request: That's all, folks!
+    </pre><p>
+      Now we will examine the code for each of these programs. In each
+      section, we will discuss only the code that must be added to the
+      skeleton shown in Section "Creating and Closing Sessions".
+    </p></div><div class="section" title="1.1.1.7.2.  The Client Application"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-TheClientApplication"></a>1.1.1.7.2. 
+	The Client
+	Application
+      </h6></div></div></div><p>
+      The first program in the request-response example, Client.cs,
+      sets up a private response queue to receive responses from the
+      server, then sends messages the server, listening to the response
+      queue for the server's responses.
+    </p><pre class="programlisting">
+string response_queue = "client" + session.getName();
+// Use the name of the response queue as the routing key
+session.queueDeclare(response_queue);
+session.exchangeBind(response_queue, "amq.direct", response_queue);
+
+// Create a listener for the response queue and listen for response messages.
+Console.WriteLine("Activating response queue listener for: " + response_queue);
+IMessageListener listener = new ClientMessageListener(session);
+session.attachMessageListener(listener, response_queue);
+session.messageSubscribe(response_queue);
+    </pre><p>
+      Set some properties that will be used for all requests. The
+      routing key for a request is request.
+      The reply-to property is set to the routing key for the client's
+      private queue.
+    </p><pre class="programlisting">
+IMessage request = new Message();
+request.DeliveryProperties.setRoutingKey("request");
+request.MessageProperties.setReplyTo(new ReplyTo("amq.direct", response_queue));
+    </pre><p>
+      Now send some requests...
+    </p><pre class="programlisting">
+string[] strs = {
+                 "Twas brillig, and the slithy toves",
+                 "Did gire and gymble in the wabe.",
+                 "All mimsy were the borogroves,",
+                 "And the mome raths outgrabe.",
+                 "That's all, folks!"
+                };
+foreach (string s in strs)
+{
+ request.clearData();
+ request.appendData(Encoding.UTF8.GetBytes(s));
+ session.messageTransfer("amq.direct", request);
+}
+    </pre><p>
+      And wait for responses to arrive:
+    </p><pre class="programlisting">
+Console.WriteLine("Waiting for all responses to arrive ...");
+Monitor.Wait(session);
+    </pre></div><div class="section" title="1.1.1.7.3.  The Server Application"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-TheServerApplication"></a>1.1.1.7.3. 
+	The Server
+	Application
+      </h6></div></div></div><p>
+      The second program in the request-response example, Server.cs,
+      uses the reply-to property as the routing key for responses.
+    </p><p>
+      The main body of Server.cs creates an exclusive queue for
+      requests, then waits for messages to arrive.
+    </p><pre class="programlisting">
+const string request_queue = "request";
+// Use the name of the request queue as the routing key
+session.queueDeclare(request_queue);
+session.exchangeBind(request_queue, "amq.direct", request_queue);
+
+lock (session)
+{
+ // Create a listener and subscribe it to the request_queue      
+ IMessageListener listener = new MessageListener(session);
+ session.attachMessageListener(listener, request_queue);
+ session.messageSubscribe(request_queue);
+ // Receive messages until all messages are received
+ Console.WriteLine("Waiting for requests");
+ Monitor.Wait(session);
+}
+    </pre><p>
+      The listener's messageTransfer() method converts the request's
+      content to upper case, then sends a response to the broker, using
+      the request's reply-to property as the routing key for the
+      response.
+    </p><pre class="programlisting">
+BinaryReader reader = new BinaryReader(request.Body, Encoding.UTF8);
+byte[] body = new byte[request.Body.Length - request.Body.Position];
+reader.Read(body, 0, body.Length);
+ASCIIEncoding enc = new ASCIIEncoding();
+string message = enc.GetString(body);
+Console.WriteLine("Request: " + message);
+            
+// Transform message content to upper case
+string responseBody = message.ToUpper();
+
+// Send it back to the user
+response.clearData();
+response.appendData(Encoding.UTF8.GetBytes(responseBody));
+_session.messageTransfer("amq.direct", routingKey, response);
+    </pre></div></div></div></div><div class="section" title="1.2.  Excel AddIn"><div class="titlepage"><div><div><h3 class="title"><a name="id2996247"></a>1.2. 
+    Excel AddIn
+  </h3></div></div></div><div class="section" title="1.2.1.  Excel AddIn"><div class="titlepage"><div><div><h4 class="title"><a name="ExcelAddIn-ExcelAddIn"></a>1.2.1. 
+      Excel AddIn
+    </h4></div></div></div><p>
+      Qpid .net comes with Excel AddIns that are located in:
+    </p><p>
+      <code class="filename">&lt;project-root&gt;\qpid\dotnet\client-010\addins</code>
+    </p><p>
+      There are currently three projects:
+    </p><div class="variablelist"><dl><dt><span class="term">ExcelAddIn</span></dt><dd><p>An RTD excel Addin</p></dd><dt><span class="term">ExcelAddInProducer
+	</span></dt><dd><p>A sample client to demonstrate the RTD AddIn</p></dd><dt><span class="term">ExcelAddInMessageProcessor
+	</span></dt><dd><p>A sample message processor for the RTD AddIn</p></dd></dl></div><div class="section" title="1.2.1.1.  Qpid RDT AddIn"><div class="titlepage"><div><div><h5 class="title"><a name="ExcelAddIn-QpidRDTAddIn"></a>1.2.1.1. 
+	Qpid RDT AddIn
+      </h5></div></div></div><div class="section" title="1.2.1.1.1.  Deploying the RTD AddIn"><div class="titlepage"><div><div><h6 class="title"><a name="ExcelAddIn-DeployingtheRTDAddIn"></a>1.2.1.1.1. 
+	  Deploying the RTD
+	  AddIn
+	</h6></div></div></div><p>
+	  Excel provides a function called RTD (real-time data) that lets
+	  you specify a COM server via its ProgId here "Qpid" so that you
+	  can push qpid messages into Excel.
+	</p><p>
+	  The provided RTD AddIn consumes messages from one queue and
+	  process them through a provided message processor.
+	</p><p>
+	  For using the Qpid RTD follows those steps:
+	</p><div class="procedure"><ol class="procedure" type="1"><li class="step" title="Step 1"><p>
+            Copy the configuration Excel.exe.config into <code class="filename">Drive\Program Files\Microsoft Office\Office12</code>.
+          </p></li><li class="step" title="Step 2"><p>
+            Edit <code class="filename">Excel.exe.xml</code> and set the targeted Qpid broker host, port
+            number, username and password.
+          </p></li><li class="step" title="Step 3"><p>
+            Select the cell or cell range to contain the RTD information
+          </p></li><li class="step" title="Step 4"><p>
+            Enter the following formula <span class="command"><strong>=rtd("Qpid",,"myQueue")</strong></span>. Where
+            MyQueue is the queue from which you wish to receive messages from.
+          </p></li></ol></div><p>
+	  Note: The Qpid RTD is a COM-AddIn that must be registered with
+	  Excel. This is done automatically when compiling the Addin with
+	  visual studio.
+	</p></div><div class="section" title="1.2.1.1.2.  Defining a message processor"><div class="titlepage"><div><div><h6 class="title"><a name="ExcelAddIn-Definingamessageprocessor"></a>1.2.1.1.2. 
+            Defining a message processor
+    </h6></div></div></div><p>
+      The default behavior of the RDT AddIn is to display the message
+            payload. This could be altered by specifying your own message
+            processor.
+            A Message processor is a class that implements the API
+            <span class="command"><strong>ExcelAddIn.MessageProcessor</strong></span>. For example, the provided processor
+            in <code class="filename">client-010\addins\ExcelAddInMessageProcessor</code> displays the
+            message body and the the header price when specified.
+          </p><p> 
+            To use you own message processor follows those steps:
+	  </p><div class="procedure"><ol class="procedure" type="1"><li class="step" title="Step 1"><p>Write your own message processor that extends ExcelAddIn.MessageProcessor</p></li><li class="step" title="Step 2"><p>Edit Excel.exe.config and uncomment the entries:</p><pre class="programlisting">
+&lt;add key="ProcessorAssembly"
+value="&lt;path&gt;\qpid\dotnet\client-010\addins\ExcelAddInMessageProcessor\bin\Debug\ExcelAddInMessageProcessor.dll"/&gt;
+	    </pre><pre class="programlisting">
+            &lt;add key="ProcessorClass"
+            value="ExcelAddInMessageProcessor.Processor"/&gt;
+	    </pre><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>ProcessorAssembly is the path on the Assembly that contains
+		your processor class
+		</p></li><li class="listitem"><p>ProcessorClass is your processor class name
+		</p></li></ul></div></li><li class="step" title="Step 3"><p>run excel and define a rtd function</p></li></ol></div><p>
+            Note: the provided ExcelAddInProducer can be used for
+            testing the provided message processor. As messages are
+            sent to queue1 the following rtd function should be used
+            <span class="command"><strong>=rtd("Qpid",,"queue1")</strong></span>.
+          </p></div></div></div></div><div class="section" title="1.3.  WCF"><div class="titlepage"><div><div><h3 class="title"><a name="id2991428"></a>1.3. 
+    WCF
+  </h3></div></div></div><div class="section" title="1.3.1.  Introduction"><div class="titlepage"><div><div><h4 class="title"><a name="WCF-Introduction"></a>1.3.1. 
+      Introduction
+    </h4></div></div></div><p>
+      WCF (<span class="emphasis"><em>Windows Communication Foundation)</em></span> unifies the .Net
+      communication capabilities into a single, common, general Web
+      service oriented framework. A good WCF tutorial can be found
+      <a class="ulink" href="http://www.netfxharmonics.com/2008/11/Understanding-WCF-Services-in-Silverlight-2#WCFSilverlightIntroduction" target="_top">here</a>.
+    </p><p>
+      WCF separates how service logic is written from how services
+      communicate with clients. Bindings are used to specify the
+      transport, encoding, and protocol details required for clients
+      and services to communicate with each other. Qpid provide a WCF
+      binding: org.apache.qpid.wcf.model.QpidBinding. WCF Services that
+      use the Qpid binding communicate through queues that are
+      dynamically created on a Qpid broker.
+    </p></div><div class="section" title="1.3.2.  How to use Qpid binding"><div class="titlepage"><div><div><h4 class="title"><a name="WCF-HowtouseQpidbinding"></a>1.3.2. 
+      How to use Qpid binding
+    </h4></div></div></div><p>
+      WCF services are implemented using:
+    </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>A service contract with one or more operation contracts.
+        </p></li><li class="listitem"><p>A service implementation for those contracts.
+        </p></li><li class="listitem"><p>A configuration file to provide that implementation with an
+          endpoint and a binding for that specific contract.
+        </p></li></ul></div><p>
+      The following configuration file can be used to configure a Hello
+      Service:
+    </p><pre class="programlisting">
+&lt;configuration&gt;
+  &lt;system.serviceModel&gt;   
+     &lt;services&gt;
+      &lt;!-- the service class --&gt; 
+      &lt;service name="org.apache.qpid.wcf.demo.HelloService"&gt;
+        &lt;host&gt;
+          &lt;baseAddresses&gt;
+            &lt;!-- Use SOAP over AMQP --&gt;
+            &lt;add baseAddress="soap.amqp:///"   /&gt;
+          &lt;/baseAddresses&gt;
+        &lt;/host&gt;
+
+        &lt;endpoint
+          address="Hello"
+          &lt;!-- We use a Qpid Binding, see below def --&gt;
+          binding="customBinding"
+          bindingConfiguration="QpidBinding"
+          &lt;!-- The service contract --&gt;
+          contract="org.apache.qpid.wcf.demo.IHelloContract"/&gt;
+      &lt;/service&gt;
+    &lt;/services&gt;
+
+    &lt;bindings&gt;
+      &lt;customBinding&gt;
+        &lt;!-- cf def of the qpid binding --&gt; 
+        &lt;binding name="QpidBinding"&gt;
+          &lt;textMessageEncoding /&gt;
+          &lt;!-- specify the host and port number of the broker --&gt; 
+          &lt;QpidTransport            
+               host="192.168.1.14"
+               port="5673" /&gt;
+        &lt;/binding&gt;
+      &lt;/customBinding&gt;
+    &lt;/bindings&gt;
+
+    &lt;extensions&gt;
+      &lt;bindingElementExtensions&gt;
+        &lt;!-- use Qpid binding element: org.apache.qpid.wcf.model.QpidTransportElement --&gt; 
+        &lt;add
+          name="QpidTransport"
+           type="org.apache.qpid.wcf.model.QpidTransportElement, qpidWCFModel"/&gt;
+      &lt;/bindingElementExtensions&gt;
+    &lt;/extensions&gt;
+
+  &lt;/system.serviceModel&gt;
+&lt;/configuration&gt;
+    </pre><p>
+      Endpoints and bindings can also be set within the service code:
+    </p><pre class="programlisting">
+/* set HostName, portNumber and MyService accordingly */           
+Binding binding = new QpidBinding("HostName", portNumber); 
+ServiceHost service = new ServiceHost(typeof(MyService), new Uri("soap.amqp:///"));
+service.AddServiceEndpoint(typeof(IBooking), binding, "MyService");
+service.Open();
+....
+    </pre></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch12s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch13s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">2. 
+      Examples
+     </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 2. 
+      Examples
+    </td></tr></table></div></body></html>

Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch13s02.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch13s02.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch13s02.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch13s02.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>2.  Examples</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="ch13.html" title="Chapter 13.  AMQP .NET Messaging Client"><link rel="prev" href="ch13.html" title="Chapter 13.  AMQP .NET Messaging Client"><link rel="next" href="ch14.html" title="Chapter 14.  AMQP Python Messaging Client"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2. 
+      Examples
+    </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch13.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
+    AMQP .NET Messaging Client
+  </th><td width="20%" align="right"> <a accesskey="n" href="ch14.html">Next</a></td></tr></table><hr></div><div class="section" title="2.  Examples"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQP.NETMessagingClient-Examples"></a>2. 
+      Examples
+    </h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+	<a class="ulink" href="http://svn.apache.org/viewvc/qpid/trunk/qpid/dotnet/client-010/examples/" target="_top">http://svn.apache.org/viewvc/qpid/trunk/qpid/dotnet/client-010/examples/</a>
+      </p></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch13.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch13.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch14.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13. 
+    AMQP .NET Messaging Client
+   </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 14. 
+    AMQP Python Messaging Client
+  </td></tr></table></div></body></html>

Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch14.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch14.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch14.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch14.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,21 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 14.  AMQP Python Messaging Client</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="pt04.html" title="Part IV. AMQP Messaging Clients Clients"><link rel="prev" href="ch13s02.html" title="2.  Examples"><link rel="next" href="ch14s02.html" title="2.  Examples"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. 
+    AMQP Python Messaging Client
+  </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch13s02.html">Prev</a> </td><th width="60%" align="center">Part IV. AMQP Messaging Clients Clients</th><td width="20%" align="right"> <a accesskey="n" href="ch14s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 14.  AMQP Python Messaging Client"><div class="titlepage"><div><div><h2 class="title"><a name="id2964906"></a>Chapter 14. 
+    AMQP Python Messaging Client
+  </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch14.html#AMQPPythonMessagingClient-UserGuides">1. 
+      User Guides
+    </a></span></dt><dt><span class="section"><a href="ch14s02.html">2. 
+      Examples
+    </a></span></dt><dt><span class="section"><a href="ch14s03.html">3. 
+    PythonBrokerTest
+  </a></span></dt><dd><dl><dt><span class="section"><a href="ch14s03.html#PythonBrokerTest-PythonBrokerSystemTestSuite">3.1. 
+      Python Broker System Test Suite
+    </a></span></dt></dl></dd></dl></div><div class="section" title="1.  User Guides"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQPPythonMessagingClient-UserGuides"></a>1. 
+      User Guides
+    </h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+	  <a class="ulink" href="http://qpid.apache.org/docs/api/python/html/index.html" target="_top">Python Client API Guide</a>
+	</p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch13s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch14s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">2. 
+      Examples
+     </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 2. 
+      Examples
+    </td></tr></table></div></body></html>

Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch14s02.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch14s02.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch14s02.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch14s02.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>2.  Examples</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="ch14.html" title="Chapter 14.  AMQP Python Messaging Client"><link rel="prev" href="ch14.html" title="Chapter 14.  AMQP Python Messaging Client"><link rel="next" href="ch14s03.html" title="3.  PythonBrokerTest"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2. 
+      Examples
+    </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch14.html">Prev</a> </td><th width="60%" align="center">Chapter 14. 
+    AMQP Python Messaging Client
+  </th><td width="20%" align="right"> <a accesskey="n" href="ch14s03.html">Next</a></td></tr></table><hr></div><div class="section" title="2.  Examples"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQPPythonMessagingClient-Examples"></a>2. 
+      Examples
+    </h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+	  <a class="ulink" href="https://svn.apache.org/repos/asf/qpid/trunk/qpid/python/examples/" target="_top">AMQP Python Client Examples </a>
+	</p></li><li class="listitem"><p>
+	  <a class="ulink" href="https://svn.apache.org/repos/asf/qpid/trunk/qpid/python/examples/README" target="_top">Running the AMQP Python Client Examples </a>
+	</p></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch14.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch14.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch14s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 14. 
+    AMQP Python Messaging Client
+   </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 3. 
+    PythonBrokerTest
+  </td></tr></table></div></body></html>

Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch14s03.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch14s03.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch14s03.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch14s03.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,50 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>3.  PythonBrokerTest</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="ch14.html" title="Chapter 14.  AMQP Python Messaging Client"><link rel="prev" href="ch14s02.html" title="2.  Examples"><link rel="next" href="ch15.html" title="Chapter 15.  AMQP Ruby Messaging Client"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">3. 
+    PythonBrokerTest
+  </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch14s02.html">Prev</a> </td><th width="60%" align="center">Chapter 14. 
+    AMQP Python Messaging Client
+  </th><td width="20%" align="right"> <a accesskey="n" href="ch15.html">Next</a></td></tr></table><hr></div><div class="section" title="3.  PythonBrokerTest"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2975508"></a>3. 
+    PythonBrokerTest
+  </h2></div></div></div><div class="section" title="3.1.  Python Broker System Test Suite"><div class="titlepage"><div><div><h3 class="title"><a name="PythonBrokerTest-PythonBrokerSystemTestSuite"></a>3.1. 
+      Python Broker System Test Suite
+    </h3></div></div></div><p>
+      This is a suite of python client tests that exercise and verify
+      broker functionality. Python allows us to rapidly develop client
+      test scenarios and provides a 'neutral' set of tests that can run
+      against any AMQP-compliant broker.
+    </p><p>
+      The python/tests directory contains a collection of python
+      modules, each containing several unittest classes, each
+      containing a set of test methods that represent some test
+      scenario. Test classes inherit qpid.TestBas from
+      qpid/testlib.py, it inherits unittest.TestCase
+      but adds some qpid-specific setUp/tearDown and
+      convenience functions.
+    </p><p>
+      TODO: get pydoc generated up to qpid wiki or website
+      automatically?
+    </p><div class="section" title="3.1.1.  Running the tests"><div class="titlepage"><div><div><h4 class="title"><a name="PythonBrokerTest-Runningthetests"></a>3.1.1. 
+	Running the tests
+      </h4></div></div></div><p>
+	Simplest way to run the tests:
+      </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Run a broker on the default port
+	  </p></li><li class="listitem"><p>
+	    ./run_tests
+	  </p></li></ul></div><p>
+	For additional options: ./run_tests --help
+      </p></div><div class="section" title="3.1.2.  Expected failures"><div class="titlepage"><div><div><h4 class="title"><a name="PythonBrokerTest-Expectedfailures"></a>3.1.2. 
+	Expected failures
+      </h4></div></div></div><p>
+	Until we complete functionality, tests may fail because the
+	tested functionality is missing in the broker. To skip
+	expected failures in the C++ or Java brokers:
+      </p><pre class="programlisting">
+./run_tests -I cpp_failing.txt
+./run_tests -I java_failing.txt
+      </pre><p>
+	If you fix a failure, please remove it from the corresponding
+	list.
+      </p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch14s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch14.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch15.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">2. 
+      Examples
+     </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 15. 
+    AMQP Ruby Messaging Client
+  </td></tr></table></div></body></html>

Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch15.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch15.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch15.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch15.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 15.  AMQP Ruby Messaging Client</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="pt04.html" title="Part IV. AMQP Messaging Clients Clients"><link rel="prev" href="ch14s03.html" title="3.  PythonBrokerTest"><link rel="next" href="pt05.html" title="Part V. Appendices"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. 
+    AMQP Ruby Messaging Client
+  </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch14s03.html">Prev</a> </td><th width="60%" align="center">Part IV. AMQP Messaging Clients Clients</th><td width="20%" align="right"> <a accesskey="n" href="pt05.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 15.  AMQP Ruby Messaging Client"><div class="titlepage"><div><div><h2 class="title"><a name="id2941070"></a>Chapter 15. 
+    AMQP Ruby Messaging Client
+  </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch15.html#AMQPRubyMessagingClient-Examples">1. 
+      Examples
+    </a></span></dt></dl></div><p>
+    The Ruby Messaging Client currently has little documentation and
+    few examples.
+  </p><div class="section" title="1.  Examples"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQPRubyMessagingClient-Examples"></a>1. 
+      Examples
+    </h2></div></div></div><p>
+      <a class="ulink" href="https://svn.apache.org/repos/asf/qpid/trunk/qpid/ruby/examples" target="_top">AMQP Ruby Messaging Client Examples</a>
+    </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch14s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pt05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">3. 
+    PythonBrokerTest
+   </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Part V. Appendices</td></tr></table></div></body></html>

Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch16.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch16.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch16.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch16.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,253 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 16.  AMQP compatibility</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="pt05.html" title="Part V. Appendices"><link rel="prev" href="pt05.html" title="Part V. Appendices"><link rel="next" href="ch16s02.html" title="2.  Interop table by AMQP specification version"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. 
+      AMQP compatibility
+    </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt05.html">Prev</a> </td><th width="60%" align="center">Part V. Appendices</th><td width="20%" align="right"> <a accesskey="n" href="ch16s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 16.  AMQP compatibility"><div class="titlepage"><div><div><h2 class="title"><a name="AMQP-Compatibility"></a>Chapter 16. 
+      AMQP compatibility
+    </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch16.html#AMQPcompatibility-AMQPCompatibilityofQpidreleases-3A">1. 
+            AMQP
+            Compatibility of Qpid releases:
+          </a></span></dt><dt><span class="section"><a href="ch16s02.html">2. 
+            Interop
+            table by AMQP specification version
+          </a></span></dt></dl></div><p>
+            Qpid provides the most complete and compatible implementation
+            of AMQP. And is the most aggressive in implementing the latest
+            version of the specification.
+          </p><p>
+            There are two brokers:
+          </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>C++ with support for AMQP 0-10</p></li><li class="listitem"><p>Java with support for AMQP 0-8 and 0-9 (0-10 planned)</p></li></ul></div><p>
+            There are client libraries for C++, Java (JMS), .Net (written in
+            C#), python and ruby.
+          </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>All clients support 0-10 and interoperate with the C++
+            broker.
+            </p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The JMS client supports 0-8, 0-9 and 0-10 and interoperates
+            with both brokers.
+            </p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The python and ruby clients will also support all versions,
+            but the API is dynamically driven by the specification used and
+            so differs between versions. To work with the Java broker you
+            must use 0-8 or 0-9, to work with the C++ broker you must use
+            0-10.
+            </p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>There are two separate C# clients, one for 0-8 that
+            interoperates with the Java broker, one for 0-10 that
+            inteoperates with the C++ broker.
+            </p></li></ul></div><p>
+            QMF Management is supported in Ruby, Python, C++, and via QMan
+            for Java JMX &amp; WS-DM.
+          </p><div class="section" title="1.  AMQP Compatibility of Qpid releases:"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQPcompatibility-AMQPCompatibilityofQpidreleases-3A"></a>1. 
+            AMQP
+            Compatibility of Qpid releases:
+          </h2></div></div></div><p>
+            Qpid implements the AMQP Specification, and as the specification
+            has progressed Qpid is keeping up with the updates. This means
+            that different Qpid versions support different versions of AMQP.
+            Here is a simple guide on what use.
+          </p><p>
+            Here is a matrix that describes the different versions supported
+            by each release. The status symbols are interpreted as follows:
+          </p><div class="variablelist"><dl><dt><span class="term">Y</span></dt><dd><p>supported</p></dd><dt><span class="term">N</span></dt><dd><p>unsupported</p></dd><dt><span class="term">IP</span></dt><dd><p>in progress</p></dd><dt><span class="term">P</span></dt><dd><p>planned</p></dd></dl></div><div class="table"><a name="id2978660"></a><p class="title"><b>Table 16.1. AMQP Version Support by Qpid Release</b></p><div class="table-contents"><table summary="AMQP Version Support by Qpid Release" border="1"><colgroup><col><col><col><col><col><col></colgroup><tbody><tr><td>
+                  Component
+                </td><td>
+                  Spec
+                </td><td>
+                   
+                </td><td>
+                   
+                </td><td>
+                   
+                </td><td>
+                   
+                </td></tr><tr><td>
+                   
+                </td><td>
+                   
+                </td><td>
+                  M2.1
+                </td><td>
+                  M3
+                </td><td>
+                  M4
+                </td><td>
+                  0.5
+                </td></tr><tr><td>
+                  java client
+                </td><td>
+                  0-10
+                </td><td>
+                   
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                   
+                </td><td>
+                  0-9
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                   
+                </td><td>
+                  0-8
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                  java broker
+                </td><td>
+                  0-10
+                </td><td>
+                   
+                </td><td>
+                   
+                </td><td>
+                   
+                </td><td>
+                  P
+                </td></tr><tr><td>
+                   
+                </td><td>
+                  0-9
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                   
+                </td><td>
+                  0-8
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                  c++ client/broker
+                </td><td>
+                  0-10
+                </td><td>
+                   
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                   
+                </td><td>
+                  0-9
+                </td><td>
+                  Y
+                </td><td>
+                   
+                </td><td>
+                   
+                </td><td>
+                   
+                </td></tr><tr><td>
+                  python client
+                </td><td>
+                  0-10
+                </td><td>
+                   
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                   
+                </td><td>
+                  0-9
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                   
+                </td><td>
+                  0-8
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                  ruby client
+                </td><td>
+                  0-10
+                </td><td>
+                   
+                </td><td>
+                   
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                   
+                </td><td>
+                  0-8
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                  C# client
+                </td><td>
+                  0-10
+                </td><td>
+                   
+                </td><td>
+                   
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                   
+                </td><td>
+                  0-8
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pt05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt05.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch16s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part V. Appendices </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 2. 
+            Interop
+            table by AMQP specification version
+          </td></tr></table></div></body></html>

Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch16s02.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch16s02.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch16s02.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch16s02.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,155 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>2.  Interop table by AMQP specification version</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="ch16.html" title="Chapter 16.  AMQP compatibility"><link rel="prev" href="ch16.html" title="Chapter 16.  AMQP compatibility"><link rel="next" href="ch17.html" title="Chapter 17.  Qpid Interoperability Documentation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2. 
+            Interop
+            table by AMQP specification version
+          </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch16.html">Prev</a> </td><th width="60%" align="center">Chapter 16. 
+      AMQP compatibility
+    </th><td width="20%" align="right"> <a accesskey="n" href="ch17.html">Next</a></td></tr></table><hr></div><div class="section" title="2.  Interop table by AMQP specification version"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQPcompatibility-InteroptablebyAMQPspecificationversion"></a>2. 
+            Interop
+            table by AMQP specification version
+          </h2></div></div></div><p>
+            Above table represented in another format.
+          </p><div class="table"><a name="id2906450"></a><p class="title"><b>Table 16.2. AMQP Version Support - alternate format</b></p><div class="table-contents"><table summary="AMQP Version Support - alternate format" border="1"><colgroup><col><col><col><col><col></colgroup><tbody><tr><td>
+                   
+                </td><td>
+                  release
+                </td><td>
+                  0-8
+                </td><td>
+                  0-9
+                </td><td>
+                  0-10
+                </td></tr><tr><td>
+                  java client
+                </td><td>
+                  M3 M4 0.5
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                  java client
+                </td><td>
+                  M2.1
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  N
+                </td></tr><tr><td>
+                  java broker
+                </td><td>
+                  M3 M4 0.5
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  N
+                </td></tr><tr><td>
+                  java broker
+                </td><td>
+                  trunk
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  P
+                </td></tr><tr><td>
+                  java broker
+                </td><td>
+                  M2.1
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  N
+                </td></tr><tr><td>
+                  c++ client/broker
+                </td><td>
+                  M3 M4 0.5
+                </td><td>
+                  N
+                </td><td>
+                  N
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                  c++ client/broker
+                </td><td>
+                  M2.1
+                </td><td>
+                  N
+                </td><td>
+                  Y
+                </td><td>
+                  N
+                </td></tr><tr><td>
+                  python client
+                </td><td>
+                  M3 M4 0.5
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td></tr><tr><td>
+                  python client
+                </td><td>
+                  M2.1
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  N
+                </td></tr><tr><td>
+                  ruby client
+                </td><td>
+                  M3 M4 0.5
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  N
+                </td></tr><tr><td>
+                  ruby client
+                </td><td>
+                  trunk
+                </td><td>
+                  Y
+                </td><td>
+                  Y
+                </td><td>
+                  P
+                </td></tr><tr><td>
+                  C# client
+                </td><td>
+                  M3 M4 0.5
+                </td><td>
+                  Y
+                </td><td>
+                  N
+                </td><td>
+                  N
+                </td></tr><tr><td>
+                  C# client
+                </td><td>
+                  trunk
+                </td><td>
+                  Y
+                </td><td>
+                  N
+                </td><td>
+                  Y
+                </td></tr></tbody></table></div></div><br class="table-break"></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch16.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch16.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch17.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 16. 
+      AMQP compatibility
+     </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 17. 
+      Qpid Interoperability Documentation
+    </td></tr></table></div></body></html>



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