Author: jonathan
Date: Tue Jan 25 23:31:42 2011
New Revision: 1063521
URL: http://svn.apache.org/viewvc?rev=1063521&view=rev
Log:
Fixes several validation errors.
Modified:
qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml
Modified: qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml?rev=1063521&r1=1063520&r2=1063521&view=diff
==============================================================================
--- qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml (original)
+++ qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml Tue Jan 25
23:31:42 2011
@@ -3,7 +3,7 @@
]>
<!--
-
+
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
@@ -11,16 +11,16 @@
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
-
+
http://www.apache.org/licenses/LICENSE-2.0
-
+
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-
+
-->
<book id="client-api-tutorial">
@@ -29,7 +29,7 @@
<chapter>
<title>Introduction</title>
-
+
<para>Apache Qpid is a reliable, asynchronous messaging system that
supports the AMQP messaging protocol in several common programming
languages. Qpid is supported on most common platforms.
@@ -40,7 +40,7 @@
<para>
On the Java platform, Qpid uses the
established <ulink url="http://java.sun.com/products/jms/">Java JMS
- API</ulink>.
+ API</ulink>.
</para>
</listitem>
<listitem>
@@ -50,7 +50,7 @@
conceptually similar in each.
</para>
<para>
- On the .NET platform, Qpid also provides a WCF binding.
+ On the .NET platform, Qpid also provides a WCF binding.
</para>
</listitem>
<listitem>
@@ -82,14 +82,14 @@
message).
</para>
</listitem>
-
+
<listitem>
<para>
A <firstterm>connection</firstterm> represents a network
connection to a remote endpoint.
</para>
</listitem>
-
+
<listitem>
<para>
A <firstterm>session</firstterm> provides a sequentially
@@ -98,7 +98,7 @@
connection.
</para>
</listitem>
-
+
<listitem>
<para>
A <firstterm>sender</firstterm> sends messages to a target
@@ -106,7 +106,7 @@
obtained from a session for a given target address.
</para>
</listitem>
-
+
<listitem>
<para>
A <firstterm>receiver</firstterm> receives messages from a
@@ -115,7 +115,7 @@
address.
</para>
</listitem>
-
+
</itemizedlist>
<para>
@@ -147,7 +147,7 @@ int main(int argc, char** argv) {
std::string broker = argc > 1 ? argv[1] : "localhost:5672";
std::string address = argc > 2 ? argv[2] : "amq.topic";
std::string connectionOptions = argc > 3 ? argv[3] : "";
-
+
Connection connection(broker, connectionOptions);
try {
connection.open(); <co id="hello-cpp-open"
linkends="callout-cpp-open"/>
@@ -161,13 +161,13 @@ int main(int argc, char** argv) {
Message message = receiver.fetch(Duration::SECOND * 1); <co
id="hello-cpp-fetch" linkends="callout-cpp-fetch"/>
<![CDATA[std::cout << message.getContent() << std::endl;]]>
session.acknowledge(); <co id="hello-cpp-acknowledge"
linkends="callout-cpp-acknowledge"/>
-
+
connection.close(); <co id="hello-cpp-close"
linkends="callout-cpp-close"/>
return 0;
} catch(const std::exception& error) {
<![CDATA[std::cerr << error.what() << std::endl;]]>
connection.close();
- return 1;
+ return 1;
}
}</programlisting>
@@ -274,7 +274,7 @@ finally:
<section>
<title>A Simple Messaging Program in .NET C#</title>
- <para>The following .NET C#
+ <para>The following .NET C#
<footnote>
<para>
The .NET binding for the Qpid C++ Messaging API
@@ -367,15 +367,15 @@ namespace Org.Apache.Qpid.Messaging {
<section id="section-addresses">
<title>Addresses</title>
-
+
<para>An <firstterm>address</firstterm> is the name of a message
- target or message source.
+ target or message source.
<footnote><para>In the programs we have just seen, we used
<literal>amq.topic</literal> as the default address if none is
passed in. This is the name of a standard exchange that always
exists on an AMQP 0-10 messaging broker.</para></footnote>
-
+
The methods that create senders and receivers require an
address. The details of sending to a particular target or
receiving from a particular source are then handled by the
@@ -408,7 +408,7 @@ namespace Org.Apache.Qpid.Messaging {
A topic immediately delivers a message to all eligible
receivers; if there are no eligible receivers, it discards the
message. In the AMQP 0-10 implementation of the API,
-
+
<footnote><para>The AMQP 0-10 implementation is the only one
that currently exists.</para></footnote>
@@ -435,7 +435,7 @@ namespace Org.Apache.Qpid.Messaging {
language. These programs can use any address string as a source
or a destination, and have many command line options to
configure behavior—use the <command>-h</command> option
- for documentation on these options.
+ for documentation on these options.
<footnote><para>Currently, the C++, Python, and .NET C#
implementations of <command>drain</command> and
@@ -518,7 +518,7 @@ $
<screen>
$ ./drain -t 30 hello-word
</screen>
-
+
<para><emphasis>Second Window:</emphasis></para>
@@ -548,14 +548,14 @@ Message(properties={spout-id:7da2d27d-93
string</firstterm> can also contain a
<firstterm>subject</firstterm> and
<firstterm>options</firstterm>.</para>
-
+
<para>The syntax for an address string is:</para>
-
+
<programlisting><![CDATA[
address_string ::= <address> [ / <subject> ] [ ; <options> ]
options ::= { <key> : <value>, ... }
]]></programlisting>
-
+
<para>Addresses, subjects, and keys are strings. Values can
be numbers, strings (with optional single or double quotes),
maps, or lists. A complete BNF for address strings appears in
@@ -578,7 +578,7 @@ options ::= { <key> : <value>, ... }
message's subject is null. For convenience, address strings
also allow a subject. If a sender's address contains a
subject, it is used as the default subject for the messages
- it sends.
+ it sends.
If a receiver's address contains a subject, it is used to
select only messages that match the subject—the matching
@@ -639,7 +639,7 @@ Message(properties={qpid.subject:sports,
<command>drain</command> receive the messages for that
subject.</para>
</example>
-
+
<para>The AMQP exchange type we are using here,
<literal>amq.topic</literal>, can also do more sophisticated
@@ -650,11 +650,11 @@ Message(properties={qpid.subject:sports,
application, the sender might use subjects like
<literal>usa.news</literal>, <literal>usa.weather</literal>,
<literal>europe.news</literal>, or
- <literal>europe.weather</literal>.
+ <literal>europe.weather</literal>.
The receiver's subject can include wildcard characters—
<quote>#</quote> matches one or more words in the message's
- subject, <quote>*</quote> matches a single word.
+ subject, <quote>*</quote> matches a single word.
For instance, if the subject in the source address is
<literal>*.news</literal>, it matches messages with the
@@ -676,7 +676,7 @@ Message(properties={qpid.subject:sports,
<literal>news</literal>.</para>
<para><emphasis>First Window:</emphasis></para>
-
+
<screen>
$ ./drain -t 30 news-service/*.news
</screen>
@@ -767,7 +767,7 @@ Message(properties={qpid.subject:usa.fau
Policies for automatically creating or deleting the node to which
an address refers.
</para>
<para>
- For instance, in the address string <literal>xoxox ; {create:
always}</literal>,
+ For instance, in the address string <literal>xoxox ; {create:
always}</literal>,
the queue <literal>xoxox</literal> is created, if it does
not exist, before the address is resolved.
</para>
@@ -801,7 +801,7 @@ Message(properties={qpid.subject:usa.fau
address string options affect the behavior of senders and
receives.
</para>
-
+
<section>
<title>assert</title>
<para>
@@ -821,7 +821,7 @@ Message(properties={qpid.subject:usa.fau
$ qpid-config add queue my-queue
$ qpid-config add exchange topic my-topic
</screen>
-
+
<para>
We can now use the address specified to drain to assert that it is
of a particular type:
@@ -839,7 +839,7 @@ Exchange my-queue does not exist
queue. The second attempt however failed; my-queue is not a
topic.
</para>
-
+
<para>
We can do the same thing for my-topic:
</para>
@@ -877,7 +877,7 @@ Queue my-topic does not exist
<para><emphasis>Second Window:</emphasis></para>
<screen>$ ./spout "xoxox ; {create: always}"</screen>
-
+
<para>Returning to the first window, we see that
<command>drain</command> has received this message:</para>
<screen>Message(properties={spout-id:1a1a3842-1a8b-4f88-8940-b4096e615a7d:0},
content='')</screen>
@@ -906,7 +906,7 @@ $ ./spout my-queue --content one
$ ./spout my-queue --content two
$ ./spout my-queue --content three
</screen>
-
+
<para>Now we use drain to get those messages, using the browse
option:</para>
<screen>
$ ./drain 'my-queue; {mode: browse}'
@@ -914,7 +914,7 @@ Message(properties={spout-id:fbb93f30-0e
Message(properties={spout-id:ab9e7c31-19b0-4455-8976-34abe83edc5f:0},
content='two')
Message(properties={spout-id:ea75d64d-ea37-47f9-96a9-d38e01c97925:0},
content='three')
</screen>
-
+
<para>We can confirm the messages are still on the queue by repeating
the drain:</para>
<screen>
$ ./drain 'my-queue; {mode: browse}'
@@ -960,9 +960,9 @@ $ qpid-config add exchange xml xml
<programlisting><![CDATA[
xml; {
- link: {
- x-bindings: [{exchange:xml, key:weather, arguments:{xquery:"./weather"} }]
- }
+ link: {
+ x-bindings: [{exchange:xml, key:weather, arguments:{xquery:"./weather"} }]
+ }
}
]]></programlisting>
@@ -978,8 +978,8 @@ xml; {
<programlisting>
<![CDATA[
-let $w := ./weather
-return $w/station = 'Raleigh-Durham International Airport (KRDU)'
+let $w := ./weather
+return $w/station = 'Raleigh-Durham International Airport (KRDU)'
and $w/temperature_f > 50
and $w/temperature_f - $w/dewpoint > 5
and $w/wind_speed_mph > 7
@@ -989,9 +989,9 @@ return $w/station = 'Raleigh-Durham Inte
<para>We can specify this query in an x-binding to listen to messages
that meet the criteria specified by the query:</para>
<para><emphasis>First Window:</emphasis></para>
-
+
<screen>
-$ ./drain -f "xml; {link:{x-bindings:[{key:'weather',
+$ ./drain -f "xml; {link:{x-bindings:[{key:'weather',
arguments:{xquery:\"$(cat rdu.xquery )\"}}]}}"
</screen>
@@ -1015,9 +1015,9 @@ spout --content "$(cat rdu.xml)" xml/wea
</screen>
<para>Returning to the first window, we see that the message has been
received:</para>
-
+
<screen><![CDATA[$ ./drain -f "xml; {link:{x-bindings:[{exchange:'xml',
key:'weather', arguments:{xquery:\"$(cat rdu.xquery )\"}}]}}"
-Message(properties={qpid.subject:weather,
spout-id:31c431de-593f-4bec-a3dd-29717bd945d3:0},
+Message(properties={qpid.subject:weather,
spout-id:31c431de-593f-4bec-a3dd-29717bd945d3:0},
content='<weather>
<station>Raleigh-Durham International Airport (KRDU)</station>
<wind_speed_mph>16</wind_speed_mph>
@@ -1172,7 +1172,7 @@ spout - -content "$(cat rdu.xml | sed -e
<row>
<entry>
durable
- </entry>
+ </entry>
<entry>
True, False
</entry>
@@ -1212,9 +1212,9 @@ spout - -content "$(cat rdu.xml | sed -e
exchange: <exchange>,
queue: <queue>,
key: <key>,
- arguments: {
- <key_1>: <value_1>,
- ...,
+ arguments: {
+ <key_1>: <value_1>,
+ ...,
<key_n>: <value_n> }
},
...
@@ -1277,7 +1277,7 @@ spout - -content "$(cat rdu.xml | sed -e
<row>
<entry>
durable
- </entry>
+ </entry>
<entry>
True, False
</entry>
@@ -1514,7 +1514,7 @@ options := map
</section>
-
+
<section>
<title>Receiving Messages from Multiple Sources</title>
@@ -1602,20 +1602,20 @@ Session session = connection.createTran
...
if (smellsOk())
session.commit();
-else
+else
session.rollback();
]]></programlisting>
<para>
.NET C#:
</para>
-
+
<programlisting>
Connection connection = new Connection(broker);
Session session = connection.CreateTransactionalSession();
...
if (smellsOk())
session.Commit();
-else
+else
session.Rollback();
</programlisting>
<!--
@@ -1670,7 +1670,7 @@ try:
!!! SNIP !!!
]]></programlisting>
-or
+<para>or</para>
<programlisting><![CDATA[
connection = Connection("localhost:5672")
@@ -1682,7 +1682,7 @@ try:
<para>
In .NET, these options can be set using
<function>Connection.SetOption()</function> or by passing in a set of options
to the constructor. The options can be passed in as a map or in string form:
</para>
-
+
<programlisting>
Connection connection= new Connection("localhost:5672",
"{reconnect: true}");
try {
@@ -1692,7 +1692,7 @@ try {
<para>
or
</para>
-
+
<programlisting>
Connection connection = new Connection("localhost:5672");
connection.SetOption("reconnect", true);
@@ -1881,21 +1881,21 @@ try {
<section id="section-Maps">
<title>Maps and Lists in Message Content</title>
-
+
<para>Many messaging applications need to exchange data across
languages and platforms, using the native datatypes of each
- programming language.</para>
+ programming language.</para>
- <para>The Qpid Messaging API supports <classname>map</classname> and
<classname>list</classname> in message content.
+ <para>The Qpid Messaging API supports <classname>map</classname> and
<classname>list</classname> in message content.
<footnote><para>Unlike JMS, there is not a specific message type for
map messages.</para></footnote>
- <footnote>
+ <footnote>
<para>
Note that the Qpid JMS client supports
MapMessages whose values can be nested maps or lists. This is not standard JMS
behaviour.
</para>
- </footnote>
+ </footnote>
Specific language support for
<classname>map</classname> and <classname>list</classname> objects are shown in
the following table.
</para>
<table
id="tabl-Programming_in_Apache_Qpid-Qpid_Maps_in_Message_Content">
@@ -1959,8 +1959,8 @@ content = {'Id' : 987654321, 'name' : 'W
content['colours'] = ['red', 'green', 'white']
content['dimensions'] = {'length' : 10.2, 'width' : 5.1,'depth' : 2.0};
content['parts'] = [ [1,2,5], [8,2,5] ]
-content['specs'] = {'colors' : content['colours'],
- 'dimensions' : content['dimensions'],
+content['specs'] = {'colors' : content['colours'],
+ 'dimensions' : content['dimensions'],
'parts' : content['parts'] }
message = Message(content=content)
sender.send(message)
@@ -1970,7 +1970,7 @@ sender.send(message)
<para>The following table shows the datatypes that can be sent in a
Python map message,
and the corresponding datatypes that will be received by clients in Java or
C++.</para>
-
+
<table id="table-Python-Maps" >
<title>Python Datatypes in Maps</title>
@@ -2000,7 +2000,7 @@ sender.send(message)
- <section id="section-cpp-Maps">
+ <section id="section-cpp-Maps">
<title>Qpid Maps and Lists in C++</title>
@@ -2032,27 +2032,27 @@ Variant::Map dimensions;
dimensions["length"] = 10.2;
dimensions["width"] = 5.1;
dimensions["depth"] = 2.0;
-content["dimensions"]= dimensions;
+content["dimensions"]= dimensions;
Variant::List part1;
part1.push_back(Variant(1));
part1.push_back(Variant(2));
part1.push_back(Variant(5));
-
+
Variant::List part2;
part2.push_back(Variant(8));
part2.push_back(Variant(2));
part2.push_back(Variant(5));
-
+
Variant::List parts;
parts.push_back(part1);
parts.push_back(part2);
-content["parts"]= parts;
+content["parts"]= parts;
Variant::Map specs;
-specs["colours"] = colours;
-specs["dimensions"] = dimensions;
-specs["parts"] = parts;
+specs["colours"] = colours;
+specs["dimensions"] = dimensions;
+specs["parts"] = parts;
content["specs"] = specs;
encode(content, message);
@@ -2063,7 +2063,7 @@ sender.send(message, true);
<para>The following table shows the datatypes that can be sent
in a C++ map message, and the corresponding datatypes that
will be received by clients in Java and Python.</para>
-
+
<table id="table-cpp-Maps">
<title>C++ Datatypes in Maps</title>
<tgroup cols="3">
@@ -2176,47 +2176,47 @@ Send(message, true);
<para>
The following table shows the mapping between datatypes in .NET and
C++.
</para>
-
+
<table id="table-dotnet-Maps">
- <title>Datatype Mapping between C++ and .NET binding</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>C++ Datatype</entry>
- <entry>→ .NET binding</entry>
- </row>
- </thead>
- <tbody>
- <row><entry>void</entry><entry>nullptr</entry></row>
- <row><entry>bool</entry><entry>bool</entry></row>
- <row><entry>uint8</entry><entry>byte</entry></row>
- <row><entry>uint16</entry><entry>UInt16</entry></row>
- <row><entry>uint32</entry><entry>UInt32</entry></row>
- <row><entry>uint64</entry><entry>UInt64</entry></row>
- <row><entry>uint8</entry><entry>char</entry></row>
- <row><entry>int16</entry><entry>Int16</entry></row>
- <row><entry>int32</entry><entry>Int32</entry></row>
- <row><entry>int64</entry><entry>Int64</entry></row>
- <row><entry>float</entry><entry>Single</entry></row>
- <row><entry>double</entry><entry>Double</entry></row>
- <row><entry>string</entry><entry>string <co
id="mapping-dotnet-string" linkends="callout-dotnet-string"/></entry></row>
- <row><entry>qpid::types::Uuid</entry><entry>Guid</entry></row>
- <row><entry>Variant::Map</entry><entry><![CDATA[Dictionary<string,
object>]]> <co id="mapping-dotnet-dict-index"
linkends="callout-dotnet-string"/></entry></row>
-
<row><entry>Variant::List</entry><entry><![CDATA[Collection<object>]]> <co
id="mapping-dotnet-list-value" linkends="callout-dotnet-string"/></entry></row>
- </tbody>
- </tgroup>
- </table>
+ <title>Datatype Mapping between C++ and .NET binding</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>C++ Datatype</entry>
+ <entry>→ .NET binding</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row><entry>void</entry><entry>nullptr</entry></row>
+ <row><entry>bool</entry><entry>bool</entry></row>
+ <row><entry>uint8</entry><entry>byte</entry></row>
+ <row><entry>uint16</entry><entry>UInt16</entry></row>
+ <row><entry>uint32</entry><entry>UInt32</entry></row>
+ <row><entry>uint64</entry><entry>UInt64</entry></row>
+ <row><entry>uint8</entry><entry>char</entry></row>
+ <row><entry>int16</entry><entry>Int16</entry></row>
+ <row><entry>int32</entry><entry>Int32</entry></row>
+ <row><entry>int64</entry><entry>Int64</entry></row>
+ <row><entry>float</entry><entry>Single</entry></row>
+ <row><entry>double</entry><entry>Double</entry></row>
+ <row><entry>string</entry><entry>string
+ <footnote id="callout-dotnet-string">
+ <para>Strings are currently interpreted only with UTF-8
encoding.</para>
+ </footnote></entry></row>
+ <row><entry>qpid::types::Uuid</entry><entry>Guid</entry></row>
+ <row><entry>Variant::Map</entry><entry><![CDATA[Dictionary<string,
object>]]>
+ <footnoteref linkend="callout-dotnet-string"/></entry></row>
+
<row><entry>Variant::List</entry><entry><![CDATA[Collection<object>]]>
+ <footnoteref linkend="callout-dotnet-string"/></entry></row>
+ </tbody>
+ </tgroup>
+ </table>
- <calloutlist>
- <callout id="callout-dotnet-string" arearefs="mapping-dotnet-string">
- <para>Strings are currently interpreted only with UTF-8
encoding.</para>
- </callout>
- </calloutlist>
- </section>
+ </section>
+
-
-</section>
+</section>
<section>
<title>The Request / Response Pattern</title>
@@ -2347,8 +2347,8 @@ std::cout << request.getContent() << " -
<example>
<title>Tracking cluster membership</title>
-
- <para>In C++:</para>
+
+ <para>In C++:</para>
<programlisting><![CDATA[
#include <qpid/messaging/FailoverUpdates.h>
@@ -2361,7 +2361,7 @@ try {
]]>
</programlisting>
- <para>In python:</para>
+ <para>In python:</para>
<programlisting><![CDATA[
import qpid.messaging.util
@@ -2376,7 +2376,7 @@ try:
<para>
In .NET C#:
</para>
-
+
<programlisting>
using Org.Apache.Qpid.Messaging;
...
@@ -2407,14 +2407,14 @@ try {
</para>
<para>Use QPID_LOG_ENABLE to set the level of logging
you are interested in (trace, debug, info, notice, warning, error, or critical):
</para>
-
+
<screen>
export QPID_LOG_ENABLE="warning+"
</screen>
<para>
The Qpidd broker and C++ clients use
QPID_LOG_OUTPUT to determine where logging output should be sent. This is
either a file name or the special values stderr, stdout, or syslog:
</para>
-
+
<screen>
export QPID_LOG_TO_FILE="/tmp/myclient.out"
</screen>
@@ -2422,26 +2422,26 @@ export QPID_LOG_TO_FILE="/tmp/myclie
<para>
From a Windows command prompt, use the
following command format to set the environment variables:
</para>
-
+
<screen>
set QPID_LOG_ENABLE=warning+
set QPID_LOG_TO_FILE=D:\tmp\myclient.out
</screen>
</section>
-
+
<section>
<title>Logging in Python</title>
<para>
The Python client library supports logging using the
standard Python logging module. The easiest way to do logging is to use the
<command>basicConfig()</command>, which reports all warnings and errors:
</para>
-
+
<programlisting>from logging import basicConfig
basicConfig()
</programlisting>
<para>
Qpidd also provides a convenience method that makes it
easy to specify the level of logging desired. For instance, the following code
enables logging at the <command>DEBUG</command> level:
</para>
-
+
<programlisting>from qpid.log import enable, DEBUG
enable("qpid.messaging.io", DEBUG)
</programlisting>
@@ -2604,9 +2604,9 @@ enable("qpid.messaging.io", DEBUG)
<entry>C++ API
<footnote>
<para>
- The .NET Binding for C++ Messaging provides all the
- message and delivery properties described in the C++ API.
- See <xref linkend="table-Dotnet-Binding-Message" /> .
+ The .NET Binding for C++ Messaging provides all the
+ message and delivery properties described in the C++ API.
+ See <xref linkend="table-Dotnet-Binding-Message" /> .
</para>
</footnote>
</entry>
@@ -2660,7 +2660,7 @@ enable("qpid.messaging.io", DEBUG)
same manner. In addition the routing key on incoming transfers
will be exposed directly via the custom property with key
<literal>x-amqp-0-10.routing-key</literal>.</para>
-
+
</section>
</chapter>
@@ -2669,7 +2669,7 @@ enable("qpid.messaging.io", DEBUG)
<title>Using the Qpid JMS client</title>
<section>
<title>A Simple Messaging Program in Java JMS</title>
-
+
<para>The following program shows how to send and receive a
message using the Qpid JMS client. JMS programs typically use
JNDI to obtain connection factory and destination objects which
@@ -2710,7 +2710,7 @@ public class Hello {
properties.load(this.getClass().getResourceAsStream("hello.properties")); <co
id="hello-java-properties" linkends="callout-java-properties"/>
Context context = new InitialContext(properties); <co
id="hello-java-context" linkends="callout-java-context"/>
- ConnectionFactory connectionFactory
+ ConnectionFactory connectionFactory
= (ConnectionFactory) context.lookup("qpidConnectionfactory"); <co
id="hello-java-connection-factory" linkends="callout-java-connection-factory"/>
Connection connection = connectionFactory.createConnection(); <co
id="hello-java-connection" linkends="callout-java-connection"/>
connection.start(); <co id="hello-java-start"
linkends="callout-java-start"/>
@@ -2782,11 +2782,11 @@ public class Hello {
<example>
<title>JNDI Properties File for "Hello world!" example</title>
<programlisting>
-java.naming.factory.initial
+java.naming.factory.initial
= org.apache.qpid.jndi.PropertiesFileInitialContextFactory
# connectionfactory.[jndiname] = [ConnectionURL]
-connectionfactory.qpidConnectionfactory
+connectionfactory.qpidConnectionfactory
= amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672' <co
id="hello-properties-connectionfactory"
linkends="callout-hello-properties-connectionfactory"/>
# destination.[jndiname] = [address_string]
destination.topicExchange = amq.topic <co id="hello-properties-destination"
linkends="callout-hello-properties-destination"/>
@@ -2824,11 +2824,11 @@ destination.topicExchange = amq.topic <c
<example>
<title>JNDI Properties File</title>
<programlisting><![CDATA[
-java.naming.factory.initial
+java.naming.factory.initial
= org.apache.qpid.jndi.PropertiesFileInitialContextFactory
# connectionfactory.[jndiname] = [ConnectionURL]
-connectionfactory.qpidConnectionfactory
+connectionfactory.qpidConnectionfactory
= amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672'
# destination.[jndiname] = [address_string]
destination.topicExchange = amq.topic
@@ -2837,7 +2837,7 @@ destination.topicExchange = amq.topic
<para>The following sections describe the JNDI properties that Qpid
uses.</para>
-
+
<section>
<title>JNDI Properties for Apache Qpid</title>
<para>
@@ -2895,7 +2895,7 @@ destination.topicExchange = amq.topic
<para>
Can be used for defining all amq destinations,
queues, topics and header matching, using an
- address string.
+ address string.
<footnote><para>Binding URLs, which were used in
earlier versions of the Qpid Java JMS client, can
@@ -2908,19 +2908,19 @@ destination.topicExchange = amq.topic
</tgroup>
</table>
</section>
-
+
<section id="section-jms-connection-url">
<title>Connection URLs</title>
<para>
In JNDI properties, a Connection URL specifies properties for a
connection. The format for a Connection URL is:
</para>
-
+
<programlisting>amqp://[<user>:<pass>@][<clientid>]<virtualhost>[?<option>='<value>'[&<option>='<value>']]
</programlisting>
<para>
For instance, the following Connection URL specifies a user name, a
password, a client ID, a virtual host ("test"), a broker list with a single
broker, and a TCP host with the host name <quote>localhost</quote> using port
5672:
</para>
-
+
<programlisting>amqp://username:password@clientid/test?brokerlist='tcp://localhost:5672'
</programlisting>
<para>
@@ -3016,12 +3016,12 @@ destination.topicExchange = amq.topic
<para>
Broker lists are specified using a URL in this format:
</para>
-
+
<programlisting>brokerlist=<transport>://<host>[:<port>](?<param>=<value>)?(&<param>=<value>)*</programlisting>
<para>
For instance, this is a typical broker list:
</para>
-
+
<programlisting>brokerlist='tcp://localhost:5672'
</programlisting>
@@ -3100,7 +3100,7 @@ amqp://guest:guest@test/test?sync_ack='t
sasl_encryption
</entry>
<entry>
- Boolean
+ Boolean
</entry>
<entry>
If <literal>sasl_encryption='true'</literal>, the JMS client
attempts to negotiate a security layer with the broker using GSSAPI to encrypt
the connection. Note that for this to happen, GSSAPI must be selected as the
sasl_mech.
@@ -3226,7 +3226,7 @@ amqp://guest:guest@test/test?sync_ack='t
</tgroup>
</table>
</section>
- </section>
+ </section>
<section>
<title>Java JMS Message Properties</title>
@@ -3287,7 +3287,7 @@ amqp://guest:guest@test/test?sync_ack='t
</tbody>
</tgroup>
</table>
-
+
</section>
<section id="section-JMS-MapMessage">
@@ -3326,7 +3326,7 @@ m.setDoubleProperty("price", 0.99);
List<String> colors = new ArrayList<String>();
colors.add("red");
colors.add("green");
-colors.add("white");
+colors.add("white");
m.setObject("colours", colors);
Map<String,Double> dimensions = new HashMap<String,Double>();
@@ -3351,7 +3351,7 @@ producer.send(m);
</example>
<para>The following table shows the datatypes that can be sent in a
<classname>MapMessage</classname>, and the corresponding datatypes that will be
received by clients in Python or C++.</para>
-
+
<table id="table-Java-Maps">
<title>Java Datatypes in Maps</title>
<tgroup cols="3">
@@ -3378,7 +3378,7 @@ producer.send(m);
</table>
</section>
-
+
<section id="section-JMS-Logging">
<title>JMS Client Logging</title>
<para>The JMS Client logging is handled using the Simple Logging Facade
for Java (<ulink url="http://www.slf4j.org/">SLF4J</ulink>). As the name
implies, slf4j is a facade that delegates to other logging systems like log4j
or JDK 1.4 logging. For more information on how to configure slf4j for specific
logging systems, please consult the slf4j documentation.</para>
@@ -3399,7 +3399,7 @@ log4j.appender.console.Threshold=all
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%t %d %p [%c{4}] %m%n
]]></programlisting>
- </example>
+ </example>
</section>
@@ -3407,13 +3407,13 @@ log4j.appender.console.layout.Conversion
<title>Configuring the JMS Client</title>
<para>The Qpid JMS Client allows several configuration options to
customize it's behaviour at different levels of granualarity.</para>
-
+
<itemizedlist>
<listitem>
<para>
JVM level using JVM arguments : Configuration that affects all
connections, sessions, consumers and producers created within that JVM.
</para>
- <para>Ex. <varname>-Dmax_prefetch=1000</varname> property specifies
the message credits to use.</para>
+ <para>Ex. <varname>-Dmax_prefetch=1000</varname> property specifies
the message credits to use.</para>
</listitem>
<listitem>
@@ -3422,7 +3422,7 @@ log4j.appender.console.layout.Conversion
</para>
<para>Ex. <varname>amqp://guest:guest@test/test?max_prefetch='1000'
&brokerlist='tcp://localhost:5672'
-</varname> property specifies the message credits to use. This overrides any
value specified via the JVM argument <varname>max_prefetch</varname>.</para>
+</varname> property specifies the message credits to use. This overrides any
value specified via the JVM argument <varname>max_prefetch</varname>.</para>
<para>Please refer to the <xref
linkend="section-jms-connection-url"/> section for a complete list of all
properties and how to use them.</para>
</listitem>
@@ -3430,11 +3430,11 @@ log4j.appender.console.layout.Conversion
<para>
Destination level using Addressing options : Affects the
producer(s) and consumer(s) created using the respective destination.
</para>
- <para>Ex. <varname>my-queue; {create: always, link:{capacity:
10}}</varname>, where <varname>capacity</varname> option specifies the message
credits to use. This overrides any connection level configuration.</para>
+ <para>Ex. <varname>my-queue; {create: always, link:{capacity:
10}}</varname>, where <varname>capacity</varname> option specifies the message
credits to use. This overrides any connection level configuration.</para>
<para>Please refer to the <xref linkend="section-addresses"/>
section for a complete understanding of addressing and it's various
options.</para>
</listitem>
</itemizedlist>
-
+
<para>Some of these config options are available at all three levels (Ex.
<varname>max_prefetch</varname>), while others are available only at JVM or
connection level.</para>
<section>
@@ -3538,8 +3538,8 @@ log4j.appender.console.layout.Conversion
<entry>1000 (ms)</entry>
<entry><para>Timer interval to flush message acks in buffer
when using AUTO_ACK and DUPS_OK.</para> <para>When using the above ack modes,
message acks are batched and sent if one of the following conditions are met
(which ever happens first).
<itemizedlist>
- <listitem>When the ack timer
fires.</listitem>
- <listitem>if un_acked_msg_count >
max_prefetch/2.</listitem>
+ <listitem><para>When the ack timer
fires.</para></listitem>
+ <listitem><para>if un_acked_msg_count >
max_prefetch/2.</para></listitem>
</itemizedlist>
</para>
<para>The ack timer can be disabled by setting it to
0.</para>
@@ -3673,7 +3673,7 @@ log4j.appender.console.layout.Conversion
</table>
<table>
- <title>Config Options For Security - Standard JVM properties
needed when using GSSAPI as the SASL mechanism.<footnote>Please refer to the
Java security documentation for a complete understanding of the above
properties.</footnote></title>
+ <title>Config Options For Security - Standard JVM properties
needed when using GSSAPI as the SASL mechanism.<footnote><para>Please refer to
the Java security documentation for a complete understanding of the above
properties.</para></footnote></title>
<tgroup cols="3">
<thead>
<row>
@@ -3745,7 +3745,7 @@ log4j.appender.console.layout.Conversion
</table>
<table>
- <title>Config Options For Security - Standard JVM properties
needed when Using SSL for securing connections or using EXTERNAL as the SASL
mechanism.<footnote>Qpid allows you to have per connection key and trust stores
if required. If specified per connection, the JVM arguments are
ignored.</footnote></title>
+ <title>Config Options For Security - Standard JVM properties
needed when Using SSL for securing connections or using EXTERNAL as the SASL
mechanism.<footnote><para>Qpid allows you to have per connection key and trust
stores if required. If specified per connection, the JVM arguments are
ignored.</para></footnote></title>
<tgroup cols="3">
<thead>
<row>
@@ -3915,7 +3915,7 @@ namespace Apache.Qpid.Samples.Channel.He
using Apache.Qpid.Channel;
public class HelloWorld
- {
+ {
static void Main(string[] args)
{
String broker = "localhost";
@@ -4245,7 +4245,7 @@ using (TransactionScope ts = new Transac
<chapter>
<title>The .NET Binding for the C++ Messaging Client</title>
<para>
- The .NET Binding for the C++ Qpid Messaging Client is a library that
gives
+ The .NET Binding for the C++ Qpid Messaging Client is a library that
gives
any .NET program access to Qpid C++ Messaging objects and methods.
</para>
<section>
@@ -4281,8 +4281,9 @@ unmanaged | org.apache.qpid
| qpid*.dll qmf*.dll |
+--------+--------------+----------+
]]></programlisting>
-This diagram illustrates the code and library components of the binding
-and the hierarchical relationships between them.
+
+<para>This diagram illustrates the code and library components of the binding
+and the hierarchical relationships between them.</para>
<table id="table-Dotnet-Binding-Component-Architecture" >
<title>.NET Binding for the C++ Messaging Client Component
Architecture</title>
@@ -4290,7 +4291,7 @@ and the hierarchical relationships betwe
<thead>
<row>
<entry>Component Name</entry>
- <entry>Component Function</entry>
+ <entry>Component Function</entry>
</row>
</thead>
<tbody>
@@ -4306,9 +4307,9 @@ and the hierarchical relationships betwe
<row>
<entry>.NET Messaging Binding Library</entry>
<entry>The .NET Messaging Binding library provides
interoprability between
- managed .NET programs and the unmanaged, native Qpid Messaging
C++ core
- run time system. .NET programs create a Reference to this
library thereby
- exposing all of the native C++ Messaging functionality to
programs
+ managed .NET programs and the unmanaged, native Qpid Messaging
C++ core
+ run time system. .NET programs create a Reference to this
library thereby
+ exposing all of the native C++ Messaging functionality to
programs
written in any .NET language.</entry>
</row>
<row>
@@ -4328,8 +4329,8 @@ and the hierarchical relationships betwe
<section>
<title>.NET Binding for the C++ Messaging Client Examples</title>
- This chapter describes the various sample programs that are available to
- illustrate common Qpid Messaging usage.
+ <para>This chapter describes the various sample programs that
+ are available to illustrate common Qpid Messaging usage.</para>
<table id="table-Dotnet-Binding-Example-Client-Server">
<title>Example : Client - Server</title>
@@ -4511,8 +4512,11 @@ and the hierarchical relationships betwe
<section>
<title>.NET Binding Class Mapping to Underlying C++ Messaging API</title>
- This chapter describes the specific mappings between classes in the .NET
- Binding and the underlying C++ Messaging API.
+
+ <para>This chapter describes the specific mappings between
+ classes in the .NET Binding and the underlying C++ Messaging
+ API.</para>
+
<section>
<title>.NET Binding for the C++ Messaging API Class: Address</title>
<table id="table-Dotnet-Binding-Address">
@@ -6308,10 +6312,10 @@ namespace Org.Apache.Qpid.Messaging.Sess
<para>
To use this class a client program includes references to both
Org.Apache.Qpid.Messaging and Org.Apache.Qpid.Messaging.SessionReceiver.
- The calling program creates a function that implements the
+ The calling program creates a function that implements the
ISessionReceiver interface. This function will be called whenever
message is received by the session. The callback process is started
- by creating a CallbackServer and will continue to run until the
+ by creating a CallbackServer and will continue to run until the
client program calls the CallbackServer.Close function.
</para>
<para>
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]