summaryrefslogtreecommitdiff
path: root/qpid
diff options
context:
space:
mode:
authorAlex Rudyy <orudyy@apache.org>2015-04-15 10:01:30 +0000
committerAlex Rudyy <orudyy@apache.org>2015-04-15 10:01:30 +0000
commitdb3ef0f8eab2d3e6bc2001c6dcbf0fd896537314 (patch)
tree4bbb0ac9072332074f8c30214e0b94c946fc526f /qpid
parentb15e32a943ae269c1c7dae4b2084e2ad87f3940d (diff)
downloadqpid-python-db3ef0f8eab2d3e6bc2001c6dcbf0fd896537314.tar.gz
QPID-6481: Move docbook for jms client for amqp 0.8/0.9.x into java source tree
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1673704 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid')
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-Appendix-Exceptions.xml200
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-Appendix-Maven.xml69
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-Binding-URL.xml244
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-Book.xml46
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-Connection-URL.xml337
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-Document-Scope-And-Intended-Audience.xml64
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-Examples.xml297
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-Getting-And-Dependencies.xml68
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-Introduction.xml49
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-JMS-Extensions.xml95
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-JNDI-Properties-Format.xml86
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-Logging.xml73
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-System-Properties.xml655
-rw-r--r--qpid/doc/book/src/jms-client-0-8/JMS-Client-Understanding.xml596
-rw-r--r--qpid/doc/book/src/jms-client-0-8/Makefile20
-rw-r--r--qpid/doc/book/src/jms-client-0-8/commonEntities.xml47
-rw-r--r--qpid/doc/book/src/jms-client-0-8/images/JndiOverview.pngbin67726 -> 0 bytes
-rw-r--r--qpid/doc/book/src/jms-client-0-8/images/JndiOverview.svg23
-rw-r--r--qpid/doc/book/src/jms-client-0-8/images/QpidJmsOverview.pngbin52377 -> 0 bytes
-rw-r--r--qpid/doc/book/src/jms-client-0-8/images/QpidJmsOverview.svg23
20 files changed, 0 insertions, 2992 deletions
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Appendix-Exceptions.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-Appendix-Exceptions.xml
deleted file mode 100644
index f6d663c8b0..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Appendix-Exceptions.xml
+++ /dev/null
@@ -1,200 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<appendix id="JMS-Client-0-8-Appendix-Exceptions">
- <title>Exceptions</title>
-
- <para>The methods of Qpid JMS Client throw <ulink
- url="&oracleJeeDocUrl;javax/jms/JMSException.html">JMSExceptions</ulink> in response to error
- conditions. Typically the exception's message (#getMessage()) summarises the error condition,
- with contextual information being provided by the messages of linked exception(s). To understand
- the problem, it is important to read the messages associated with <emphasis>all</emphasis> the
- linked exceptions.</para>
-
- <para>The following table describes some of the more common exceptions linked to JMSException
- thrown by JMS methods whilst using the client:</para>
-
- <table pgwide="1">
- <title>Exceptions linked to JMSExceptions thrown by JMS methods</title>
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Linked Exception</entry>
- <entry>Message</entry>
- <entry>Explanation/Common Causes</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>AMQUnresolvedAddressException</entry>
- <entry><emphasis>message varies</emphasis></entry>
- <entry><para>Indicates that the hostname included in the Connection URL's <link
- linkend="JMS-Client-0-8-Connection-URL-ConnectionOptions-Brokerlist"
- >brokerlist</link>, could not be resolved, . This could mean that the hostname is
- mispelt, or there is name resolution problem.</para></entry>
- </row>
- <row>
- <entry>AMQConnectionFailure</entry>
- <entry>Connection refused</entry>
- <entry><para>Indicates that the host included in the Connection URL's <link
- linkend="JMS-Client-0-8-Connection-URL-ConnectionOptions-Brokerlist"
- >brokerlist</link>, actively refused the connection. This could mean that the
- hostname and/or port number is incorrect, or the Broker may not be
- running.</para></entry>
- </row>
- <row>
- <entry>AMQConnectionFailure</entry>
- <entry>connect timed out</entry>
- <entry><para>Indicates that the host included in the Connection URL's <link
- linkend="JMS-Client-0-8-Connection-URL-ConnectionOptions-Brokerlist"
- >brokerlist</link>, could not be contacted within the <link
- linkend="JMS-Client-0-8-Connection-URL-BrokerOptions-ConnectTimeout"
- >connecttimeout</link>. This could mean that the host is shutdown, or a networking
- routing problem means the host is unreachable.</para></entry>
- </row>
- <row>
- <entry>AMQConnectionFailure</entry>
- <entry>General SSL Problem; PKIX path building failed; unable to find valid certification
- path to requested target</entry>
- <entry><para>Indicates that the CA that signed the Broker's certificate is not trusted by
- the JVM of the client. If the Broker is using a private-CA (or a self signed
- certificate) check that the client has been properly configured with a truststore. See
- <xref linkend="JMS-Client-0-8-Client-Understanding-Connection-SSL"/></para></entry>
- </row>
- <row>
- <entry>AMQConnectionFailure / AMQAuthenticationException</entry>
- <entry>not allowed</entry>
- <entry><para>Indicates that the user cannot be authenticated by the Broker. Check the
- username and/or password elements within the <link
- linkend="JMS-Client-0-8-Connection-URL">Connection URL</link>.</para></entry>
- </row>
- <row>
- <entry>AMQConnectionFailure / AMQSecurityException</entry>
- <entry>Permission denied: <emphasis>virtualhost name</emphasis>; access refused</entry>
- <entry><para>Indicates that the user is not authorised to connect to the given
- virtualhost. The user is recognised by the Broker and is using the correct password
- but does not have permission. This exception normally indicates that the user (or
- group) has not been permissioned within the Broker's <ulink
- url="&qpidJavaBrokerBook;Java-Broker-Security-ACLs.html">Access Control List
- (ACL)</ulink>.</para></entry>
- </row>
- <row>
- <entry>AMQTimeoutException</entry>
- <entry>Server did not respond in a timely fashion; Request Timeout</entry>
- <entry><para>Indicates that the broker did not respond to a request sent by the client in
- a reasonable length of time. The timeout is governed by <link
- linkend="JMS-Client-0-8-System-Properties-SyncOpTimeout"
- ><literal>qpid.sync_op_timeout</literal></link>.</para><para>This can be a symptom
- of a heavily loaded broker that cannot respond or the Broker may have failed in
- unexpected manner. Check the broker and the host on which it runs and performance of
- its storage.</para></entry>
- </row>
- <row>
- <entry>AMQSecurityException</entry>
- <entry>Permission denied: <emphasis>message varies</emphasis></entry>
- <entry><para>Indicates that the user is not authorised to use the given resource or
- perform the given operation. This exception normally indicates that the user (or
- group) has not been permissioned within the Broker's <ulink
- url="&qpidJavaBrokerBook;Java-Broker-Security-ACLs.html">Access Control List
- (ACL)</ulink>.</para></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>The following table describes some of the more common exceptions linked to JMSException sent
- to <ulink url="&oracleJeeDocUrl;javax/jmx/ExceptionListener.html">ExceptionListener</ulink>
- instances.</para>
-
- <table pgwide="1">
- <title>Exceptions linked to JMSExceptions received by ExceptionListeners</title>
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Linked Exception</entry>
- <entry>Message</entry>
- <entry>Explanation/Common Causes</entry>
- </row>
- </thead>
- <tbody>
- <row id="JMS-Client-0-8-Appendix-Exceptions-AMQNoRouteException">
- <entry>AMQNoRouteException</entry>
- <entry>No Route for message [Exchange: <emphasis>exchange name</emphasis>, Routing key:
- <emphasis>routing key</emphasis>] [error code 312: no route]</entry>
- <entry><para>Indicate that the named exchange is unable to route a message to at least one
- queue.</para>
- <para>This will occur if a queue has been improperly bound to an exchange. Use the
- Broker's management interface to check the bindings. See <xref
- linkend="JMS-Client-0-8-Client-Understanding-MessageProducer-MandatoryMessage"
- /></para></entry>
- </row>
- <row id="JMS-Client-0-8-Appendix-Exceptions-AMQNoConsumersException">
- <entry>AMQNoConsumersException</entry>
- <entry>Immediate delivery is not possible. [error code 313: no consumers]</entry>
- <entry><para>Immediate delivery was requested by the MessageProducer, but as there are no
- consumers on any target queue, the message has been returned to the publisher. See
- <xref linkend="JMS-Client-0-8-Client-Understanding-MessageProducer-ImmediateMessage"
- />
- </para></entry>
- </row>
- <row>
- <entry>AMQDisconnectedException</entry>
- <entry>Server closed connection and reconnection not permitted</entry>
- <entry><para>Indicates that the connection was closed by the Broker, and as <link
- linkend="JMS-Client-0-8-Client-Understanding-Connection-Failover">failover
- options</link> are not included in the Connection URL, the client has been unable to
- reestablish connection.</para>
- <para>The Connection is now closed and any attempt to use either Connection object, or
- any objects created from the Connection will receive an <ulink
- url="&oracleJeeDocUrl;javax/jms/IllegalStateException.html"
- >IllegalStateException</ulink>.</para></entry>
- </row>
- <row id="JMS-Client-0-8-Appendix-Exceptions-AMQDisconnectedException">
- <entry>AMQDisconnectedException</entry>
- <entry>Server closed connection and no failover was successful</entry>
- <entry><para>Indicates that the connection was closed by the Broker. The client has tried
- failover according to the rules of the <link
- linkend="JMS-Client-0-8-Client-Understanding-Connection-Failover">failover
- options</link>within the Connection URL, but these attempts were all
- unsuccessful.</para>
- <para>The Connection is now closed and any attempt to use either Connection object, or
- any objects created from the Connection will receive an <ulink
- url="&oracleJeeDocUrl;javax/jms/IllegalStateException.html"
- >IllegalStateException</ulink>.</para></entry>
- </row>
-
- </tbody>
- </tgroup>
- </table>
-
- <!--
- :
- AMQDisconnectedException: Server closed connection
- -->
-
-</appendix>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Appendix-Maven.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-Appendix-Maven.xml
deleted file mode 100644
index 9042854f56..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Appendix-Maven.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<appendix id="JMS-Client-0-8-Appendix-Maven">
- <title>Minimal Maven POM</title>
- <para> The following is a minimal Maven POM required to use the Qpid Client. It is suitable for
- use with the <link linkend="JMS-Client-0-8-Examples">examples</link> included in this
- book.</para>
-
- <example>
- <title>Minimal Maven POM </title>
- <programlisting>
- <![CDATA[
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>test</groupId>
- <artifactId>test</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>]]>&qpidClientGroupId;<![CDATA[</groupId>
- <artifactId>]]>&qpidClientArtefactId;<![CDATA[</artifactId>
- <version>]]>&qpidVersion;<![CDATA[</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.6.4</version>
- </dependency>
- <dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-jms_1.1_spec</artifactId>
- <version>1.1.1</version>
- </dependency>
- </dependencies>
-</project>
- ]]>
- </programlisting>
- </example>
- <para>Note: We use the SLF4J Binding for Log4J12 here, but any SLF4J Binding could be used
- instead. Similarly, Geronimo JMS Spec is used, but any dependency that provides the JMS 1.1
- specification could be subsituted.</para>
-</appendix>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Binding-URL.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-Binding-URL.xml
deleted file mode 100644
index dd1c86c846..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Binding-URL.xml
+++ /dev/null
@@ -1,244 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<chapter id="JMS-Client-0-8-Binding-URL">
- <title>Binding URL</title>
-
- <para> The <emphasis>Binding URL</emphasis> syntax for addressing<footnote>
- <para>The client also supports the ADDR format. This is documented in <ulink
- url="&qpidProgrammingBook;">Programming in Apache Qpid</ulink>.</para>
- </footnote>. It allows the specification of the bindings between a queue and an exchange, queue
- and exchange creation arguments and some ancillary options.</para>
-
- <para> The format for a <emphasis>Binding URL</emphasis> is provided below <screen><![CDATA[
-<Exchange Class>://<Exchange Name>/[<Destination>]/[<Queue>][?<option>='<value>'[&<option>='<value>']]
- ]]></screen> where <itemizedlist>
- <listitem>
- <para><emphasis>Exchange Class</emphasis>, specifies the type of the exchange, for example,
- <emphasis>direct</emphasis>,<emphasis>topic</emphasis>,<emphasis>fanout</emphasis>, etc.
- </para>
- </listitem>
- <listitem>
- <para><emphasis>Exchange Name</emphasis>, specifies the name of the exchange, for example,
- <emphasis>amq.direct</emphasis>,<emphasis>amq.topic</emphasis>, etc. </para>
- </listitem>
- <listitem>
- <para><emphasis>Destination</emphasis>, is an optional part of <emphasis>Binding
- URL</emphasis>. It can be used to specify a routing key with the non direct exchanges if
- an option <emphasis>routingkey</emphasis> is not specified. If both
- <emphasis>Destination</emphasis> and option <emphasis>routingkey</emphasis> are
- specified, then option <emphasis>routingkey</emphasis> has precedence. </para>
- </listitem>
- <listitem>
- <para><emphasis>Queue</emphasis>, is an optional part of <emphasis>Binding URL</emphasis> to
- specify a queue name for JMS queue destination. It is ignored in JMS topic destinations.
- Queue names may consist of any mixture of digits, letters, and underscores </para>
- </listitem>
- <listitem>
- <para><emphasis>Options</emphasis>, key-value pairs separated by '=' character specifying
- queue and exchange creation arguments, routing key, client behaviour, etc. </para>
- </listitem>
- </itemizedlist>
- </para>
-
- <important>
- <title>Binding URL option quoting</title>
- <para>Take care with the quoting surrounding option values. Each option value
- <emphasis>must</emphasis> be surrounded with single quotes ('). </para>
- </important>
-
- <para> The following <emphasis>Binding URL</emphasis> options are currently defined: <table
- pgwide="1">
- <title>Binding URL options </title>
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Option</entry>
- <entry>Type</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><para>durable</para></entry>
- <entry><para>boolean </para></entry>
- <entry><para>Queue durability flag. If it is set to <emphasis>true</emphasis>, a durable
- queue is requested to create. The durable queue should be stored on the Broker and
- remained there after Broker restarts until it is explicitly deleted. This option has
- no meaning for JMS topic destinations, as by nature a topic destination only exists
- when a subscriber is connected. If durability is required for topic destinations,
- the durable subscription should be created.</para></entry>
- </row>
- <row>
- <entry><para>exclusive</para></entry>
- <entry><para>boolean </para></entry>
- <entry><para>Queue exclusivity flag. The client cannot use a queue that was declared as
- exclusive by another still-open connection.</para></entry>
- </row>
- <row>
- <entry><para>autodelete</para></entry>
- <entry><para>boolean </para></entry>
- <entry><para>Queue auto-deletion flag. If it is set to <emphasis>true</emphasis> on
- queue creation, the queue is deleted if there are no remaining
- subscribers.</para></entry>
- </row>
- <row>
- <entry><para>exchangeautodelete</para></entry>
- <entry><para>boolean </para></entry>
- <entry><para>Exchange auto-deletion flag.</para></entry>
- </row>
- <row>
- <entry><para>exchangedurable</para></entry>
- <entry><para>boolean </para></entry>
- <entry><para>Exchange durability flag. If it is set to <emphasis>true</emphasis> when
- creating a new exchange, the exchange will be marked as durable. Durable exchanges
- should remain active after Broker restarts. Non-durable exchanges are deleted on
- following Broker restart.</para></entry>
- </row>
- <row>
- <entry><para>routingkey</para></entry>
- <entry><para>string </para></entry>
- <entry>
- <para> Defines the value of the binding key to bind a queue to the exchange. It is
- always required to specify for JMS topic destinations. If routing key option is not
- set in <emphasis>Binding URL</emphasis> and direct exchange class is specified, the
- queue name is used as a routing key. <emphasis>MessagePublisher</emphasis> uses
- routing key to publish messages onto exchange. </para>
- </entry>
- </row>
- <row>
- <entry><para>browse</para></entry>
- <entry><para>boolean </para></entry>
- <entry><para>If set to <emphasis>true</emphasis> on a destination for a message
- consumer, such consumer can only read messages on the queue but cannot consume them.
- The consumer behaves like a queue browser in this case.</para></entry>
- </row>
- <row id="JMS-Client-0-8-Binding-URL-Options-RejectBehaviour">
- <entry><para>rejectbehaviour</para></entry>
- <entry><para>string </para></entry>
- <entry><para>Defines the reject behaviour for the re-delivered messages. If set to
- 'SERVER' the client delegates the requeue/DLQ decision to the server. If this option
- is not specified, the messages won't be moved to the DLQ (or dropped) when delivery
- count exceeds the maximum. </para></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </para>
-
- <section id="JMS-Client-0-8-Binding-URL-Examples">
- <title>Binding URL Examples</title>
-
- <section id="JMS-Client-0-8-Binding-URL-JMS-Queues" role="h4">
- <title>Binding URLs for declaring of JMS Queues</title>
- <para>The Qpid client Binding URLs for JMS queue destinations can be declared using direct
- exchange (Mostly it is a pre-defined exchange with a name "amq.direct". Also, custom direct
- exchanges can be used.): <screen><![CDATA[
-direct://amq.direct//<Queue Name>
- ]]></screen>
- </para>
- <para>The Binding URLs for destinations created with calls to
- <emphasis>Session.createQueue(String)</emphasis> can be expressed as <screen><![CDATA[
-direct://amq.direct//<Queue Name>?durable='true'
- ]]></screen> The durability flag is set to <emphasis>true</emphasis> in such destinations. </para>
- <example>
- <title>Binding URL examples for JMS queues</title>
- <screen><![CDATA[
-direct://amq.direct//myNonDurableQueue
-direct://amq.direct//myDurableQueue?durable='true'
-direct://amq.direct//myAnotherQueue?durable='true'&routingkey='myqueue'
-direct://amq.direct//myQueue?durable='true'&routingkey='myqueue'&rejectbehaviour='server'
-direct://custom.direct//yetAnotherQueue
- ]]></screen>
- </example>
- </section>
-
- <section id="JMS-Client-0-8-Binding-URL-JMS-Topics" role="h4">
- <title>Binding URLs for declaring of JMS Topics</title>
- <para>The Binding URLs for JMS queue destinations can be declared using topic exchange (A
- pre-defined exchange having name "amq.topic" is used mainly. However, custom topic exchanges
- can be used as well): <screen><![CDATA[
-topic://amq.topic//<Queue name>?routingkey='<Topic Name>'&exclusive='true'&autodelete='true'
- ]]></screen>
- </para>
- <para>The Binding URLs for a topic destination created with calls to
- <emphasis>Session.createTopic("hello")</emphasis> is provided below: <example>
- <title>Binding URL examples for JMS topics</title>
- <screen><![CDATA[
-topic://amq.topic/hello/tmp_127_0_0_1_36973_1?routingkey='hello'&exclusive='true'&autodelete='true'
- ]]></screen>
- </example>
- </para>
- </section>
-
- <section id="JMS-Client-0-8-Binding-URL-Topics-Wildcards" role="h4">
- <title>Wildcard characters in routing keys for topic destinations</title>
- <para> AMQP exchanges of class <emphasis>topic</emphasis> can route messages to the queues
- using special matches containing wildcard characters (a "#" matches one or more words, a "*"
- matches a single word). The routing keys words are separated with a "." delimiter to
- distinguish words for matching. Thus, if a consumer application specifies a routing key in
- the destination like "usa.#", it should receive all the messages matching to that routing
- key. For example, "usa.boston", "usa.new-york", etc. </para>
- <para> The examples of the <emphasis>Binding URLs</emphasis> having routing keys with
- wildcards characters are provided below: <screen><![CDATA[
-topic://amq.topic?routingkey='stocks.#'
-topic://amq.topic?routingkey='stocks.*.ibm'
-topic://amq.topic?routingkey='stocks.nyse.ibm'
- ]]></screen>
- </para>
- </section>
-
- <section id="JMS-Client-0-8-Binding-URL-Extra-Examples" role="h4">
- <title>More Examples</title>
- <table>
- <title>Binding URL examples</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Binding URL</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><para>fanout://amq.fanout//myQueue</para></entry>
- <entry><para>Binding URL binding queue "myQueue" to predefined "amq.fanout" exchange
- of class "fanout"</para></entry>
- </row>
- <row>
- <entry><para>topic://custom.topic//anotherQueue?routingkey='aq'</para></entry>
- <entry><para>Binding URL binding queue "anotherQueue" to the exchange with name
- "custom.topic" of class "topic" using binding key "aq".</para></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </section>
- </section>
-
-</chapter>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Book.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-Book.xml
deleted file mode 100644
index 5db6d4aa19..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Book.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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 xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>Qpid JMS Client for AMQP protocols 0-8, 0-9 and 0-9-1</title>
-
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-Introduction.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-Document-Scope-And-Intended-Audience.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-Getting-And-Dependencies.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-Examples.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-Understanding.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-JNDI-Properties-Format.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-Connection-URL.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-Binding-URL.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-System-Properties.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-Logging.xml"/>
-
- <!-- TODO:
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-Interoperability.xml"/>
- -->
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-Appendix-Exceptions.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-Appendix-Maven.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="JMS-Client-JMS-Extensions.xml"/>
-
-
-
-</book>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Connection-URL.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-Connection-URL.xml
deleted file mode 100644
index 06b1d6d7fc..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Connection-URL.xml
+++ /dev/null
@@ -1,337 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<chapter id="JMS-Client-0-8-Connection-URL">
- <title>Connection URLs</title>
- <para> In JNDI properties, a Connection URL specifies options for a connection. The format for a
- Connection URL is: </para>
-
- <programlisting><![CDATA[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: a TCP host with the host
- name <quote>localhost</quote> using port 5672: </para>
-
- <programlisting><![CDATA[amqp://username:password@clientid/test?brokerlist='tcp://localhost:5672']]></programlisting>
-
- <important>
- <title>Connection option quoting</title>
- <para>Take care with the quoting surrounding option values. Each option value
- <emphasis>must</emphasis> be surrounded with single quotes ('). </para>
- </important>
-
- <para>The Connection URL supports the following options:</para>
- <table pgwide="1" id="JMS-Client-0-8-Connection-URL-Options">
- <title>Connection URL Options</title>
- <tgroup cols="3">
- <thead>
- <row>
- <entry> Option </entry>
- <entry> Type </entry>
- <entry> Description </entry>
- </row>
- </thead>
- <tbody>
- <row id="JMS-Client-0-8-Connection-URL-ConnectionOptions-Brokerlist">
- <entry> brokerlist </entry>
- <entry> see below </entry>
- <entry> List of one or more broker addresses. </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-ConnectionOptions-Maxprefetch">
- <entry> maxprefetch </entry>
- <entry> integer </entry>
- <entry>
- <para> The maximum number of pre-fetched messages per Session. If not
- specified, default value of 500 is used. </para>
- <para> Note: You can also set the default per-session prefetch value on a
- client-wide basis by configuring the client using <link
- linkend="JMS-Client-0-8-System-Properties">Java system
- properties.</link>
- </para>
- </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-ConnectionOptions-SyncPublish">
- <entry> sync_publish </entry>
- <entry> String </entry>
- <entry>
- <para>
- If the value is 'all' the client library waits for confirmation
- before returning from a send(), and if the send is unsuccessful the
- send() will throw a JMSException. (Note this option requires an
- extension to the AMQP protocol and will only work against a broker of
- the 0.32 release or later.)
- </para>
- </entry>
- </row>
- <row>
- <entry> sync_ack </entry>
- <entry> Boolean </entry>
- <entry> A sync command is sent after every acknowledgement to guarantee that it
- has been received. </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-ConnectionOptions-UseLegacyMap">
- <entry> use_legacy_map_msg_format </entry>
- <entry> Boolean </entry>
- <entry> If you are using JMS Map messages and deploying a new client with any
- JMS client older than 0.8 release, you must set this to true to ensure the
- older clients can understand the map message encoding. </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-ConnectionOptions-Failover">
- <entry> failover </entry>
- <entry> {'singlebroker' | 'roundrobin'
- ,<!-- Cpp/0-10 only | 'failover_exchange' --> | 'nofailover' |
- '&lt;class&gt;'} </entry>
- <entry>
- <para> This option controls failover behaviour. The method
- <literal>singlebroker</literal> uses only the first broker in the
- list, <literal>roundrobin</literal> will try each broker given in the
- broker list until a connection is established,
- <!--<literal>failover_exchange</literal> connects to the initial broker
- given in the broker URL and will receive membership updates via the
- failover exchange. --><literal>nofailover</literal>
- disables all retry and failover logic. Any other value is interpreted as
- a classname which must implement the
- <literal>org.apache.qpid.jms.failover.FailoverMethod</literal>
- interface. </para>
- <para> The broker list options <literal>retries</literal> and
- <literal>connectdelay</literal> (described below) determine the
- number of times a connection to a broker will be retried and the
- length of time to wait between successive connection attempts before
- moving on to the next broker in the list. The failover option
- <literal>cyclecount</literal> controls the number of times to loop
- through the list of available brokers before finally giving up. </para>
- <para> Defaults to <literal>roundrobin</literal> if the brokerlist contains
- multiple brokers, or <literal>singlebroker</literal> otherwise. </para>
- </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-ConnectionOptions-CloseWhenNoRoute">
- <entry> closeWhenNoRoute </entry>
- <entry> boolean </entry>
- <entry>
- <para>See <xref
- linkend="JMS-Client-0-8-Client-Understanding-MessageProducer-CloseWhenNoRoute"
- />.</para>
- </entry>
- </row>
- <row>
- <entry> ssl </entry>
- <entry> boolean </entry>
- <entry>
- <para> If <literal>ssl='true'</literal>, use SSL for all broker connections.
- Overrides any per-broker settings in the brokerlist (see below) entries.
- If not specified, the brokerlist entry for each given broker is used to
- determine whether SSL is used. </para>
- <para> Introduced in version 0.22. </para>
- </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-ConnectionOptions-CompressMessages">
- <entry>compressMessages</entry>
- <entry>Boolean</entry>
- <entry><para>Controls whether the client will compress messages before they they are sent.</para></entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-ConnectionOptions-MessageCompressionThresholdSize">
- <entry>messageCompressionThresholdSize</entry>
- <entry>Integer</entry>
- <entry><para>The payload size beyond which the client will start to compress message payloads.</para></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- <para> Broker lists are specified using a URL in this format: </para>
-
- <programlisting><![CDATA[brokerlist=<transport>://<host>[:<;port>](?<param>='<value>')(&<param>='<value>')*]]></programlisting>
- <para> For instance, this is a typical broker list: </para>
-
- <programlisting><![CDATA[brokerlist='tcp://localhost:5672']]></programlisting>
-
- <para> A broker list can contain more than one broker address; if so, the connection is made to
- the first broker in the list that is available.
- <!--In general, it is better to use the failover
- exchange when using multiple brokers, since it allows applications to fail over if a broker
- goes down.--></para>
-
- <example>
- <title>Broker Lists</title>
- <para>A broker list can specify properties to be used when connecting to the broker. This
- broker list specifies options for configuring heartbeating</para>
- <programlisting><![CDATA[amqp://guest:guest@test/test?brokerlist='tcp://ip1:5672?heartbeat='5'']]></programlisting>
-
- <para>This broker list specifies some SSL options</para>
-
- <programlisting><![CDATA[amqp://guest:guest@test/test?brokerlist='tcp://ip1:5672?ssl='true'&ssl_cert_alias='cert1'']]></programlisting>
-
- <para> This broker list specifies two brokers using the connectdelay and retries broker
- options. It also illustrates the failover connection URL property. </para>
-
- <programlisting><![CDATA[amqp://guest:guest@/test?failover='roundrobin?cyclecount='2''
- &brokerlist='tcp://ip1:5672?retries='5'&connectdelay='2000';tcp://ip2:5672?retries='5'&connectdelay='2000''
- ]]></programlisting>
- </example>
-
- <important>
- <title>Broker option quoting</title>
- <para>Take care with the quoting surrounding broker option values. Each broker option value
- <emphasis>must</emphasis> be surrounded with their own single quotes ('). This is in
- addition to the quotes surround the connection option value.</para>
- </important>
-
- <para>The following broker list options are supported.</para>
-
- <table pgwide="1">
- <title>Broker List Options</title>
- <tgroup cols="3">
- <thead>
- <row>
- <entry> Option </entry>
- <entry> Type </entry>
- <entry> Description </entry>
- </row>
- </thead>
- <tbody>
- <row id="JMS-Client-0-8-Connection-URL-BrokerOptions-Heartbeat">
- <entry> heartbeat </entry>
- <entry> Long </entry>
- <entry> Frequency of heartbeat messages (in seconds). A value of 0 disables
- heartbeating. <para>For compatibility with old client configuration, option
- <varname>idle_timeout</varname> (in milliseconds) is also
- supported.</para>
- </entry>
- </row>
- <!-- 0-10 only
- <row>
- <entry> sasl_mechs </entry>
- <entry> - </entry>
- <entry> For secure applications, we suggest CRAM-MD5, DIGEST-MD5, or GSSAPI. The
- ANONYMOUS method is not secure. The PLAIN method is secure only when used
- together with SSL. For Kerberos, sasl_mechs must be set to GSSAPI,
- sasl_protocol must be set to the principal for the qpidd broker, e.g.
- qpidd/, and sasl_server must be set to the host for the SASL server, e.g.
- sasl.com. SASL External is supported using SSL certification, e.g.
- <literal>ssl='true'&amp;sasl_mechs='EXTERNAL'</literal>
- </entry>
- </row>
- <row>
- <entry> sasl_encryption </entry>
- <entry> 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. </entry>
- </row>
- <row>
- <entry> sasl_protocol </entry>
- <entry> - </entry>
- <entry> Used only for Kerberos. <literal>sasl_protocol</literal> must be set to
- the principal for the qpidd broker, e.g. <literal>qpidd/</literal>
- </entry>
- </row>
- <row>
- <entry> sasl_server </entry>
- <entry> - </entry>
- <entry> For Kerberos, sasl_mechs must be set to GSSAPI, sasl_server must be set
- to the host for the SASL server, e.g. <literal>sasl.com</literal>. </entry>
- </row>
- -->
- <row>
- <entry> ssl </entry>
- <entry> Boolean </entry>
- <entry>
- <para>If <literal>ssl='true'</literal>, the JMS client will encrypt the
- connection to this broker using SSL.</para>
- <para>This can also be set/overridden for all brokers using the Connection
- URL option <literal>ssl</literal>.</para>
- </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-BrokerOptions-TrustStore">
- <entry> trust_store </entry>
- <entry> String </entry>
- <entry> Path to trust store. Used when using SSL and the Broker's certificate is
- signed by a private-CA (or a self-signed certificate),</entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-BrokerOptions-TrustStorePassword">
- <entry> trust_store_password </entry>
- <entry> String </entry>
- <entry> Trust store password. Password used to open the trust store. </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-BrokerOptions-KeyStore">
- <entry> key_store </entry>
- <entry> String </entry>
- <entry> Path to key store . Used when using SSL and the client must authenticate
- using client-auth. If the store contains more than one certificate,
- <literal>ssl_cert_alias</literal> must be used to identify the
- certificate that the client must present to the Broker.</entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-BrokerOptions-KeyStorePassword">
- <entry> key_store_password </entry>
- <entry> String </entry>
- <entry> Key store password. Password used to open the key store. </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-BrokerOptions-SslCertAlias">
- <entry> ssl_cert_alias </entry>
- <entry> String </entry>
- <entry> If multiple certificates are present in the keystore, the alias will be
- used to extract the correct certificate. </entry>
- </row>
- <row>
- <entry> ssl_verify_hostname </entry>
- <entry> Boolean </entry>
- <entry> This option is used for turning on/off hostname verification when using SSL.
- It is set to 'true' by default. You can disable verification by setting it to 'false':
- <literal>ssl_verify_hostname='false'</literal>.
- </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-BrokerOptions-Retries">
- <entry> retries </entry>
- <entry> Integer </entry>
- <entry> The number of times to retry connection to each broker in the broker
- list. Defaults to 1. </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-BrokerOptions-ConnectDelay">
- <entry> connectdelay </entry>
- <entry> integer </entry>
- <entry> Length of time (in milliseconds) to wait before attempting to reconnect.
- Defaults to 0. </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-BrokerOptions-ConnectTimeout">
- <entry> connecttimeout </entry>
- <entry> integer </entry>
- <entry> Length of time (in milliseconds) to wait for the socket connection to
- succeed. A value of 0 represents an infinite timeout, i.e. the connection
- attempt will block until established or an error occurs. Defaults to 30000.
- </entry>
- </row>
- <row id="JMS-Client-0-8-Connection-URL-BrokerOptions-TcpNoDelay">
- <entry> tcp_nodelay </entry>
- <entry> Boolean </entry>
- <entry> If <literal>tcp_nodelay='true'</literal>, TCP packet batching is
- disabled. Defaults to true since Qpid 0.14. </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
-</chapter>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Document-Scope-And-Intended-Audience.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-Document-Scope-And-Intended-Audience.xml
deleted file mode 100644
index 234a2862cb..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Document-Scope-And-Intended-Audience.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<chapter id="JMS-Client-0-8-Document-Scope-And-Intended-Audience">
- <title>Document Scope And Intended Audience</title>
-
- <para> The intended audience of this document is Java developers who are familiar with the JMS
- specification. Readers are not required to know all the details of AMQP protocols. However, some
- knowledge of AMQP basic concepts would be advantageous for reading of this document. </para>
-
- <para> This document only covers the usage of 0-8, 0-9 and 0-9-1 AMQP protocols with Qpid JMS
- client. The specifications for these protocols are available from the <ulink
- url="&amqpSrc;">AMQP web site</ulink>. </para>
-
- <para> The document covers some specific implementation details of JMS connections, sessions,
- consumers and producers in <xref linkend="JMS-Client-0-8-Client-Understanding"/>. It also
- demonstrates how to write a simple point to point and simple publish/subscribe application using
- Qpid JMS Client in <xref linkend="JMS-Client-0-8-Examples"/>. </para>
-
- <para>The Qpid JMS Client supports various configuration options which can be set via JVM system
- properties, connection URLs and JNDI configuration file. The setting of system properties is
- described in <xref linkend="JMS-Client-0-8-System-Properties"/>. The details of supported
- options within the connection URLs are given in <xref linkend="JMS-Client-0-8-Connection-URL"/>.
- The details of Qpid JMS client JNDI properties format is provided in <xref
- linkend="JMS-Client-0-8-JNDI-Properties-Format"/>. The Qpid destination URL format is covered
- in <xref linkend="JMS-Client-0-8-Binding-URL"/>. </para>
-
- <para>The Qpid JMS Client can be used for writing of JMS vendor neutral messaging applications.
- However, in some cases it might be required to use specific AMQP features. Thus, the Qpid client
- provides the extended operation set to invoke those features. </para>
-
- <para>
- <xref linkend="JMS-Client-0-8-Logging"/> provides the details about turning on client logging
- which can help in debugging of various issues while developing the messaging applications. </para>
-
- <para>The details about Qpid JMS Client Exceptions are provided in <xref
- linkend="JMS-Client-0-8-Appendix-Exceptions"/></para>
-
-</chapter>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Examples.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-Examples.xml
deleted file mode 100644
index 87abbb8bfb..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Examples.xml
+++ /dev/null
@@ -1,297 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<chapter id="JMS-Client-0-8-Examples">
- <title>Examples</title>
-
- <para>The following programs shows how to send and receive messages using the Qpid JMS client.
- The first program illustrates a <emphasis>point to point</emphasis> example, the second, a
- pubish/subscribe example. </para>
- <para>Both examples show the use JNDI to obtain connection factory and destination objects which
- the application needs. In this way the configuration is kept separate from the application
- code itself.</para>
- <para>The example code will be straightforward for anyone familiar with Java JMS. Readers in
- need of an introduction are directed towards <ulink url="&oracleJmsTutorial;">Oracle's JMS
- tutorial</ulink>.</para>
- <section id="JMS-Client-0-8-Examples-PTP">
- <title>Point to point example</title>
- <para>In this example, we illustrate point to point messaging. We create a JNDI context
- using a properties file, use the context to lookup a connection factory, create and
- start a connection, create a session, and lookup a destination (a queue) from the JNDI
- context. Then we create a producer and a consumer, send a message with the producer and
- receive it with the consumer.</para>
-
- <example id="JMS-Client-0-8-Examples-PTP-Java">
- <title>JMS Example - Point to Point Messaging</title>
- <programlisting language="java">
-import javax.jms.*;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import java.util.Properties;
-
-public class Hello {
-
- public Hello() {
- }
-
- public static void main(String[] args) throws Exception {
- Hello hello = new Hello();
- hello.runTest();
- }
-
- private void runTest() throws Exception {
- Properties properties = new Properties();
- properties.load(this.getClass().getResourceAsStream("helloworld.properties")); <co id="ptp-java-properties" linkends="callout-ptp-properties"/>
- Context context = new InitialContext(properties); <co id="ptp-java-context" linkends="callout-ptp-context"/>
-
- ConnectionFactory connectionFactory
- = (ConnectionFactory) context.lookup("qpidConnectionFactory"); <co id="ptp-java-connection-factory" linkends="callout-ptp-connection-factory"/>
- Connection connection = connectionFactory.createConnection(); <co id="ptp-java-connection" linkends="callout-ptp-connection"/>
- connection.start(); <co id="ptp-java-start" linkends="callout-ptp-start"/>
-
- Session session = connection.createSession(true, Session.SESSION_TRANSACTED); <co id="ptp-java-session" linkends="callout-ptp-session"/>
- Queue queue = (Queue) context.lookup("myqueue"); <co id="ptp-java-destination" linkends="callout-ptp-destination"/>
-
- MessageConsumer messageConsumer = session.createConsumer(queue); <co id="ptp-java-consumer" linkends="callout-ptp-consumer"/>
- MessageProducer messageProducer = session.createProducer(queue); <co id="ptp-java-producer" linkends="callout-ptp-producer"/>
-
- TextMessage message = session.createTextMessage("Hello world!"); <co id="ptp-java-send" linkends="callout-ptp-send"/>
- messageProducer.send(message);
- session.commit();
-
- message = (TextMessage)messageConsumer.receive(); <co id="ptp-java-receive" linkends="callout-ptp-receive"/>
- session.commit();
- System.out.println(message.getText());
-
- connection.close(); <co id="ptp-java-close" linkends="callout-ptp-close"/>
- context.close(); <co id="ptp-java-jndi-close" linkends="callout-ptp-jndi-close"/>
- }
-}
- </programlisting>
- </example>
-
- <calloutlist>
- <callout id="callout-ptp-properties" arearefs="ptp-java-properties">
- <para>Loads the JNDI properties file, which specifies the connection factory, queues
- and topics. See <xref linkend="JMS-Client-0-8-JNDI-Properties-Format"/> for
- details.</para>
- </callout>
- <callout id="callout-ptp-context" arearefs="ptp-java-context">
- <para>Creates the JNDI initial context.</para>
- </callout>
- <callout id="callout-ptp-connection-factory" arearefs="ptp-java-connection-factory">
- <para>Looks up a JMS connection factory for Qpid.</para>
- </callout>
- <callout id="callout-ptp-connection" arearefs="ptp-java-connection">
- <para>Creates a JMS connection. Creating the JMS connections establishes the
- connection to the Broker.</para>
- </callout>
- <callout id="callout-ptp-start" arearefs="ptp-java-start">
- <para>Starts the connection, required for the consumption of messages.</para>
- </callout>
- <callout id="callout-ptp-session" arearefs="ptp-java-session">
- <para>Creates a transactional session.</para>
- </callout>
- <callout id="callout-ptp-destination" arearefs="ptp-java-destination">
- <para>Looks up a destination for the queue with JNDI name <emphasis>myqueue</emphasis>.</para>
- </callout>
- <callout id="callout-ptp-consumer" arearefs="ptp-java-consumer">
- <para>Creates a consumer that reads messages from the queue<footnote>
- <para>Creating consumer will automatically create the queue on the Broker
- and bind it to an exchange. Specifically, in this case as the
- <literal>queue.</literal> form is used in the JNDI properties the
- effect will be to create a queue called <literal>queue1</literal> on the
- Broker, and create a binding between the <literal>amq.direct</literal>
- exchange and this queue using the queue's name. This process is
- described in detail in <xref
- linkend="JMS-Client-0-8-Client-Understanding-MessageConsumer-ConsumerSideEffect"
- /></para>
- </footnote>.</para>
- </callout>
- <callout id="callout-ptp-producer" arearefs="ptp-java-producer">
- <para>Creates a producer that sends messages to the queue.</para>
- </callout>
- <callout id="callout-ptp-send" arearefs="ptp-java-send">
- <para>Creates a new message of type <emphasis>javax.jms.TextMessage</emphasis>, publishes the message and commits the
- session.</para>
- </callout>
- <callout id="callout-ptp-receive" arearefs="ptp-java-receive">
- <para>Reads the next available message (awaiting indefinitely if necessary) and
- commits the session.</para>
- </callout>
- <callout id="callout-ptp-close" arearefs="ptp-java-close">
- <para>Closes the Connection. All sessions owned by the Connection along with their
- MessageConsumers and MessageProducers are automatically closed. The connection
- to the Broker is closed as this point.</para>
- </callout>
- <callout id="callout-ptp-jndi-close" arearefs="ptp-java-jndi-close">
- <para>Closes the JNDI context.</para>
- </callout>
- </calloutlist>
-
- <para>The contents of the <literal>helloworld.properties</literal> file are shown
- below.</para>
-
- <example id="JMS-Client-0-8-Examples-PTP-PropertiesFile">
- <title>JMS Example - Point to Point Messaging - JNDI Properties</title>
- <programlisting language="properties">
-java.naming.factory.initial = org.apache.qpid.jndi.PropertiesFileInitialContextFactory
-connectionfactory.qpidConnectionFactory = amqp://guest:guest@clientid/?brokerlist='tcp://localhost:5672' <co id="ptp-properties-connectionfactory" linkends="callout-ptp-properties-connectionfactory"/>
-queue.myqueue = queue1 <co id="ptp-properties-destination" linkends="callout-ptp-properties-destination"/>
- </programlisting>
- </example>
-
- <calloutlist>
- <callout id="callout-ptp-properties-connectionfactory"
- arearefs="ptp-properties-connectionfactory">
- <para>Defines a connection factory from which Connections can be created. The syntax
- of a ConnectionURL is given in <xref
- linkend="JMS-Client-0-8-Connection-URL"/>.</para>
- </callout>
- <callout id="callout-ptp-properties-destination" arearefs="ptp-properties-destination">
- <para>Defines a queue for which MessageProducers and/or MessageConsumers send and
- receive messages. The format of these entries is described in <xref
- linkend="JMS-Client-0-8-JNDI-Properties-Format-Queue"/>.</para>
- </callout>
- </calloutlist>
- </section>
- <section id="JMS-Client-0-8-Examples-PubSub">
- <title>Publish/subscribe example</title>
- <para>In this second example, we illustrate publish/subscribe messaging. Again, we create a
- JNDI context using a properties file, use the context to lookup a connection factory,
- create and start a connection, create a session, and lookup a destination (a topic) from
- the JNDI context. Then we create a producer and two durable subscribers , send a message
- with the producer. Both subscribers receive the same message.</para>
-
- <example id="JMS-Client-0-8-Examples-PubSub-Java">
- <title>JMS Example - Publish/subscribe Messaging</title>
- <programlisting language="java">
-import javax.jms.*;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-
-import java.util.Properties;
-
-public class StocksExample {
-
- public StocksExample() {
- }
-
- public static void main(String[] args) throws Exception {
- StocksExample stocks = new StocksExample();
- stocks.runTest();
- }
-
- private void runTest() throws Exception {
- Properties properties = new Properties();
- properties.load(this.getClass().getResourceAsStream("stocks.properties"));
- Context context = new InitialContext(properties);
-
- ConnectionFactory connectionFactory
- = (ConnectionFactory) context.lookup("qpidConnectionFactory");
- Connection connection = connectionFactory.createConnection();
- connection.start();
-
- Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
- Topic priceTopic = (Topic) context.lookup("myprices"); <co id="pubsub-java-destination" linkends="callout-pubsub-destination"/>
-
- MessageConsumer subscriber1 = session.createDurableSubscriber(priceTopic, "sub1"); <co id="pubsub-java-subscribers" linkends="callout-pubsub-subscribers"/>
- MessageConsumer subscriber2 = session.createDurableSubscriber(priceTopic, "sub2" /*, "price > 150", false*/ );
- MessageProducer messageProducer = session.createProducer(priceTopic);
-
- Message message = session.createMessage();
- message.setStringProperty("instrument", "IBM");
- message.setIntProperty("price", 100);
- messageProducer.send(message);
- session.commit();
-
- message = subscriber1.receive(1000);
- session.commit();
- System.out.println("Subscriber 1 received : " + message);
-
- message = subscriber2.receive(1000);
- session.commit();
- System.out.println("Subscriber 2 received : " + message);
-
- session.unsubscribe("sub1"); <co id="pubsub-java-unsubscribe" linkends="callout-pubsub-unsubscribe"/>
- session.unsubscribe("sub2");
- connection.close();
- context.close();
- }
-}
- </programlisting>
- </example>
-
- <calloutlist>
- <callout id="callout-pubsub-destination" arearefs="pubsub-java-destination">
- <para>Looks up a destination for the topic with JNDI name myprices.</para>
- </callout>
- <callout id="callout-pubsub-subscribers" arearefs="pubsub-java-subscribers">
- <para>Creates two durable subscribers, <literal>sub1</literal> and
- <literal>sub2</literal>. Durable subscriptions retain messages for the
- client even when the client is disconnected, until the subscription is
- unsubscribed. Subscription 2 has a (commented out) message selector argument so
- you can conveniently experiement with the effect of those. <footnote>
- <para>Each durable subscription is implemented as a queue on the Broker. See
- <xref
- linkend="JMS-Client-0-8-Client-Understanding-MessageConsumer-TopicSubscriptions"
- /> for details.</para>
- </footnote></para>
- </callout>
- <callout id="callout-pubsub-unsubscribe" arearefs="pubsub-java-unsubscribe">
- <para>Unsubscribes the two durable subscribers, permanently removing the knowledge
- of the subscriptions from the system. An application would normally
- <emphasis>NOT</emphasis> do this. The typical use-case for durable
- subsciption is one where the subscription exists over an extended period of
- time.</para>
- </callout>
- </calloutlist>
-
- <para>The contents of the <literal>stocks.properties</literal> file are shown below.</para>
-
- <example id="JMS-Client-0-8-Examples-PubSub-PropertiesFile">
- <title>JMS Example - Publish/subscribe Messaging - JNDI Properties</title>
- <programlisting>
-java.naming.factory.initial = org.apache.qpid.jndi.PropertiesFileInitialContextFactory
-connectionfactory.qpidConnectionFactory = amqp://guest:guest@clientid/?brokerlist='tcp://localhost:5672'
-topic.myprices = prices <co id="pubsub-properties-destination" linkends="callout-pubsub-properties-destination"/>
- </programlisting>
- </example>
-
- <calloutlist>
- <callout id="callout-pubsub-properties-destination"
- arearefs="pubsub-properties-destination">
- <para>Defines a topic for which MessageProducers and/or MessageConsumers send and
- receive messages. The format of this entry is described in <xref
- linkend="JMS-Client-0-8-JNDI-Properties-Format-Topic"/>.</para>
- </callout>
- </calloutlist>
- </section>
-
-
-</chapter>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Getting-And-Dependencies.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-Getting-And-Dependencies.xml
deleted file mode 100644
index 7ffddade3a..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Getting-And-Dependencies.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<chapter id="JMS-Client-0-8-JMS-Getting-And-Dependencies">
- <title>Getting the Client And Dependencies</title>
- <section id="JMS-Client-0-8-JMS-Getting-And-Dependencies-Getting">
- <title>Getting the Client</title>
- <para>The Qpid JMS client is available as a bundle or from &qpidMavenRepoDesc;.</para>
- <para>The bundle (a .tar.gz) includes the Qpid JMS client itself (formed by two JAR: qpid-client
- and qpid-common) together with slf4j-api, and geronimo-jms_1.1_spec. There is also a qpid-all
- JAR artifact that, for convenience, includes a manifest classpath that references the other
- JARs. The bundle is available from <ulink url="&qpidDownloadUrl;"
- >&qpidDownloadUrlDesc;</ulink>.</para>
- <para>The Qpid JMS client is also available from &qpidMavenRepoDesc;. Add the following
- dependency:</para>
- <screen><![CDATA[
- <dependency>
- <groupId>]]>&qpidClientGroupId;<![CDATA[</groupId>
- <artifactId>]]>&qpidClientArtefactId;<![CDATA[</artifactId>
- <version>]]>&qpidVersion;<![CDATA[</version>
- </dependency>
- ]]></screen>
- <para><xref linkend="JMS-Client-0-8-Appendix-Maven"/> illustrates a minimal Maven POM required to use the Qpid Client.</para>
- </section>
- <section id="JMS-Client-0-8-JMS-Getting-And-Dependencies-Dependencies">
- <title>Dependencies</title>
- <para>The Qpid JMS client has minimal set of external dependencies. </para>
- <para> It requires: <itemizedlist>
- <listitem>
- <para>JDK 1.7 or higher.</para>
- </listitem>
- <listitem>
- <para>JMS 1.1 specification (such as geronimo-jms_1.1_spec JAR)</para>
- </listitem>
- <listitem>
- <para><ulink url="http://www.slf4j.org">Apache SLF4J</ulink> (slf4j-api-x.y.z JAR)</para>
- </listitem>
- </itemizedlist>
- </para>
- <para>The use of SLF4J means that application authors are free to plug in any logging framework
- for which an SLF4J binding exists. </para>
- </section>
-</chapter>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Introduction.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-Introduction.xml
deleted file mode 100644
index 3707e8981b..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Introduction.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<!-- TODO add dependencies + getting the client -->
-
-<chapter id="JMS-Client-0-8-Introduction">
- <title>Introduction</title>
- <para>Qpid JMS client is an implementation of <ulink url="&oracleJmsSpec;">JMS specification
- 1.1</ulink>. It utilises an <ulink url="&amqpSrc;">AMQP</ulink> transport layer for the performing of messaging operations.
- The client is intended to be used for the writing of JMS compatible messaging applications. Such
- applications can send and receive messages via any AMQP-compatible brokers like RabbitMQ, Qpid
- Java Broker which support the AMQP protocols 0-8, 0-9, or 0-9-1.</para>
- <para>The Qpid JMS client hides the details of AMQP transport implementation behind the JMS API.
- Thus, the developers need only to be familiar with JMS API in order to use the client. However,
- the knowledge of the basic concepts of AMQP protocols can help developers in writing reliable
- and high-performant messaging application. </para>
- <important>
- <title>Using the Qpid JMS client with 0-10</title>
- <para>This book documents the behaviour of the Qpid JMS client when used with the AMQP
- protocols <emphasis>0-8, 0-9, and 0-9-1</emphasis> only. For behaviour when using the client
- with AMQP 0-10 protocol, please refer to <ulink url="&qpidProgrammingBook;">Programming in Apache Qpid</ulink>.</para>
- </important>
-
-</chapter>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-JMS-Extensions.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-JMS-Extensions.xml
deleted file mode 100644
index 537a1075fe..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-JMS-Extensions.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<appendix id="JMS-Client-0-8-Appendix-JMS-Extensions">
- <title>JMS Extensions</title>
- <para>This section illustrates using Qpid specific extentions to JMX for the managament of queues,
- exchanges and bindings.</para>
- <!-- TODO perhaps mention ConnectionListener?-->
- <important>
- <para>It is not recommended that these extensions are generally used. These interfaces are
- subject to change and will not be supported in this form for AMQP 1.0. Instead, the reader is
- directed towards the Managment interfaces of the Broker.</para>
- </important>
- <section id="JMS-Client-0-8-Appendix-JMS-Extensions-Queue">
- <title>Queue Management</title>
- <para>These extensions allow queues to be created or removed.</para>
- <section id="JMS-Client-0-8-Appendix-JMS-Extensions-Queue-Creation">
- <title>Queue creation</title>
- <para>The following example illustrates the creation of the a LVQ queue from a
- javax.jms.Session object. Note that this utilises a Qpid specific extension to JMS and
- involves casting the session object back to its Qpid base-class.</para>
- <example>
- <title>Creation of an LVQ using the Qpid extension to JMS</title>
- <programlisting><![CDATA[Map<String,Object> arguments = new HashMap<String, Object>();
-arguments.put("qpid.last_value_queue_key","ISIN");
-AMQDestination amqQueue = (AMQDestination) context.lookup("myqueue");
-((AMQSession<?,?>) session).createQueue(
- AMQShortString.valueOf(amqQueue.getQueueName()),
- amqQueue.isAutoDelete(),
- amqQueue.isDurable(),
- amqQueue.isExclusive(),
- arguments);
-]]></programlisting>
- </example>
- </section>
- </section>
-
- <section id="JMS-Client-0-8-Appendix-JMS-Extensions-Binding">
- <title>Binding Management</title>
- <para>These extensions allow bindings to be created or removed.</para>
-
- <section id="JMS-Client-0-8-Appendix-JMS-Extensions-Binding-Creation">
- <title>Binding creation</title>
- <para>The following example illustrates the creation of queue binding to topic exchange with
- JMS client.</para>
- <example>
- <title>Binding a queue using JMS</title>
- <programlisting><![CDATA[ConnectionFactory connectionFactory = ...
-Connection connection = connectionFactory.createConnection();
-AMQSession<?, ?> session = (AMQSession<?,?>)connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
-...
-
-AMQShortString queueName = new AMQShortString("testQueue");
-AMQShortString routingKey = new AMQShortString("testRoutingKey");
-AMQDestination destination = (AMQDestination) session.createQueue(queueName.asString());
-
-...
-
-// binding arguments
-Map<String, Object> arguments = new HashMap<String, Object>();
-arguments.put("x-filter-jms-selector", "application='app1'");
-
-// create binding
-session.bindQueue(queueName, routingKey, FieldTable.convertToFieldTable(arguments),
- new AMQShortString("amq.topic"), destination);]]></programlisting>
- </example>
- </section>
- </section>
-</appendix>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-JNDI-Properties-Format.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-JNDI-Properties-Format.xml
deleted file mode 100644
index fb7d96fd68..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-JNDI-Properties-Format.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<chapter id="JMS-Client-0-8-JNDI-Properties-Format">
- <title>JNDI Properties Format</title>
-
- <para>The Qpid JMS Client comes with own JNDI context factory
- <literal>org.apache.qpid.jndi.PropertiesFileInitialContextFactory</literal> which utilises a
- Java properties file for declaring the JMS administered objects: connection factories, queues,
- topics and destinations. It uses the following syntax:</para>
- <para>
- <screen><![CDATA[
-connectionfactory.<jndi name>=<connection url>
-queue.<jndi name>=<queue name>
-topic.<jndi name>=<topic name>
-destination.<jndi name>=<binding url>
-]]></screen></para>
- <para>An arbitrary number of connection factories, queues, topics, queues or destinations or can
- be declared in the JNDI properties file. Each JNDI name must be unique.</para>
- <para>The application looks up the objects via an InitialContext. This lookup and an example JNDI
- properties file is provided in <xref linkend="JMS-Client-0-8-Examples"/></para>
- <para>We now consider each JMS administered object type in turn.</para>
-
- <section id="JMS-Client-0-8-JNDI-Properties-Format-ConnectionFactory">
- <title>ConnectionFactory</title>
- <para><literal>connectionfactory.</literal><emphasis>name</emphasis> declares a <ulink
- url="&oracleJeeDocUrl;javax/jms/ConnectionFactory.html">ConnectionFactory</ulink> with the
- given JNDI name. The value must be a legal Connection URL.</para>
- <para>See <xref linkend="JMS-Client-0-8-Connection-URL"/> for format of the URL and its
- permitted options.</para>
- </section>
- <section id="JMS-Client-0-8-JNDI-Properties-Format-Queue">
- <title>Queue</title>
- <para><literal>queue.</literal><emphasis>name</emphasis> declares a <ulink
- url="&oracleJeeDocUrl;javax/jms/Queue.html">Queue</ulink> with the given JNDI name. The
- value is simple queue name. This is the name of the queue as known by the Broker.</para>
- <para>The <literal>queue.</literal> form is a short hand for declaring a destination:</para>
- <screen><![CDATA[destination.name=direct://amq.direct//<queue name>?routingkey=’<queue name>’&durable=’true’]]></screen>
- </section>
- <section id="JMS-Client-0-8-JNDI-Properties-Format-Topic">
- <title>Topic</title>
- <para><literal>topic.</literal><emphasis>name</emphasis> declares a <ulink
- url="&oracleJeeDocUrl;javax/jms/Topic.html">Topic</ulink> with the given JNDI name. The
- value is topic name. This topic name is used on the Broker as a binding key between the
- <literal>amq.topic</literal> exchange and the queue corresponding to the topic
- subscriber.</para>
- <para>The <literal>topic.</literal> form is a short hand for declaring a destination:</para>
- <screen><![CDATA[destination.name=topic://amq.topic/<topic name>/?routingkey=<topic name>]]></screen>
- </section>
- <section id="JMS-Client-0-8-JNDI-Properties-Format-Destination">
- <title>Destination</title>
- <para><literal>destination.</literal><emphasis>name</emphasis> declares either a <ulink
- url="&oracleJeeDocUrl;javax/jms/Queue.html">Queue</ulink> or <ulink
- url="&oracleJeeDocUrl;javax/jms/Topic.html">Topic</ulink> (depending on the class) with the
- given JNDI name. The value must be a Binding URL.</para>
- <para>See <xref linkend="JMS-Client-0-8-Binding-URL"/> for format of the URL and its permitted
- options.</para>
- </section>
-
-
-</chapter>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Logging.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-Logging.xml
deleted file mode 100644
index b231972784..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Logging.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<chapter id="JMS-Client-0-8-Logging">
- <title>Logging</title>
- <para>The Qpid JMS client uses the <ulink url="http://www.slf4j.org">Apache SLF4J</ulink> logging
- framework. All logging activity created by the client is directed through the SLF4J API. SLF4J
- is a is a façade for other common logging frameworks. This makes it easy for application authors
- to use their prefered logging framework in their application stack, and have the Qpid JMS Client
- use it too. </para>
- <para>SLF4J suppplies bindings for many common logging frameworks (<ulink
- url="&oracleJdkDocUrl;java/util/logging/package-summary.html">JUL</ulink>, <ulink
- url="http://logging.apache.org/log4j/1.2/">Apache Log4J</ulink>, <ulink
- url="http://logback.qos.ch">Logback</ulink>.</para>
- <para>Include the SLF4J binding corresponding to the logging framework of your choosen logging
- framework on classpath. For full details, see the SLF4J <ulink url="http://www.slf4j.org"
- >documentation</ulink>.</para>
-
- <section id="JMS-Client-0-8-Logging-RecommendedProductionLoggingLevel">
- <title>Recommended Production Logging Level</title>
- <para>In production, it is recommended that you configure your logging framework is configured
- with logger <literal>org.apache.qpid</literal> set to <literal>WARN</literal>.</para>
- <para>If you are using Apache Log4j with a log4j.properties file, this simply means adding the
- following line:</para>
- <screen>
- org.apache.qpid=WARN
- </screen>
- <para>If you are using another logging framework, or you are using Log4j but configuring in
- another manner, refer to the documentation accompanying the logging framework for details of
- how to proceed.</para>
- </section>
- <section id="JMS-Client-0-8-Logging-EnablingDebugLogging">
- <title>Enabling Debug</title>
- <para>If you are experiencing a problem, it can be informative to enable debug logging to allow
- the behaviour of the Qpid JMS client to be understood at a deeper level.</para>
- <para>To do this, set the <literal>org.apache.qpid</literal> logger to
- <literal>DEBUG</literal>.</para>
- <para>If you are using Apache Log4j with a log4j.properties file, this simply means adding (or
- changing) the following line:</para>
- <screen>
- org.apache.qpid=DEBUG
- </screen>
- <para>If you are using another logging framework, or you are using Log4j but configuring in
- another manner, refer to the documentation accompanying the logging framework for details of
- how to proceed.</para>
- </section>
-
-</chapter>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-System-Properties.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-System-Properties.xml
deleted file mode 100644
index a1b7a44725..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-System-Properties.xml
+++ /dev/null
@@ -1,655 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<chapter id="JMS-Client-0-8-System-Properties">
- <title>System Properties</title>
- <para>The following system properties affect the behaviour of the Qpid JMS client. System
- properties are global in nature so affect all Qpid interactions made from within the same
- JVM. For many options, there are equivalent <link linkend="JMS-Client-0-8-Connection-URL"
- >Connection URL</link> options allowing the option to be controlled at the level of the
- Connection.</para>
-
- <table pgwide="1">
- <title>System Properties Affecting Connection Behaviour</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Property Name</entry>
- <entry>Type</entry>
- <entry>Default Value</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>qpid.amqp.version</entry>
- <entry>string</entry>
- <entry>0-10</entry>
- <entry><para>Sets the AMQP version to be used - currently supports one of
- {0-8,0-9,0-91,0-10}.</para><para>The client will begin negotiation at
- the specified version and only negotiate downwards if the Broker does
- not support the specified version.</para></entry>
- </row>
- <row id="JMS-Client-0-8-System-Properties-Heartbeat">
- <entry>qpid.heartbeat</entry>
- <entry>int</entry>
- <entry><para>Defaults to the heartbeat value suggested by the Broker, if
- any.</para></entry>
- <entry>Frequency of heartbeat messages (in seconds). A value of 0 disables
- heartbeating. <para>Two consecutive missed heartbeats will result in the
- connection timing out.</para><para>This can also be set per connection
- using the <link
- linkend="JMS-Client-0-8-Connection-URL-BrokerOptions-Heartbeat"
- >Connection URL</link> options.</para><para>For compatibility with
- old client configuration, the synonym
- <varname>amqj.heartbeat.delay</varname> is supported.</para></entry>
- </row>
- <row>
- <entry>ignore_setclientID</entry>
- <entry>boolean</entry>
- <entry>false</entry>
- <entry>If a client ID is specified in the connection URL it's used or else an ID
- is generated. If an ID is specified after it's been set Qpid will throw an
- exception. <para>Setting this property to 'true' will disable that check and
- allow you to set a client ID of your choice later on.</para></entry>
- </row>
- <row>
- <entry>qpid.connection_ssl_verify_hostname</entry>
- <entry>boolean</entry>
- <entry>true</entry>
- <entry>This property is used to turn on/off broker host name verification on SSL negotiation
- if SSL transport is used. It is set to 'true' by default.
- <para>Setting this property to 'false' will disable that check and
- allow you to ignore host name errors.</para></entry>
- </row>
- <row id="JMS-Client-0-8-System-Properties-ConnectionCompressMessages">
- <entry>qpid.connection_compress_messages</entry>
- <entry>Boolean</entry>
- <entry>false</entry>
- <entry><para>Controls whether the client will compress messages before they they are sent.</para></entry>
- </row>
- <row id="JMS-Client-0-8-System-Properties-MessageCompressionThresholdSize">
- <entry>qpid.message_compression_threshold_size</entry>
- <entry>Integer</entry>
- <entry>102400</entry>
- <entry><para>The payload size beyond which the client will start to compress message payloads.</para></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
-
- <table pgwide="1">
- <title>Config Options For Session Behaviour</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Property Name</entry>
- <entry>Type</entry>
- <entry>Default Value</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row id="JMS-Client-0-8-System-Properties-DestSyntax">
- <entry>qpid.dest_syntax</entry>
- <entry>String</entry>
- <entry>ADDR</entry>
- <entry><para>Addressing syntax: ADDR (Address format) or BURL (Binding URL)</para></entry>
- </row>
- <row id="JMS-Client-0-8-System-Properties-Maxprefetch">
- <entry>max_prefetch</entry>
- <entry>int</entry>
- <entry>500</entry>
- <entry><para>Maximum number of pre-fetched messages per Session. This can also
- be defaulted for sessions created on a particular connection using the
- <link
- linkend="JMS-Client-0-8-Connection-URL-ConnectionOptions-Maxprefetch"
- >Connection URL</link> options.</para></entry>
- </row>
- <!-- 0-10
- <row>
- <entry>qpid.session.command_limit</entry>
- <entry>int</entry>
- <entry>65536</entry>
- <entry>Limits the # of unacked commands</entry>
- </row>
--->
- <!-- 0-10
- <row>
- <entry>qpid.session.byte_limit</entry>
- <entry>int</entry>
- <entry>1048576</entry>
- <entry>Limits the # of unacked commands in terms of bytes</entry>
- </row>
- -->
- <row>
- <entry>qpid.use_legacy_map_message</entry>
- <entry>boolean</entry>
- <entry>false</entry>
- <entry><para>If set will use the old map message encoding. By default the Map
- messages are encoded using the 0-10 map encoding.</para><para>This can
- also be set per connection using the <link
- linkend="JMS-Client-0-8-Connection-URL-ConnectionOptions-UseLegacyMap"
- >Connection URL</link> options.</para></entry>
- </row>
-
- <row>
- <entry>qpid.jms.daemon.dispatcher</entry>
- <entry>boolean</entry>
- <entry>false</entry>
- <entry><para>Controls whether the Session dispatcher thread is a daemon thread
- or not. If this system property is set to true then the Session
- dispatcher threads will be created as daemon threads. This setting is
- introduced in version 0.16.</para></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <table pgwide="1">
- <title>Config Options For Consumer Behaviour</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Property Name</entry>
- <entry>Type</entry>
- <entry>Default Value</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row id="JMS-Client-0-8-System-Properties-DeclareExchanges">
- <entry>qpid.declare_exchanges</entry>
- <entry>Boolean</entry>
- <entry>true</entry>
- <entry><para>If true, creating a consumer will also declare the exchange on the
- Broker (specified within the Binding URL associated with the
- Destination), creating it if is does not already exist.
- </para></entry>
- </row>
- <row id="JMS-Client-0-8-System-Properties-DeclareQueues">
- <entry>qpid.declare_queues</entry>
- <entry>Boolean</entry>
- <entry>true</entry>
- <entry><para>If true, creating a consumer will also declare the queue on the
- Broker (specified within the Binding URL associated with the
- Destination), creating it if is does not already
- exist.</para></entry>
- </row>
- <row id="JMS-Client-0-8-System-Properties-BindQueues">
- <entry>qpid.bind_queues</entry>
- <entry>Boolean</entry>
- <entry>true</entry>
- <entry><para>If true, creating a consumer will also bind the queue to the
- to the exchange using the routing key as a binding key. The
- exchange name, queue name and routing key are taken from
- the Binding URL associated with the Destination.</para></entry>
- </row>
- <row id="JMS-Client-0-8-System-Properties-RejectBehaviour">
- <entry>qpid.reject.behaviour</entry>
- <entry>String</entry>
- <entry>NORMAL</entry>
- <entry><para>Used with the maximum delivery count feature. See <xref
- linkend="JMS-Client-0-8-Client-Understanding-MessageConsumer-MaximumDeliveryCount"
- /> for details.</para></entry>
- </row>
-
- <!-- 0-10
- <row>
- <entry>qpid.session.max_ack_delay</entry>
- <entry>long</entry>
- <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>
- <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>
- </entry>
- </row>
--->
- <!-- 0-10
- <row>
- <entry>sync_ack</entry>
- <entry>boolean</entry>
- <entry>false</entry>
- <entry><para>If set, each message will be acknowledged synchronously. When using
- AUTO_ACK mode, you need to set this to "true", in order to get the
- correct behaviour as described by the JMS spec.</para><para>This is set
- to false by default for performance reasons, therefore by default
- AUTO_ACK behaves similar to DUPS_OK.</para><para>This can also be set
- per connection using the <link linkend="section-jms-connection-url"
- >Connection URL</link> options.</para></entry>
- </row>
- -->
- </tbody>
- </tgroup>
- </table>
-
- <table pgwide="1">
- <title>Config Options For Producer Behaviour</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Property Name</entry>
- <entry>Type</entry>
- <entry>Default Value</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row id="JMS-Client-0-8-System-Properties-DefaultMandatory">
- <entry>qpid.default_mandatory</entry>
- <entry>Boolean</entry>
- <entry>True</entry>
- <entry><para>If true, messages sent to Queue destinations for which cannot be
- routed to at least one queue on the Broker, will be returned to the
- application. See <xref
- linkend="JMS-Client-0-8-Client-Understanding-MessageProducer-MandatoryMessage"
- /> for more details.</para></entry>
- </row>
- <row id="JMS-Client-0-8-System-Properties-DefaultMandatoryTopic">
- <entry>qpid.default_mandatory_topic</entry>
- <entry>Boolean</entry>
- <entry>False</entry>
- <entry><para>If true, messages sent to Topic destinations for which cannot be
- routed to at least one queue on the Broker, will be returned to the
- application. See <xref
- linkend="JMS-Client-0-8-Client-Understanding-MessageProducer-MandatoryMessage"
- /> for more details..</para></entry>
- </row>
- <row id="JMS-Client-0-8-System-Properties-DefaultImmediate">
- <entry>qpid.default_immediate</entry>
- <entry>Boolean</entry>
- <entry>False</entry>
- <entry><para>If true, the message will be returned to the application unless the
- Broker is able to route the message to at least one queue with a
- consumer attached. See <xref
- linkend="JMS-Client-0-8-Client-Understanding-MessageProducer-ImmediateMessage"
- /> for more details.</para></entry>
- </row>
- <row id="JMS-Client-0-8-System-Properties-FlowControlWaitFailure">
- <entry>qpid.flow_control_wait_failure</entry>
- <entry>Long</entry>
- <entry>60000</entry>
- <entry><para>Used with <xref
- linkend="JMS-Client-0-8-Client-Understanding-MessageProducer-FlowControl"
- />. The amount of time (in milliseconds) to wait before timing
- out.</para></entry>
- </row>
- <row id="JMS-Client-0-8-System-Properties-FlowControlWaitNotifyPeriod">
- <entry>qpid.flow_control_wait_notify_period</entry>
- <entry>Long</entry>
- <entry>5000</entry>
- <entry><para>Used with <xref
- linkend="JMS-Client-0-8-Client-Understanding-MessageProducer-FlowControl"
- />. The frequency at which the log message informing that the producer
- is flow controlled .</para></entry>
- </row>
-
- <row id="JMS-Client-0-8-System-Properties-SyncPublish">
- <entry>sync_publish</entry>
- <entry>string</entry>
- <entry>"" (disabled)</entry>
- <entry>
- <para>If 'all' is set then messages will be sent synchronously.</para>
- <para>This can also be set per connection using the
- <link linkend="JMS-Client-0-8-Connection-URL-ConnectionOptions-SyncPublish">
- Connection URL
- </link>
- options.
- </para>
- </entry>
- </row>
-
- </tbody>
- </tgroup>
- </table>
-
- <table pgwide="1">
- <title>Config Options For Threading</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Property Name</entry>
- <entry>Type</entry>
- <entry>Default Value</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>qpid.thread_factory</entry>
- <entry>string</entry>
- <entry>org.apache.qpid.thread.DefaultThreadFactory</entry>
- <entry><para>Specifies the thread factory to use.</para><para>If using a real
- time JVM, you need to set the above property to
- <varname>org.apache.qpid.thread.RealtimeThreadFactory</varname>.</para></entry>
- </row>
-
- <row>
- <entry>qpid.rt_thread_priority</entry>
- <entry>int</entry>
- <entry>20</entry>
- <entry><para>Specifies the priority (1-99) for Real time threads created by the
- real time thread factory.</para></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <table pgwide="1">
- <title>Config Options For I/O</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Property Name</entry>
- <entry>Type</entry>
- <entry>Default Value</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>qpid.transport</entry>
- <entry>string</entry>
- <entry>org.apache.qpid.transport.network.io.IoNetworkTransport</entry>
- <entry><para>The transport implementation to be used.</para><para>A user could
- specify an alternative transport mechanism that implements the interface
- <varname>org.apache.qpid.transport.network.OutgoingNetworkTransport</varname>.</para></entry>
- </row>
- <row id="JMS-Client-0-8-System-Properties-SyncOpTimeout">
- <entry>qpid.sync_op_timeout</entry>
- <entry>long</entry>
- <entry>60000</entry>
- <entry><para>The length of time (in milliseconds) to wait for a synchronous
- operation to complete.</para><para>For compatibility with older clients,
- the synonym <varname>amqj.default_syncwrite_timeout</varname> is
- supported.</para></entry>
- </row>
- <row>
- <entry>qpid.tcp_nodelay</entry>
- <entry>boolean</entry>
- <entry>true</entry>
- <entry>
- <para>Sets the TCP_NODELAY property of the underlying socket. The default
- was changed to true as of Qpid 0.14.</para>
- <para>This can also be set per connection using the Connection URL broker
- option<link
- linkend="JMS-Client-0-8-Connection-URL-BrokerOptions-TcpNoDelay"
- ><literal>tcp_nodelay</literal>.</link> options.</para>
- <para>For compatibility with older clients, the synonym
- <varname>amqj.tcp_nodelay</varname> is supported.</para>
- </entry>
- </row>
- <row>
- <entry>qpid.send_buffer_size</entry>
- <entry>integer</entry>
- <entry>65535</entry>
- <entry>
- <para>Sets the SO_SNDBUF property of the underlying socket. Added in Qpid
- 0.16.</para>
- <para>For compatibility with older clients, the synonym
- <varname>amqj.sendBufferSize</varname> is supported.</para>
- </entry>
- </row>
- <row>
- <entry>qpid.receive_buffer_size</entry>
- <entry>integer</entry>
- <entry>65535</entry>
- <entry>
- <para>Sets the SO_RCVBUF property of the underlying socket. Added in Qpid
- 0.16.</para>
- <para>For compatibility with older clients, the synonym
- <varname>amqj.receiveBufferSize</varname> is supported.</para>
- </entry>
- </row>
- <row>
- <entry>qpid.failover_method_timeout</entry>
- <entry>long</entry>
- <entry>60000</entry>
- <entry>
- <para>During failover, this is the timeout for each attempt to try to
- re-establish the connection. If a reconnection attempt exceeds the
- timeout, the entire failover process is aborted.</para>
- <para>It is only applicable for AMQP 0-8/0-9/0-9-1 clients.</para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <!-- These are all 0-10 related
- <table pgwide="1">
- <title>Config Options For Security</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Property Name</entry>
- <entry>Type</entry>
- <entry>Default Value</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
-
- <row>
- <entry>qpid.sasl_mechs</entry>
- <entry>string</entry>
- <entry>PLAIN</entry>
- <entry><para>The SASL mechanism to be used. More than one could be specified as
- a comma separated list.</para><para>We currently support the following
- mechanisms {PLAIN | GSSAPI | EXTERNAL}.</para><para>This can also be set
- per connection using the <link linkend="JMS-Client-0-8-Connection-URL"
- >Connection URL</link> options.</para></entry>
- </row>
-
- <row>
- <entry>qpid.sasl_protocol</entry>
- <entry>string</entry>
- <entry>AMQP</entry>
- <entry><para>When using GSSAPI as the SASL mechanism,
- <varname>sasl_protocol</varname> must be set to the principal for
- the qpidd broker, e.g. <varname>qpidd</varname>.</para><para>This can
- also be set per connection using the <link
- linkend="JMS-Client-0-8-Connection-URL">Connection URL</link>
- options.</para></entry>
- </row>
- <row>
- <entry>qpid.sasl_server_name</entry>
- <entry>string</entry>
- <entry>localhost</entry>
- <entry><para>When using GSSAPI as the SASL mechanism,
- <varname>sasl_server</varname> must be set to the host for the SASL
- server, e.g. <varname>example.com</varname>.</para><para>This can also
- be set per connection using the <link
- linkend="JMS-Client-0-8-Connection-URL">Connection URL</link>
- options.</para></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <table pgwide="1">
- <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="4">
- <thead>
- <row>
- <entry>Property Name</entry>
- <entry>Type</entry>
- <entry>Default Value</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>javax.security.auth.useSubjectCredsOnly</entry>
- <entry>boolean</entry>
- <entry>true</entry>
- <entry><para>If set to 'false', forces the SASL GASSPI client to obtain the
- kerberos credentials explicitly instead of obtaining from the "subject"
- that owns the current thread.</para></entry>
- </row>
-
- <row>
- <entry>java.security.auth.login.config</entry>
- <entry>string</entry>
- <entry/>
- <entry><para>Specifies the jass configuration
- file.</para><para><varname>Ex-Djava.security.auth.login.config=myjas.conf</varname>
- </para><para>Here is the sample myjas.conf JASS configuration file: <programlisting><![CDATA[
-
- com.sun.security.jgss.initiate {
- com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true;
- };
-
- ]]></programlisting></para></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- -->
- <table pgwide="1">
- <title>Config Options For Security - Using SSL for securing connections or using EXTERNAL as
- the SASL mechanism.</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Property Name</entry>
- <entry>Type</entry>
- <entry>Default Value</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>qpid.ssl_timeout</entry>
- <entry>long</entry>
- <entry>60000</entry>
- <entry><para>Timeout value used by the Java SSL engine when waiting on
- operations.</para></entry>
- </row>
-
- <row>
- <entry>qpid.ssl.KeyManagerFactory.algorithm</entry>
- <entry>string</entry>
- <entry>-</entry>
- <entry>
- <para>The key manager factory algorithm name. If not set, defaults to the
- value returned from the Java runtime call
- <literal>KeyManagerFactory.getDefaultAlgorithm()</literal></para>
- <para>For compatibility with older clients, the synonym
- <varname>qpid.ssl.keyStoreCertType</varname> is supported.</para>
- </entry>
- </row>
-
- <row>
- <entry>qpid.ssl.TrustManagerFactory.algorithm</entry>
- <entry>string</entry>
- <entry>-</entry>
- <entry>
- <para>The trust manager factory algorithm name. If not set, defaults to the
- value returned from the Java runtime call
- <literal>TrustManagerFactory.getDefaultAlgorithm()</literal></para>
- <para>For compatibility with older clients, the synonym
- <varname>qpid.ssl.trustStoreCertType</varname> is supported.</para>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <table pgwide="1">
- <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="4">
- <thead>
- <row>
- <entry>Property Name</entry>
- <entry>Type</entry>
- <entry>Default Value</entry>
- <entry>Description</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>javax.net.ssl.keyStore</entry>
- <entry>string</entry>
- <entry>jvm default</entry>
- <entry><para>Specifies the key store path.</para><para>This can also be set per
- connection using the <link linkend="JMS-Client-0-8-Connection-URL"
- >Connection URL</link> options.</para></entry>
- </row>
-
- <row>
- <entry>javax.net.ssl.keyStorePassword</entry>
- <entry>string</entry>
- <entry>jvm default</entry>
- <entry><para>Specifies the key store password.</para><para>This can also be set
- per connection using the <link linkend="JMS-Client-0-8-Connection-URL"
- >Connection URL</link> options.</para></entry>
- </row>
-
- <row>
- <entry>javax.net.ssl.trustStore</entry>
- <entry>string</entry>
- <entry>jvm default</entry>
- <entry><para>Specifies the trust store path.</para><para>This can also be set
- per connection using the <link linkend="JMS-Client-0-8-Connection-URL"
- >Connection URL</link> options.</para></entry>
- </row>
-
- <row>
- <entry>javax.net.ssl.trustStorePassword</entry>
- <entry>string</entry>
- <entry>jvm default</entry>
- <entry><para>Specifies the trust store password.</para><para>This can also be
- set per connection using the <link
- linkend="JMS-Client-0-8-Connection-URL">Connection URL</link>
- options.</para></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
-</chapter>
diff --git a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Understanding.xml b/qpid/doc/book/src/jms-client-0-8/JMS-Client-Understanding.xml
deleted file mode 100644
index 60af03476e..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/JMS-Client-Understanding.xml
+++ /dev/null
@@ -1,596 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
- "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
-[
-<!ENTITY % entities SYSTEM "commonEntities.xml">
-%entities;
-]>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<chapter id="JMS-Client-0-8-Client-Understanding">
- <title>Understanding the Qpid JMS client</title>
- <section id="JMS-Client-0-8-Client-Understanding-Overview">
- <title>Overview</title>
- <para>The Qpid JMS client provides a JMS 1.1 compliant implementation. As such, the primary
- source of documentation is the <ulink url="&oracleJmsSpec;">JMS specification</ulink> and the
- <ulink url="&oracleJeeDocUrl;/javax/jms/package-summary.html">JMS javadocs</ulink>. This
- documentation assumes the reader has familiarity with these resources.</para>
- <para>The remainder of this section describes how the Qpid JMS client behaves and the effect(s)
- making JMS method calls will have on the Broker. </para>
- <para>There areas where the Qpid JMS client provides features beyond those required for JMS
- compliance. These are described in the sections that follow.</para>
- <para>These sections are also used to bring out differences that may surprise those moving from
- JMS implementations provided by other vendors.</para>
- <figure>
- <title>Architecture of a typical JMS application</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/QpidJmsOverview.png" format="PNG" scalefit="1"/>
- </imageobject>
- </mediaobject>
- </figure>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-ConnectionFactory">
- <title>ConnectionFactory</title>
- <para>A <ulink url="&oracleJeeDocUrl;javax/jms/ConnectionFactory.html">ConnectionFactory</ulink>
- allows an application to create a <ulink url="&oracleJeeDocUrl;javax/jms/Connection.html"
- >Connection</ulink>.</para>
- <para>The application obtains the ConnectionFactory from an <ulink
- url="&oracleJdkDocUrl;javax/naming/InitialContext.html">InitialContext</ulink>. The
- InitialContext is itself obtained from an InitialContextFactory. </para>
- <para>The Qpid JMS client provides a single implementation of the InitialContextFactory in class
- <literal>org.apache.qpid.jndi.PropertiesFileInitialContextFactory</literal>. This
- implementation is backed by a <ulink url="&oracleJdkDocUrl;java/util/Properties.html"
- >Properties</ulink> object which can of course be loaded from an external properties file,
- or created programatically.</para>
- <para>The examples in the previous chapter illustrated the Java code required to <link
- linkend="JMS-Client-0-8-Examples-PTP">create the InitialContext</link> and an <link
- linkend="JMS-Client-0-8-Examples-PTP-PropertiesFile">example properties file</link>.</para>
- <para>Note that the Qpid Broker does not present a JNDI interface to the application.</para>
- <figure>
- <title>JNDI overview</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="images/JndiOverview.png" format="PNG" scalefit="1"/>
- </imageobject>
- </mediaobject>
- </figure>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-Connection">
- <title>Connection</title>
- <para>A Connection represents an open communication channel between application and
- Broker.</para>
- <para>Connections are created from the ConnectionFactory <footnote>
- <para>Constructors of the AMQConnection class must not be used.</para>
- </footnote>.</para>
- <para>Each connection utilises a single TCP/IP connection between the process of the application
- and the process of the Broker. The act of establishing a connection is therefore a relatively
- expensive operation. It is recommended that the same connection is used for a series of
- message interactions. Patterns utilising a connection per message should not be used. </para>
- <para>The underlying TCP/IP connection remains open for the lifetime of the JMS connection. It
- is closed when the application calls <ulink
- url="&oracleJeeDocUrl;javax/jms/Connection.html#close()">Connection#close()</ulink>, but it
- can also be closed if the connection is closed from the Broker side (via a Management
- operation or broker shutdown or running into conditions which AMQP specifications treats as
- errors and mandates closing the connection). The JMS connection will also be closed if the
- underlying TCP/IP connection is broken.</para>
- <para>Qpid connections have failover and heartbeating capabilities. They support SSL and
- client-auth. These are described in the sub-sections that follow.</para>
- <section id="JMS-Client-0-8-Client-Understanding-Connection-Failover">
- <title>Failover</title>
- <para>Qpid connections support a failover feature. This is the ability to automatically
- re-establish a failed connection, either to the same Broker, or the next Broker in the
- broker list.</para>
- <para>This failover process is done in a manner that is mostly transparent to the application.
- After a successful failover, any existing Connection, Session, MessageConsumer and
- MessageProducer objects held by the application remain valid.</para>
- <para>If a failover occurs during the scope of a JMS Transaction, any work performed by that
- transaction is lost. The application is made aware of this loss by way of the <ulink
- url="&oracleJeeDocUrl;javax/jms/TransactionRolledBackException.html"
- >TransactionRolledBackException</ulink> from the <ulink
- url="&oracleJeeDocUrl;javax/jms/Session.html#commit">Session#commit()</ulink> call.
- Applications utilising failover must be prepared to catch this exception and respond by
- either repeating the work of the transaction, or by propagating a rollback to the
- originating system.</para>
- <para>If, after all retries are exhausted, failover has failed to reconnect the application,
- the Connection's <ulink url="&oracleJeeDocUrl;javax/jms/ExceptionListener.html"
- >ExceptionListener</ulink> will receive a JMSException with a linked exception of <ulink
- url="JMS-Client-0-8-Appendix-Exceptions-AMQDisconnectedException"
- >AMQDisconnectedException</ulink>. Any further use of the JMS objects (Connection, Session
- etc), will results in a <ulink url="&oracleJeeDocUrl;javax/jms/IllegalStateException.html"
- >IllegalStateException</ulink>.</para>
- <para>Configure failover using the Connection URL. Here's an example Connection URL utilising
- failover between two brokers. Note the use of the broker options <link
- linkend="JMS-Client-0-8-Connection-URL-BrokerOptions-Retries"
- ><literal>retries</literal></link> and <link
- linkend="JMS-Client-0-8-Connection-URL-BrokerOptions-ConnectDelay"
- ><literal>connectdelay</literal></link> to control the number of connection attempts to
- each individual broker, and the delay between each connection attempt. Also note the use of
- the <emphasis>failover option</emphasis>
- <literal>cyclecount</literal> to control the number of times the failover mechanism will
- traverse the brokerlist.</para>
- <example>
- <title>Connection URL configured for failover</title>
- <screen><![CDATA[
-amqp://username:password@clientid/test
- ?brokerlist='tcp://localhost:15672?retries='10'&connectdelay='1000';tcp://localhost:25672?retries='10'&connectdelay='1000''
- &failover='roundrobin?cyclecount='20'']]>
- </screen>
- </example>
- <para>For full details see <xref linkend="JMS-Client-0-8-Connection-URL"/></para>
- <note>
- <para>Note, that a single broker failover is enabled by default. If the failover behaviour
- is not desired it can be switched off by setting a failover option to
- <literal>nofailover</literal> as in the example below <example>
- <title>Connection URL configured with nofailover</title>
- <screen><![CDATA[
-amqp://username:password@clientid/test
- ?brokerlist='tcp://localhost:15672?failover='nofailover']]>
- </screen>
- </example>
- </para>
- </note>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-Connection-Heartbeating">
- <title>Heartbeating</title>
- <para>Qpid connections support heartbeating. When enabled, the Qpid JMS client and Broker
- exchange a heartbeat during periods of inactivity. This allows both peers to discover if the
- TCP/IP connection becomes inoperable in a timely manner.</para>
- <para>This feature is sometimes useful in applications that must traverse firewalls as the
- heartbeat prevents connections from being closed during periods when there is no application
- traffic.</para>
- <para>It is also allows the both the JMS client and the Broker to confirm that the other is
- <emphasis>minimally</emphasis> responsive. (It does nothing however to determine the
- health of the higher level tiers of application, for this reason, applications may implement
- an application level heartbeat either in addition to, or instead of the heartbeat.</para>
- <para>If the client ever fails to receive two consecutive heartbeats, the Connection will be
- automatically closed and the Connection's <ulink
- url="&oracleJeeDocUrl;javax/jms/ExceptionListener.html">ExceptionListener</ulink> will
- receive a JMSException with a linked exception of AMQDisconnectedException. Any further use
- of the JMS objects (Connection, Session etc), will results in a <ulink
- url="&oracleJeeDocUrl;javax/jms/IllegalStateException.html"
- >IllegalStateException</ulink>.</para>
- <para>To enable heartbeating either use a Connection URL including the broker option <link
- linkend="JMS-Client-0-8-Connection-URL-BrokerOptions-Heartbeat"
- ><literal>heartbeat</literal></link>, or use the system property <link
- linkend="JMS-Client-0-8-System-Properties-Heartbeat"
- ><literal>qpid.heartbeat</literal></link>. </para>
- <example>
- <title>Connection URL configured for heartbeating</title>
- <screen><![CDATA[
-amqp://guest:guest@clientid/?brokerlist='localhost:5672?heartbeat='5'']]>
- </screen>
- </example>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-Connection-SSL">
- <title>SSL</title>
- <para>The Qpid JMS client supports connections encrypted using Secure Socket Layer (SSL) and
- SSL-Client Authentication. SSL is configured using Connection URL. To use SSL, SSL must be
- be configured on the Broker.</para>
- <para>Some example Connection URLs using SSL follow:</para>
- <itemizedlist>
- <listitem>
- <para>Simple SSL when the Broker is secured by a certificate that is signed by a CA which
- is trusted by the JVM.</para>
- <example>
- <title>Connection URL configured for SSL - CA trusted by JVM</title>
- <screen><![CDATA[
-amqp://guest:guest@clientid/?brokerlist='localhost:5671'&ssl='true']]>
- </screen>
- </example>
- </listitem>
- <listitem>
- <para>SSL when the Broker is secured by a certificate that is signed by a CA which is NOT
- trusted by the JVM (such as when a organisation is using a private CA, or self-signed
- certificates are in use). For this case, we use <link
- linkend="JMS-Client-0-8-Connection-URL-BrokerOptions-TrustStore"
- ><literal>trust_store</literal></link> and <link
- linkend="JMS-Client-0-8-Connection-URL-BrokerOptions-TrustStorePassword"
- ><literal>trust_store_password</literal></link> to specify a path a truststore file
- (containing the certificate of the private-CA) and the truststore password.</para>
- <example>
- <title>Connection URL configured for SSL - CA not trusted by JVM</title>
- <screen><![CDATA[
-amqp://guest:guest@clientid/?brokerlist='localhost:5671?trust_store='/path/to/acme_org_ca.ts'&trust_store_password='secret''&ssl='true']]>
- </screen>
- </example>
- </listitem>
- <listitem>
- <para>SSL with SSL client-auth. For this case, we use <link
- linkend="JMS-Client-0-8-Connection-URL-BrokerOptions-KeyStore"
- ><literal>key_store</literal></link> and <link
- linkend="JMS-Client-0-8-Connection-URL-BrokerOptions-KeyStorePassword"
- ><literal>key_store_password</literal></link> to specify a path a keystore file
- (containing the certificate of the client) and the keystore password.</para>
- <example>
- <title>Connection URL configured for SSL - SSL client-auth</title>
- <screen><![CDATA[
-amqp://guest:guest@clientid/?brokerlist='localhost:5671?key_store='/path/to/app1_client_cert.ks'&key_store_password='secret''&ssl='true']]>
- </screen>
- </example>
- </listitem>
- </itemizedlist>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-Connection-MessageCompression">
- <title>Message Compression</title>
- <para>The client has the ability to transparently compress message payloads on outgoing
- messages and decompress them on incoming messages. In some environments and with some
- payloads this feature might offer performance improvements by reducing the number of bytes
- transmitted over the connection.</para>
- <para>In order to make use of message compression, the Broker must enable the feature too,
- otherwise the compression options will be ignored.</para>
- <para> To enable message compression on the client use the connection url property <link
- linkend="JMS-Client-0-8-Connection-URL-ConnectionOptions-CompressMessages"
- ><literal>compressMessages</literal></link> (or JVM wide using the system property <link
- linkend="JMS-Client-0-8-System-Properties-ConnectionCompressMessages"
- ><literal>qpid.connection_compress_messages</literal></link>)</para>
- <para>It is also possible to control the threshold at which the client will begin to compress
- message payloads. See connection url property <link
- linkend="JMS-Client-0-8-Connection-URL-ConnectionOptions-MessageCompressionThresholdSize"
- ><literal>messageCompressionThresholdSize</literal></link> (or JVM wide using the system
- property <link linkend="JMS-Client-0-8-System-Properties-MessageCompressionThresholdSize"
- ><literal>qpid.message_compression_threshold_size</literal></link>)</para>
- <note>
- <para>The Broker, where necessary, takes care of compressing/decompressing messages of the
- fly so that clients using message compression can exchange messages with clients not
- supporting message compression transparently, without application intervention.</para>
- </note>
- </section>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-Session">
- <title>Session</title>
- <para>A Session object is a single-threaded context for producing and consuming messages.</para>
- <para>Session objects are created from the Connection. Whilst Session objects are relatively
- lightweight, patterns utilising a single Session per message are not recommended.</para>
- <para>The number of sessions open per connection at any one time is limited. This value is
- negotiated when the connection is made. It defaults to 256.</para>
- <para>Qpid JMS Sessions have the ability to prefetch messages to improve consumer performance.
- This feature is described next.</para>
- <section id="JMS-Client-0-8-Client-Understanding-Session-Prefecth">
- <title>Prefetch</title>
- <para>Prefetch specifies how many messages the client will optimistically cache for delivery
- to a consumer. This is a useful parameter to tune that can improve the throughput of an
- application. The prefetch buffer is scoped per <emphasis>Session</emphasis>.</para>
- <para>The size of the prefetch buffer can be tuned per Connection using the connection url
- option <link linkend="JMS-Client-0-8-Connection-URL-ConnectionOptions-Maxprefetch"
- ><literal>maxprefetch</literal></link> (or JVM wide using the system property <link
- linkend="JMS-Client-0-8-System-Properties-Maxprefetch"
- ><literal>max_prefetch</literal></link>). By default, prefetch defaults to 500.</para>
- <para>There are situations when you may wish to consider reducing the size of prefetch:</para>
- <para>
- <orderedlist>
- <listitem>
- <para>When using a <ulink url="http://www.eaipatterns.com/CompetingConsumers.html"
- >Competing Consumers</ulink> pattern, prefetch can give the appearance of unequal
- division of work. This will be apparent on startup when the queue has messages. The
- first consumer started will cache prefetch size number of messages, possibly leaving
- the other consumers with no initial work.</para>
- </listitem>
- <listitem>
- <para>When using special queue types (such as LVQs, Sorted Queue and Priority Queues).
- For these queue types the special delivery rules apply whilst the message resides on
- the Broker. As soon as the message is sent to the client it delivery order is then
- fixed. For example, if using a priority queue, and a prefetch of 100, and 100 messages
- arrive with priority 2, the broker will send these to the client. If then a new
- message arrives with priority 1, the broker cannot leap frog messages of the lower
- priority. The priority 1 message will be delivered at the front of the next
- batch.</para>
- </listitem>
- <listitem>
- <para>When message size is large and you do not wish the memory footprint of the
- application to grow (or suffer an OutOfMemoryError).</para>
- </listitem>
- </orderedlist>
- </para>
- <para>Finally, if using multiple MessageConsumers on a single Session, keep in mind that
- unless you keep polling <emphasis>all</emphasis> consumers, it is possible for some traffic
- patterns to result in consumer starvation and an application level deadlock. For example, if
- prefetch is 100, and 100 hundred messages arrive suitable for consumer A, those messages
- will be prefetched by the session, entirely filling the prefetch buffer. Now if the
- application performs a blocking <ulink
- url="&oracleJeeDocUrl;javax/jms/MessageConsumer.html#receive()"
- >MessageConsumer#receive()</ulink> for Consumer B on the same Session, the application
- will hang indefinitely as even if messages suitable for B arrive at the Broker. Those
- messages can never be sent to the Session as no space is available in prefetch. </para>
- <note>
- <para>Please note, when the acknowledgement mode
- <emphasis>Session#SESSION_TRANSACTED</emphasis> or
- <emphasis>Session#CLIENT_ACKNOWLEDGE</emphasis> is set on a consuming session, the
- prefetched messages are released from the prefetch buffer on transaction commit/rollback
- (in case of acknowledgement mode <emphasis>Session#SESSION_TRANSACTED</emphasis> ) or
- acknowledgement of the messages receipt (in case of acknowledgement mode
- <emphasis>Session#CLIENT_ACKNOWLEDGE</emphasis> ). If the consuming application does not
- commit/rollback the receiving transaction (for example, due to mistakes in application
- exception handling logic), the prefetched messages continue to remain in the prefetch
- buffer preventing the delivery of the following messages. As result, the application might
- stop the receiving of the messages until the transaction is committed/rolled back (for
- <emphasis>Session#SESSION_TRANSACTED</emphasis> ) or received messages are acknowledged
- (for <emphasis>Session#CLIENT_ACKNOWLEDGE</emphasis>).</para>
- </note>
- <para>
- Settings maxprefetch to 0 ( either globally via JVM system property
- <link linkend="JMS-Client-0-8-System-Properties-Maxprefetch" ><literal>max_prefetch</literal></link>
- or on a connection level as a connection option
- <link linkend="JMS-Client-0-8-Connection-URL-ConnectionOptions-Maxprefetch"><literal>maxprefetch</literal></link> )
- switches off the pre-fetching functionality. With maxprefetch=0 messages are fetched one by one without caching on the client.
- </para>
- <note>
- <para> Setting maxprefetch to 0 is recommended in Spring-JMS based applications whenever
- <emphasis>DefaultMassgeListenerContainer</emphasis> is configured with a
- <emphasis>CachingConnectionFactory</emphasis> that has <emphasis>cacheLevel</emphasis>
- set to either <emphasis>CACHE_CONSUMER</emphasis> or <emphasis>CACHE_SESSION</emphasis>.
- In these configurations the Qpid JMS <emphasis>Session</emphasis> objects remain open in
- Spring's dynamically scaled pools. If maxprefetch is not 0, any prefetched messages held
- by the <emphasis>Session</emphasis> and any new ones subsequently sent to it (in the
- background until prefetch is reached) will be effectively by 'stuck' (unavailable to the
- application) until Spring decides to utilise the cached Session again. This can give the
- impression that message delivery has stopped even though messages remain of the queue.
- Setting maxprefetch to 0 prevents this problem from occurring.</para>
- <para> If using maxprefetch &gt; 0 <emphasis>SingleConnectionFactory</emphasis> must be
- used. SingleConnectionFactory does not have the same session/consumer caching behaviour so
- does not exhibit the same problem. </para>
- </note>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-Session-TemporaryQueues">
- <title>TemporaryQueues</title>
- <para>Qpid implements JMS temporary queues as AMQP auto-delete queues. The life cycle of these
- queues deviates from the JMS specification.</para>
- <para>AMQP auto-delete queues are deleted either when the <emphasis>last</emphasis> Consumer
- closes, or the Connection is closed. If no Consumer is ever attached to the queue, the queue
- will remain until the Connection is closed.</para>
- <para>This deviation has no practical impact on the implementation of the <ulink
- url="http://www.eaipatterns.com/RequestReply.html">request/reply messaging pattern</ulink>
- utilising a per-request temporary reply queue. The reply to queue is deleted as the
- application closes the Consumer awaiting the response. </para>
- <para>Temporary queues are exposed to Management in the same way as normal queues. Temporary
- queue names take the form string <literal>TempQueue</literal> followed by a random
- UUID.</para>
- <para>Note that <ulink url="&oracleJeeDocUrl;javax/jms/TemporaryQueue.html#delete()"
- >TemporaryQueue#delete()</ulink> merely marks the queue as deleted on within the JMS
- client (and prevents further use of the queue from the application), however, the Queue will
- remain on the Broker until the Consumer (or Connection) is closed.</para>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-Session-CreateQueue">
- <title>CreateQueue</title>
- <para>In the Qpid JMS client, <ulink
- url="&oracleJeeDocUrl;javax/jms/Session.html#createQueue(java.lang.String)"
- >Session#createQueue()</ulink> accepts either a queue name, or a Binding URL. If only name
- is specified the destination will be resolved into binding URL:
- direct://amq.direct//&lt;queue name&gt;?routingkey=&apos;&lt;queue name&gt;&apos;&amp;durable=&apos;true&apos;. </para>
- <para>Calling Session#createQueue() has no effect on the Broker.</para>
- <para>Reiterating the advice from the JMS javadoc, it is suggested that this method is not
- generally used. Instead, application should lookup Destinations declared within JNDI.</para>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-Session-CreateTopic">
- <title>CreateTopic</title>
- <para>In the Qpid JMS client, <ulink
- url="&oracleJeeDocUrl;javax/jms/Session.html#createTopic(java.lang.String)"
- >Session#createTopic()</ulink> accepts either a topic name, or a Binding URL. If only name
- is specified the destination will be resolved into binding URL: topic://amq.topic//&lt;topic
- name&gt;?routingkey=&apos;&lt;topic name&gt;&apos;.</para>
- <para>Calling Session#createTopic() has no effect on the Broker.</para>
- <para>Reiterating the advice from the JMS javadoc, it is suggested that this method is not
- generally used. Instead, application should lookup Destinations declared within JNDI.</para>
- </section>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-MessageProducer">
- <title>MessageProducer</title>
- <para>A MessageProducer sends a message an <emphasis>Exchange</emphasis>. It is the Exchange
- (within the Broker) that routes the message to zero or more queue(s). Routing is performed
- according to rules expressed as <emphasis>bindings</emphasis> between the exchange and queues
- and a <emphasis>routing key</emphasis> included with each message.</para>
- <para>To understand how this mechanism is used to deliver messages to queues and topics, see
- <ulink url="&qpidJavaBrokerBook;Java-Broker-Concepts-Exchanges.html">Exchanges</ulink>
- within the Java Broker book.</para>
- <para>It is important to understand that when synchronous publish is not exlicitly enabled,
- <ulink url="&oracleJeeDocUrl;javax/jms/MessageProducer.html#send(javax.jms.Message)"
- >MessageProducer#send()</ulink> is <emphasis>asynchronous</emphasis> in nature. When #send()
- returns to the application, the application cannot be certain if the Broker has received the
- message. The Qpid JMS client may not have yet started to send the message, the message could
- residing in a TCP/IP buffer, or the messages could be in some intermediate buffer within the
- Broker. If the application requires certainty the message has been received by the Broker, a
- <ulink url="&oracleJeeDocUrl;javax/jms/Session.html#SESSION_TRANSACTED">transactional
- session</ulink>
- <emphasis>must</emphasis> be used, or synchronous publishing must be enabled using either the
- <link linkend="JMS-Client-0-8-System-Properties-SyncPublish">system property</link> or the
- <link linkend="JMS-Client-0-8-Connection-URL-ConnectionOptions-SyncPublish">connection URL
- option</link>.</para>
- <para>Qpid JMS MessageProducers have a number of features above that required by JMS. These are
- described in the sub-sections that follow.</para>
- <section id="JMS-Client-0-8-Client-Understanding-MessageProducer-MandatoryMessage">
- <title>Mandatory Messages</title>
- <para>With this feature, publishing a message with a routing key for which no binding exists
- on the exchange will result in the message being returned to the publisher's
- connection.</para>
- <para>The Message is returned to the application in an asynchronous fashion via the
- Connection's <ulink url="&oracleJeeDocUrl;javax/jms/ExceptionListener.html"
- >ExceptionListener</ulink>. When a message is returned, it will be invoked with a
- JMSException whose linked exception is an <ulink
- url="JMS-Client-0-8-Appendix-Exceptions-AMQNoRouteException">AMQNoRouteException</ulink>.
- The returned message is available to the application by calling
- AMQNoRouteException#getUndeliveredMessage(). The ExceptionListener will be invoked exactly
- once for each returned message.</para>
- <para>If synchronous publishing has been enabled, and a mandatory message is returned, the
- <ulink url="&oracleJeeDocUrl;javax/jms/MessageProducer.html#send(javax.jms.Message)"
- >MessageProducer#send()</ulink> method will throw a JMSException.
- </para>
- <para>The mandatory message feature is turned <emphasis>on</emphasis> by default for Queue
- destinations and <emphasis>off</emphasis> for Topic destinations. This can be overridden
- using system properties <link linkend="JMS-Client-0-8-System-Properties-DefaultMandatory"
- ><literal>qpid.default_mandatory</literal></link> and <link
- linkend="JMS-Client-0-8-System-Properties-DefaultMandatoryTopic"
- ><literal>qpid.default_mandatory_topic</literal></link> for Queues and Topics
- respectively.</para>
- <note>
- <para>If this the mandatory flag is not set, the Broker will treat <ulink
- url="&qpidJavaBrokerBook;Java-Broker-Concepts-Exchanges.html#Java-Broker-Concepts-Exchanges-UnroutableMessage"
- >the messages as unroutable</ulink>.</para>
- </note>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-MessageProducer-CloseWhenNoRoute">
- <title>Close When No Route</title>
- <para>With this feature, if a mandatory message is published with a routing key for which no
- binding exists on the exchange the Broker will close the connection. This client feature
- requires support for the corresponding feature by the Broker.</para>
- <para>To enable or disable from the client, use the Connection URL option <link
- linkend="JMS-Client-0-8-Connection-URL-ConnectionOptions-CloseWhenNoRoute"
- ><literal>closeWhenNoRoute</literal></link>.</para>
- <para>See <ulink url="&qpidJavaBrokerBook;Java-Broker-Close-Connection-When-No-Route.html">
- Closing client connections on unroutable mandatory messages</ulink> within the Java Broker
- book for full details of the functioning of this feature.</para>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-MessageProducer-ImmediateMessage">
- <title>Immediate Messages</title>
- <para>This feature is defined in <ulink url="&amqpSrc;">AMQP specifications</ulink>.</para>
- <para>When this feature is enabled, when publishing a message the Broker ensures that a
- Consumer is attached to queue. If there is no Consumer attached to the queue, the message is
- returned to the publisher's connection. The Message is returned to the application in an
- asynchronous fashion using the Connection's <ulink
- url="&oracleJeeDocUrl;javax/jms/ExceptionListener.html">ExceptionListener</ulink>.</para>
- <para>The ExceptionListener will be invoked with a JMSException whose linked exception is an
- <ulink url="JMS-Client-0-8-Appendix-Exceptions-AMQNoConsumersException"
- >AMQNoConsumersException</ulink>. The returned message is available to the application by
- calling AMQNoConsumersException#getUndeliveredMessage(). The ExceptionListener will be
- invoked exactly once for each returned message.</para>
- <para>If synchronous publishing has been enabled, and an immediate message is returned, the
- <ulink url="&oracleJeeDocUrl;javax/jms/MessageProducer.html#send(javax.jms.Message)"
- >MessageProducer#send()</ulink> method will throw a JMSException.
- </para>
- <para>The immediate message feature is turned <emphasis>off</emphasis> by default. It can be
- enabled with system property <link
- linkend="JMS-Client-0-8-System-Properties-DefaultImmediate"
- ><literal>qpid.default_immediate</literal></link>.</para>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-MessageProducer-FlowControl">
- <title>Flow Control</title>
- <para>With this feature, if a message is sent to a queue that is overflow, the producer's
- session is blocked until the queue becomes underfull, or a timeout expires. This client
- feature requires support for the corresponding feature by the Broker.</para>
- <para>To control the timeout use System property <link
- linkend="JMS-Client-0-8-System-Properties-FlowControlWaitFailure"
- ><literal>qpid.flow_control_wait_failure</literal></link>. To control the frequency with
- which warnings are logged whilst a Session is blocked, use System property <link
- linkend="JMS-Client-0-8-System-Properties-FlowControlWaitNotifyPeriod"
- ><literal>qpid.flow_control_wait_notify_period</literal></link></para>
- <para>See <ulink
- url="&qpidJavaBrokerBook;Java-Broker-Runtime-Disk-Space-Management.html#Qpid-Producer-Flow-Control"
- > Producer Flow Control</ulink> within the Java Broker book for full details of the
- functioning of this feature.</para>
- </section>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-MessageConsumer">
- <title>MessageConsumer</title>
- <para>A MessageConsumer receives messages from a Queue or Topic.</para>
- <para>MessageConsumer objects are created from the Session.</para>
- <para>Qpid JMS MessageConsumers have a number of features above that required by JMS. These are
- described in the sub-sections that follow.</para>
- <section id="JMS-Client-0-8-Client-Understanding-MessageConsumer-ConsumerSideEffect">
- <title>Consumers have Exchange/Queue Declaration and Binding Side Effect</title>
- <para>By default, calling <ulink
- url="&oracleJeeDocUrl;javax/jms/Session.html#createConsumer(javax.jms.Destination)"
- >Session#createConsumer()</ulink> will cause:</para>
- <orderedlist>
- <listitem>
- <para>If the exchange does not exist on the Broker, it will be created. The exchange is
- specified by the Binding URL associated with the Destination.</para>
- </listitem>
- <listitem>
- <para>If the queue does not exist on the Broker, it will be created. The queue is
- specified by the Binding URL associated with the Destination.</para>
- </listitem>
- <listitem>
- <para>If there is no binding between the exchange and queue, a binding will be created
- using the routingkey as a bindingkey. The exchange, queue and routing key are specified
- by the Binding URL associated with the Destination.</para>
- </listitem>
- </orderedlist>
- <para>The exchange declare, queue declare and bind side effects can be suppressed using system
- properties <link linkend="JMS-Client-0-8-System-Properties-DeclareExchanges"
- ><literal>qpid.declare_exchanges</literal></link>, <link
- linkend="JMS-Client-0-8-System-Properties-DeclareQueues"
- ><literal>qpid.declare_queues</literal></link> and <link
- linkend="JMS-Client-0-8-System-Properties-BindQueues"
- ><literal>qpid.bind_queues</literal></link>.</para>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-MessageConsumer-TopicSubscriptions">
- <title>Topic Subscriptions</title>
- <para>The Qpid JMS client implements each subscription to a Topic as separate queue on the
- Broker. From the perspective of the JMS application this implementational detail is
- irrelevant: the application never needs to directly address these queues. However, these
- details are important when considering Management and Operational concerns.</para>
- <para>Durable topic subscriptions use a <emphasis>durable</emphasis> and
- <emphasis>exclusive</emphasis> queue named as follows:</para>
- <programlisting>
- clientid: + subscriptionId
- </programlisting>
- <para>where <literal>subscriptionId</literal> is that passed to the <ulink
- url="&oracleJeeDocUrl;javax/jms/Session.html#createDurableSubscriber(javax.jms.Topic,%20java.lang.String)"
- >Session#createDurableSubscriber(javax.jms.Topic,java.lang.String)</ulink></para>
- <para>Calling <ulink
- url="&oracleJeeDocUrl;javax/jms/Session.html#unsubscribe(java.lang.String)"
- >Session#unsubscribe(java.lang.String)</ulink> deletes the underlying queue.</para>
- <para>Non-durable topic subscriptions use a <emphasis>non-durable</emphasis>,
- <emphasis>exclusive</emphasis> and <emphasis>auto-delete</emphasis> queue named as
- follows:</para>
- <programlisting>
- tmp + _ + ip + _ + port + _ + sequence
- </programlisting>
- <para>where <literal>ip</literal> is the ip address of the client with dots replaced by
- underscores, <literal>port</literal> is the ephemeral port number assigned to the client's
- connection, and <literal>sequence</literal> is a sequence number.</para>
- <para>Closing the consumer (or closing the connection) will delete the underlying
- queue.</para>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-MessageConsumer-MaximumDeliveryCount">
- <title>Maximum Delivery Count</title>
- <para>With this feature, the Broker keeps track of a number of times a message has been
- delivered to a consumer. If the count ever exceeds a threshold value, the Broker moves the
- message to a dead letter queue (DLQ). This is used to prevent poison messages preventing a
- system's operation. This client feature requires support for the corresponding feature by
- the Broker.</para>
- <para>When using this feature, the application must either set system property <link
- linkend="JMS-Client-0-8-System-Properties-RejectBehaviour">qpid.reject.behaviour</link> or
- the Binding URL option <link linkend="JMS-Client-0-8-Binding-URL-Options-RejectBehaviour"
- ><literal>rejectbehaviour</literal></link> to the value
- <literal>server</literal>.</para>
- <para>See <ulink
- url="&qpidJavaBrokerBook;Java-Broker-Runtime-Handling-Undeliverable-Messages.html#Java-Broker-Runtime-Handling-Undeliverable-Messages-Maximum-Delivery-Count"
- > Handling Undeliverable Messages</ulink> within the Java Broker book for full details of
- the functioning of this feature.</para>
- <note>
- <para>The optional JMS message header <literal>JMSXDeliveryCount</literal> is
- <emphasis>not</emphasis> supported.</para>
- </note>
- </section>
- </section>
- <section id="JMS-Client-0-8-Client-Understanding-Destinations">
- <title>Destinations</title>
- <para>A Destination is either a Queue or Topic. In the Qpid JMS client a Destination
- encapsulates a Binding URL. In simple terms, the Binding URL comprises of an exchange, queue
- and a routing key. Binding URLs are described fully by <xref
- linkend="JMS-Client-0-8-Binding-URL"/>. </para>
- <para>In many cases, applications do not need to deal directly with Binding URLs, instead they
- can refer to JMS administered objects declared in the JNDI properties file with the
- <literal>queue.</literal> and <literal>topic.</literal> prefix to create Queues and Topics
- objects respectively. </para>
- </section>
-</chapter>
diff --git a/qpid/doc/book/src/jms-client-0-8/Makefile b/qpid/doc/book/src/jms-client-0-8/Makefile
deleted file mode 100644
index ccb9d29f2f..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# 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
-# regarding copyright ownership. The ASF licenses this file
-# 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.
-#
-
-include ../Makefile.inc
diff --git a/qpid/doc/book/src/jms-client-0-8/commonEntities.xml b/qpid/doc/book/src/jms-client-0-8/commonEntities.xml
deleted file mode 100644
index 31f3bd414a..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/commonEntities.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-
-<!ENTITY qpidVersion "0.32-SNAPSHOT">
-<!ENTITY qpidDownloadUrlDesc "the Apache Qpid project web site">
-<!ENTITY qpidDownloadUrl "http://qpid.apache.org/download.html">
-
-<!ENTITY qpidMavenRepoDesc "Maven repositories">
-<!ENTITY qpidClientGroupId "org.apache.qpid">
-<!ENTITY qpidClientArtefactId "qpid-client">
-
-
-<!ENTITY qpidProgrammingBook "../../Programming-In-Apache-Qpid/html/">
-<!ENTITY qpidJavaBrokerBook "../../AMQP-Messaging-Broker-Java-Book/html/">
-<!ENTITY qpidSrc "http://svn.apache.org/viewvc/qpid/trunk/qpid/java/">
-
-<!ENTITY amqpSrc "http://www.amqp.org">
-
-<!-- Oracle javadoc -->
-
-<!ENTITY oracleJmsSpec "http://download.oracle.com/otndocs/jcp/7195-jms-1.1-fr-spec-oth-JSpec/">
-<!ENTITY oracleJdkDocUrl "http://docs.oracle.com/javase/7/docs/api/">
-<!ENTITY oracleJeeDocUrl "http://docs.oracle.com/javaee/6/api/">
-<!ENTITY oracleJmsTutorial "http://docs.oracle.com/javaee/6/tutorial/doc/bncdq.html">
-
-
-
-
-
diff --git a/qpid/doc/book/src/jms-client-0-8/images/JndiOverview.png b/qpid/doc/book/src/jms-client-0-8/images/JndiOverview.png
deleted file mode 100644
index 82f6efd0ef..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/images/JndiOverview.png
+++ /dev/null
Binary files differ
diff --git a/qpid/doc/book/src/jms-client-0-8/images/JndiOverview.svg b/qpid/doc/book/src/jms-client-0-8/images/JndiOverview.svg
deleted file mode 100644
index a8d1f05552..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/images/JndiOverview.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="61 27 572 361" width="572pt" height="361pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.0.3 <dc:date>2013-12-29 17:48Z</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><linearGradient x1="0" x2="1" id="Gradient" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#6383ab"/><stop offset="1" stop-color="white"/></linearGradient><linearGradient id="Obj_Gradient" xl:href="#Gradient" gradientTransform="translate(137 97) rotate(90) scale(78)"/><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><linearGradient x1="0" x2="1" id="Gradient_2" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#62a073"/><stop offset="1" stop-color="white"/></linearGradient><linearGradient id="Obj_Gradient_2" xl:href="#Gradient_2" gradientTransform="translate(552 71) rotate(90) scale(250)"/><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><linearGradient x1="0" x2="1" id="Gradient_3" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#baa6ff"/><stop offset="1" stop-color="#624aba"/></linearGradient><linearGradient id="Obj_Gradient_3" xl:href="#Gradient_3" gradientTransform="translate(344.1991 155.44433) rotate(101.76829) scale(21.564619)"/><linearGradient x1="0" x2="1" id="Gradient_4" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff6"/><stop offset="1" stop-color="#fc6"/></linearGradient><linearGradient id="Obj_Gradient_4" xl:href="#Gradient_4" gradientTransform="translate(149.57673 206.53541) rotate(180) scale(25.153465)"/><font-face font-family="Monaco" font-size="8" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><font-face font-family="Monaco" font-size="7" units-per-em="1000" underline-position="-37.597656" underline-thickness="75.683594" slope="0" x-height="560.54688" cap-height="780.27344" ascent="1e3" descent="-250" font-weight="500"><font-face-src><font-face-name name="Monaco"/></font-face-src></font-face><linearGradient id="Obj_Gradient_5" xl:href="#Gradient_4" gradientTransform="translate(209.73909 266.2009) rotate(99.75359) scale(20.210732)"/><font-face font-family="Helvetica Neue" font-size="12" panose-1="2 0 5 3 0 0 0 9 0 4" units-per-em="1000" underline-position="-100" underline-thickness="50" slope="-1e3" x-height="517" cap-height="714" ascent="957.00194" descent="-213.00043" font-style="italic" font-weight="500"><font-face-src><font-face-name name="HelveticaNeue-Italic"/></font-face-src></font-face><font-face font-family="Helvetica Neue" font-size="12" panose-1="2 0 8 3 0 0 0 9 0 4" units-per-em="1000" underline-position="-100" underline-thickness="50" slope="0" x-height="517" cap-height="714" ascent="975.002" descent="-217.00044" font-weight="bold"><font-face-src><font-face-name name="HelveticaNeue-Bold"/></font-face-src></font-face><font-face font-family="Helvetica Neue" font-size="11" panose-1="2 0 5 3 0 0 0 2 0 4" units-per-em="1000" underline-position="-100" underline-thickness="50" slope="0" x-height="517" cap-height="714" ascent="952.00193" descent="-213.00043" font-weight="500"><font-face-src><font-face-name name="HelveticaNeue"/></font-face-src></font-face><linearGradient id="Obj_Gradient_6" xl:href="#Gradient_4" gradientTransform="translate(220.71163 202) rotate(140.077054) scale(25.153465)"/></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>JNDI overview</title><rect fill="white" width="960" height="1172"/><g><title>Layer 1</title><g><xl:use xl:href="#id26_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id570_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id10_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id594_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id19_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id599_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id600_Graphic" filter="url(#Shadow)"/></g><line x1="443.50465" y1="38.532298" x2="437.70354" y2="370.8774" fill="white"/><line x1="443.50465" y1="38.532298" x2="437.70354" y2="370.8774" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="1,4"/><g id="id26_Graphic"><path d="M 76 175 L 76 104.8 L 88.2 97 L 198 97 L 198 167.2 L 185.8 175 Z" fill="url(#Obj_Gradient)"/><path d="M 76 175 L 76 104.8 L 88.2 97 L 198 97 L 198 167.2 L 185.8 175 L 76 175 M 76 104.8 L 185.8 104.8 L 198 97 M 185.8 104.8 L 185.8 175" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(81 104.8)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="17.233984" y="11" textLength="65.33203">Application</tspan></text></g><g id="id570_Graphic"><path d="M 486 321 L 486 96 L 499.2 71 L 618 71 L 618 296 L 604.8 321 Z" fill="url(#Obj_Gradient_2)"/><path d="M 486 321 L 486 96 L 499.2 71 L 618 71 L 618 296 L 604.8 321 L 486 321 M 486 96 L 604.8 96 L 618 71 M 604.8 96 L 604.8 321" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(491 96)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="35.058203" y="11" textLength="38.683594">Broker</tspan></text></g><path d="M 107.4296 270.77631 C 94.5 267.5 99.656 239.91885 120.2816 244.625 C 122.1952 235.45121 146.18 236.94022 146.0232 244.625 C 161.0624 234.79607 180.2816 254.39476 167.3904 264.22369 C 182.8592 268.98901 167.1952 294.66391 154.5 290.375 C 153.484 297.52359 130.7888 300.0252 128.7968 290.375 C 115.9456 300.68095 89.1488 284.83498 107.4296 270.77631 Z" fill="white"/><path d="M 107.4296 270.77631 C 94.5 267.5 99.656 239.91885 120.2816 244.625 C 122.1952 235.45121 146.18 236.94022 146.0232 244.625 C 161.0624 234.79607 180.2816 254.39476 167.3904 264.22369 C 182.8592 268.98901 167.1952 294.66391 154.5 290.375 C 153.484 297.52359 130.7888 300.0252 128.7968 290.375 C 115.9456 300.68095 89.1488 284.83498 107.4296 270.77631 Z" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(114 260.5)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="9.666992" y="11" textLength="26.666016">JNDI</tspan></text><path d="M 198 136 L 224.69935 130.54855 L 223.59255 135.86122 L 462.59204 185.65278 L 463.69884 180.34011 L 486 196 L 459.30065 201.45145 L 460.40745 196.13878 L 221.40796 146.34722 L 220.30116 151.65989 Z" fill="url(#Obj_Gradient_3)"/><path d="M 198 136 L 224.69935 130.54855 L 223.59255 135.86122 L 462.59204 185.65278 L 463.69884 180.34011 L 486 196 L 459.30065 201.45145 L 460.40745 196.13878 L 221.40796 146.34722 L 220.30116 151.65989 Z" stroke="#513d99" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 130.71163 175 L 143.28837 175 L 143.28837 218.07082 L 149.57673 218.07082 L 137 238.07083 L 124.42327 218.07082 L 130.71163 218.07082 Z" fill="url(#Obj_Gradient_4)"/><path d="M 130.71163 175 L 143.28837 175 L 143.28837 218.07082 L 149.57673 218.07082 L 137 238.07083 L 124.42327 218.07082 L 130.71163 218.07082 Z" stroke="#e97b00" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(144 187.88385) rotate(90)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="35.361328">lookup</tspan></text><path d="M 413 266.0802 C 413 258.69126 410.8283 257.7771 394.96463 250.4646 L 394.79705 250.38894 C 378.8496 243 378.68372 243 362.3173 243 C 340.52507 243 242 243 242 243 L 242 321 L 413 321 L 413 266.0802 Z" fill="white"/><path d="M 413 266.0802 C 413 258.69126 410.8283 257.7771 394.96463 250.4646 L 394.79705 250.38894 C 378.8496 243 378.68372 243 362.3173 243 C 340.52507 243 242 243 242 243 L 242 321 L 413 321 L 413 266.0802 Z M 413 265.69956 C 413 258.69126 412.83242 258.69126 378.68372 258.69126 L 378.68372 258.69126 C 378.68372 243.07644 378.68372 243 363.31937 243" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(247 260)" fill="black"><tspan font-family="Monaco" font-size="8" font-weight="500" x="0" y="8" textLength="139.22266">java.naming.factory.initial=…</tspan><tspan font-family="Monaco" font-size="7" font-weight="500" x="0" y="19" textLength="100.816406">connectionfactory.qpidCF</tspan><tspan font-family="Monaco" font-size="8" font-weight="500" x="100.816406" y="19" textLength="9.6015625">=…</tspan><tspan font-family="Monaco" font-size="8" font-weight="500" x="0" y="30" textLength="100.816406">queue.mytrades=trades</tspan><tspan font-family="Monaco" font-size="8" font-weight="500" x="0" y="41" textLength="148.82422">queue.myinstruments=instruments</tspan></text><path d="M 173.19828 275.30005 L 174.91024 265.34075 L 223.14507 273.63212 L 224.00105 268.65248 L 242 282 L 220.57713 288.57107 L 221.43311 283.59142 Z" fill="url(#Obj_Gradient_5)"/><path d="M 173.19828 275.30005 L 174.91024 265.34075 L 223.14507 273.63212 L 224.00105 268.65248 L 242 282 L 220.57713 288.57107 L 221.43311 283.59142 Z" stroke="#e97b00" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(189.84696 258.82977) rotate(9.75359)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="black" x="1.16878206" y="11" textLength="19.347656">defi</tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="black" x="20.516438" y="11" textLength="23.355469">ned </tspan><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="black" x="14.516438" y="25" textLength="12.673828">by</tspan></text><g id="id10_Graphic"><path d="M 551.4536 133.07864 L 587.49484 133.70774 C 589.9817 133.75115 591.785 146.1045 591.52006 161.28219 C 591.25513 176.45988 589.0218 188.74277 586.53496 188.69936 L 550.49372 188.07026 C 548.00687 188.02685 546.20358 175.6735 546.4685 160.49581 C 546.73343 145.31812 548.96675 133.03523 551.4536 133.07864" fill="#218041"/><path d="M 551.4536 133.07864 L 587.49484 133.70774 C 589.9817 133.75115 591.785 146.1045 591.52006 161.28219 C 591.25513 176.45988 589.0218 188.74277 586.53496 188.69936 L 550.49372 188.07026 C 548.00687 188.02685 546.20358 175.6735 546.4685 160.49581 C 546.73343 145.31812 548.96675 133.03523 551.4536 133.07864 M 587.49484 133.70774 C 585.008 133.66433 582.77468 145.94723 582.50975 161.12491 C 582.24482 176.3026 584.0481 188.65596 586.53496 188.69936" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(201.5625 332)" fill="#7e7e7e"><tspan font-family="Helvetica Neue" font-size="12" font-style="italic" font-weight="500" fill="#7e7e7e" x="18.36675" y="11" textLength="21.12">Defi</tspan><tspan font-family="Helvetica Neue" font-size="12" font-style="italic" font-weight="500" fill="#7e7e7e" x="39.48675" y="11" textLength="125.796">nes the JMS administer</tspan><tspan font-family="Helvetica Neue" font-size="12" font-style="italic" font-weight="500" fill="#7e7e7e" x="165.06675" y="11" textLength="59.34">ed objects </tspan><tspan font-family="Helvetica Neue" font-size="12" font-style="italic" font-weight="500" fill="#7e7e7e" x="19.71075" y="25" textLength="200.016">(connection factories, queues, topics)</tspan><tspan font-family="Helvetica Neue" font-size="12" font-style="italic" font-weight="500" fill="#7e7e7e" x="57.58875" y="39" textLength="124.26">used by the application</tspan></text><text transform="translate(247 223)" fill="black"><tspan font-family="Helvetica Neue" font-size="12" font-weight="bold" x=".064" y="12" textLength="36.216">jndi.pr</tspan><tspan font-family="Helvetica Neue" font-size="12" font-weight="bold" x="36.064" y="12" textLength="46.872">operties</tspan></text><text transform="translate(548 159.778)" fill="black"><tspan font-family="Helvetica Neue" font-size="11" font-weight="500" x=".0175" y="10" textLength="30.965">trades</tspan></text><g id="id594_Graphic"><path d="M 550.24356 203.85664 L 586.2848 204.48574 C 588.77165 204.52915 590.57495 216.8825 590.31002 232.06019 C 590.0451 247.23788 587.81177 259.52077 585.32492 259.47736 L 549.28368 258.84826 C 546.79683 258.80485 544.99354 246.4515 545.25846 231.27381 C 545.5234 216.09612 547.7567 203.81323 550.24356 203.85664" fill="#218041"/><path d="M 550.24356 203.85664 L 586.2848 204.48574 C 588.77165 204.52915 590.57495 216.8825 590.31002 232.06019 C 590.0451 247.23788 587.81177 259.52077 585.32492 259.47736 L 549.28368 258.84826 C 546.79683 258.80485 544.99354 246.4515 545.25846 231.27381 C 545.5234 216.09612 547.7567 203.81323 550.24356 203.85664 M 586.2848 204.48574 C 583.79796 204.44233 581.56464 216.72523 581.2997 231.90291 C 581.03478 247.0806 582.83808 259.43396 585.32492 259.47736" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><text transform="translate(540 224)" fill="black"><tspan font-family="Helvetica Neue" font-size="11" font-weight="500" x=".1635" y="10" textLength="57.673">instruments</tspan></text><path d="M 176.95547 179.10681 L 186.60067 171.0356 L 232.34226 225.69743 L 237.16486 221.66183 L 240.3548 245.0712 L 217.87446 237.80424 L 222.69706 233.76864 Z" fill="url(#Obj_Gradient_6)"/><path d="M 176.95547 179.10681 L 186.60067 171.0356 L 232.34226 225.69743 L 237.16486 221.66183 L 240.3548 245.0712 L 217.87446 237.80424 L 222.69706 233.76864 Z" stroke="#e97b00" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(197.6773 183.16345) rotate(50.077054)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" x="0" y="11" textLength="30.017578">reads</tspan></text><g id="id19_Graphic"><rect x="499" y="152" width="31" height="32" fill="#218041"/><rect x="499" y="152" width="31" height="32" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id599_Graphic"><rect x="499" y="195" width="31" height="32" fill="#218041"/><rect x="499" y="195" width="31" height="32" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id600_Graphic"><rect x="499" y="238" width="31" height="32" fill="#218041"/><rect x="499" y="238" width="31" height="32" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></g></svg>
diff --git a/qpid/doc/book/src/jms-client-0-8/images/QpidJmsOverview.png b/qpid/doc/book/src/jms-client-0-8/images/QpidJmsOverview.png
deleted file mode 100644
index 1f90905747..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/images/QpidJmsOverview.png
+++ /dev/null
Binary files differ
diff --git a/qpid/doc/book/src/jms-client-0-8/images/QpidJmsOverview.svg b/qpid/doc/book/src/jms-client-0-8/images/QpidJmsOverview.svg
deleted file mode 100644
index 55a354a108..0000000000
--- a/qpid/doc/book/src/jms-client-0-8/images/QpidJmsOverview.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!--
-
- 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
- regarding copyright ownership. The ASF licenses this file
- 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.
-
--->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="197 97 577 280" width="577pt" height="280pt" xmlns:dc="http://purl.org/dc/elements/1.1/"><metadata> Produced by OmniGraffle 6.0.3 <dc:date>2013-12-29 17:48Z</dc:date></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="1.308"/><feOffset in="blur" result="offset" dx="0" dy="2"/><feFlood flood-color="black" flood-opacity=".5" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><linearGradient x1="0" x2="1" id="Gradient" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#6383ab"/><stop offset="1" stop-color="white"/></linearGradient><linearGradient id="Obj_Gradient" xl:href="#Gradient" gradientTransform="translate(273 207) rotate(90) scale(78)"/><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face><linearGradient x1="0" x2="1" id="Gradient_2" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#62a073"/><stop offset="1" stop-color="white"/></linearGradient><linearGradient id="Obj_Gradient_2" xl:href="#Gradient_2" gradientTransform="translate(471 110) rotate(90) scale(250)"/><linearGradient x1="0" x2="1" id="Gradient_3" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#baa6ff"/><stop offset="1" stop-color="#624aba"/></linearGradient><linearGradient id="Obj_Gradient_3" xl:href="#Gradient_3" gradientTransform="translate(374.5 235.21769) rotate(90) scale(21.564619)"/><font-face font-family="Helvetica" font-size="12" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98047" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><linearGradient id="Obj_Gradient_4" xl:href="#Gradient" gradientTransform="translate(697.6057 142) rotate(90) scale(78)"/><linearGradient id="Obj_Gradient_5" xl:href="#Gradient_3" gradientTransform="translate(572.72086 183.88282) rotate(77.709507) scale(21.564619)"/><linearGradient id="Obj_Gradient_6" xl:href="#Gradient" gradientTransform="translate(697.6057 251) rotate(90) scale(78)"/><linearGradient id="Obj_Gradient_7" xl:href="#Gradient_3" gradientTransform="translate(574.32974 275.36927) rotate(93.517516) scale(21.564619)"/></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Typical Architecture</title><rect fill="white" width="960" height="1172"/><g><title>Layer 1</title><g><xl:use xl:href="#id26_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id570_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id10_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id594_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id597_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id599_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id19_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id601_Graphic" filter="url(#Shadow)"/><xl:use xl:href="#id602_Graphic" filter="url(#Shadow)"/></g><g id="id26_Graphic"><path d="M 212 285 L 212 214.8 L 224.2 207 L 334 207 L 334 277.2 L 321.8 285 Z" fill="url(#Obj_Gradient)"/><path d="M 212 285 L 212 214.8 L 224.2 207 L 334 207 L 334 277.2 L 321.8 285 L 212 285 M 212 214.8 L 321.8 214.8 L 334 207 M 321.8 214.8 L 321.8 285" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(217 214.8)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="12.230078" y="11" textLength="75.339844">Application 1</tspan></text></g><g id="id570_Graphic"><path d="M 403 360 L 403 135 L 416.6 110 L 539 110 L 539 335 L 525.4 360 Z" fill="url(#Obj_Gradient_2)"/><path d="M 403 360 L 403 135 L 416.6 110 L 539 110 L 539 335 L 525.4 360 L 403 360 M 403 135 L 525.4 135 L 539 110 M 525.4 135 L 525.4 360" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(408 135)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="36.858203" y="11" textLength="38.683594">Broker</tspan></text></g><path d="M 334 251.39115 L 334 240.60885 L 393 240.60885 L 393 235.21769 L 415 246 L 393 256.78231 L 393 251.39115 Z" fill="url(#Obj_Gradient_3)"/><path d="M 334 251.39115 L 334 240.60885 L 393 240.60885 L 393 235.21769 L 415 246 L 393 256.78231 L 393 251.39115 Z" stroke="#513d99" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(349.125 239)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="black" x="6.361328" y="11" textLength="38.027344">publish</tspan></text><g id="id10_Graphic"><path d="M 477.42644 182.83601 L 509.42644 182.83601 C 511.63444 182.83601 513.42644 194.03601 513.42644 207.83601 C 513.42644 221.63601 511.63444 232.83601 509.42644 232.83601 L 477.42644 232.83601 C 475.21844 232.83601 473.42644 221.63601 473.42644 207.83601 C 473.42644 194.03601 475.21844 182.83601 477.42644 182.83601" fill="#218041"/><path d="M 477.42644 182.83601 L 509.42644 182.83601 C 511.63444 182.83601 513.42644 194.03601 513.42644 207.83601 C 513.42644 221.63601 511.63444 232.83601 509.42644 232.83601 L 477.42644 232.83601 C 475.21844 232.83601 473.42644 221.63601 473.42644 207.83601 C 473.42644 194.03601 475.21844 182.83601 477.42644 182.83601 M 509.42644 182.83601 C 507.21844 182.83601 505.42644 194.03601 505.42644 207.83601 C 505.42644 221.63601 507.21844 232.83601 509.42644 232.83601" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id594_Graphic"><path d="M 474.7307 257.26253 L 506.7307 257.26253 C 508.9387 257.26253 510.7307 268.46253 510.7307 282.26253 C 510.7307 296.06253 508.9387 307.26253 506.7307 307.26253 L 474.7307 307.26253 C 472.5227 307.26253 470.7307 296.06253 470.7307 282.26253 C 470.7307 268.46253 472.5227 257.26253 474.7307 257.26253" fill="#218041"/><path d="M 474.7307 257.26253 L 506.7307 257.26253 C 508.9387 257.26253 510.7307 268.46253 510.7307 282.26253 C 510.7307 296.06253 508.9387 307.26253 506.7307 307.26253 L 474.7307 307.26253 C 472.5227 307.26253 470.7307 296.06253 470.7307 282.26253 C 470.7307 268.46253 472.5227 257.26253 474.7307 257.26253 M 506.7307 257.26253 C 504.5227 257.26253 502.7307 268.46253 502.7307 282.26253 C 502.7307 296.06253 504.5227 307.26253 506.7307 307.26253" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id597_Graphic"><path d="M 636.6057 220 L 636.6057 149.8 L 648.8057 142 L 758.6057 142 L 758.6057 212.2 L 746.4057 220 Z" fill="url(#Obj_Gradient_4)"/><path d="M 636.6057 220 L 636.6057 149.8 L 648.8057 142 L 758.6057 142 L 758.6057 212.2 L 746.4057 220 L 636.6057 220 M 636.6057 149.8 L 746.4057 149.8 L 758.6057 142 M 746.4057 149.8 L 746.4057 220" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(641.6057 149.8)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="12.230078" y="11" textLength="75.339844">Application 2</tspan></text></g><path d="M 514.57405 213.10361 L 512.27883 202.56842 L 613.96232 180.41551 L 612.81472 175.14791 L 636.6057 181 L 617.40514 196.21829 L 616.25754 190.9507 Z" fill="url(#Obj_Gradient_5)"/><path d="M 514.57405 213.10361 L 512.27883 202.56842 L 613.96232 180.41551 L 612.81472 175.14791 L 636.6057 181 L 617.40514 196.21829 L 616.25754 190.9507 Z" stroke="#513d99" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(532.21918 196.5776) rotate(-12.290493)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="black" x="17.930041" y="11" textLength="48.691406">consume</tspan></text><g id="id599_Graphic"><path d="M 636.6057 329 L 636.6057 258.8 L 648.8057 251 L 758.6057 251 L 758.6057 321.2 L 746.4057 329 Z" fill="url(#Obj_Gradient_6)"/><path d="M 636.6057 329 L 636.6057 258.8 L 648.8057 251 L 758.6057 251 L 758.6057 321.2 L 746.4057 329 L 636.6057 329 M 636.6057 258.8 L 746.4057 258.8 L 758.6057 251 M 746.4057 258.8 L 746.4057 329" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(641.6057 258.8)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="bold" x="12.230078" y="11" textLength="75.339844">Application 3</tspan></text></g><path d="M 510.39994 287.64353 L 511.06147 276.88153 L 614.97792 283.26922 L 615.3087 277.88822 L 636.6057 290 L 613.98562 299.41222 L 614.3164 294.03122 Z" fill="url(#Obj_Gradient_7)"/><path d="M 510.39994 287.64353 L 511.06147 276.88153 L 614.97792 283.26922 L 615.3087 277.88822 L 636.6057 290 L 613.98562 299.41222 L 614.3164 294.03122 Z" stroke="#513d99" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(531.88514 276.54967) rotate(3.5175156)" fill="black"><tspan font-family="Helvetica" font-size="12" font-weight="500" fill="black" x="17.946518" y="11" textLength="48.691406">consume</tspan></text><g id="id19_Graphic"><rect x="415" y="188" width="31" height="32" fill="#218041"/><rect x="415" y="188" width="31" height="32" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id601_Graphic"><rect x="415" y="230" width="31" height="32" fill="#218041"/><rect x="415" y="230" width="31" height="32" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id602_Graphic"><rect x="415" y="272" width="31" height="32" fill="#218041"/><rect x="415" y="272" width="31" height="32" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><path d="M 448.79433 245.96582 L 443.80928 242.23727 L 457.7571 223.5891 L 455.26457 221.72483 L 473.42644 207.83601 L 465.23466 229.18192 L 462.74214 227.31765 Z" fill="#e0c635"/><path d="M 448.79433 245.96582 L 443.80928 242.23727 L 457.7571 223.5891 L 455.26457 221.72483 L 473.42644 207.83601 L 465.23466 229.18192 L 462.74214 227.31765 Z" stroke="#513d99" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 443.9547 246.64579 L 449.17973 243.26174 L 461.11203 261.68537 L 463.72454 259.99335 L 470.4589 281.84286 L 453.2745 266.76145 L 455.887 265.06942 Z" fill="#e0c635"/><path d="M 443.9547 246.64579 L 449.17973 243.26174 L 461.11203 261.68537 L 463.72454 259.99335 L 470.4589 281.84286 L 453.2745 266.76145 L 455.887 265.06942 Z" stroke="#513d99" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g></g></svg>