summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAidan Skinner <aidan@apache.org>2008-08-23 00:07:42 +0000
committerAidan Skinner <aidan@apache.org>2008-08-23 00:07:42 +0000
commit082d735e9d11dce3eb7b54ab2e0228edf608d79c (patch)
tree9e9c35724dbbdeacbb974673e0ccabb794737937
parent4fad106ebd284729b9f772ed5aa4b0f0f51381fb (diff)
parent9c9299dcbf78f868b13cd574822a9637671a8862 (diff)
downloadqpid-python-082d735e9d11dce3eb7b54ab2e0228edf608d79c.tar.gz
Tag M3
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/tags/M3@688230 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/DESIGN3
-rw-r--r--qpid/cpp/README16
-rw-r--r--qpid/cpp/RELEASE_NOTES45
-rw-r--r--qpid/cpp/configure.ac2
-rw-r--r--qpid/cpp/examples/README120
-rw-r--r--qpid/cpp/src/Makefile.am1
-rw-r--r--qpid/cpp/src/cluster.mk6
-rw-r--r--qpid/cpp/src/qpid/amqp_0_10/Connection.cpp18
-rw-r--r--qpid/cpp/src/qpid/amqp_0_10/Connection.h10
-rw-r--r--qpid/cpp/src/qpid/broker/Connection.cpp5
-rw-r--r--qpid/cpp/src/qpid/broker/ConnectionState.h16
-rw-r--r--qpid/cpp/src/qpid/cluster/Cluster.cpp31
-rw-r--r--qpid/cpp/src/qpid/cluster/ConnectionInterceptor.cpp36
-rw-r--r--qpid/cpp/src/qpid/cluster/ConnectionInterceptor.h28
-rw-r--r--qpid/cpp/src/qpid/cluster/OutputInterceptor.cpp106
-rw-r--r--qpid/cpp/src/qpid/cluster/OutputInterceptor.h74
-rw-r--r--qpid/cpp/src/qpid/cluster/WriteEstimate.cpp63
-rw-r--r--qpid/cpp/src/qpid/cluster/WriteEstimate.h64
-rw-r--r--qpid/cpp/src/qpid/sys/ConnectionOutputHandler.h1
-rw-r--r--qpid/cpp/src/qpid/sys/ConnectionOutputHandlerPtr.h54
-rw-r--r--qpid/cpp/src/tests/cluster_test.cpp2
-rw-r--r--qpid/cpp/src/tests/consume.cpp11
-rw-r--r--qpid/cpp/src/tests/latencytest.cpp15
-rwxr-xr-xqpid/cpp/src/tests/start_cluster2
-rw-r--r--qpid/cpp/xml/cluster.xml10
-rw-r--r--qpid/java/010ExcludeList2
-rw-r--r--qpid/java/010ExcludeList-noPrefetch2
-rw-r--r--qpid/java/010ExcludeList-store2
-rw-r--r--qpid/java/08ExcludeList-nonvm3
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/handler/AccessRequestHandler.java21
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicRecoverSyncMethodHandler.java21
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueUnbindHandler.java21
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_9/ProtocolOutputConverterImpl.java21
-rw-r--r--qpid/java/broker/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTest.java21
-rw-r--r--qpid/java/build.xml18
-rwxr-xr-xqpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/DeclareQueue.java21
-rwxr-xr-xqpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/DirectProducer.java21
-rwxr-xr-xqpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/Listener.java21
-rwxr-xr-xqpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/DeclareQueue.java21
-rwxr-xr-xqpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/FannoutProducer.java21
-rwxr-xr-xqpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/Listener.java21
-rwxr-xr-xqpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/pubsub/TopicListener.java21
-rwxr-xr-xqpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/pubsub/TopicPublisher.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/handler/AccessRequestOkMethodHandler.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/message/FiledTableSupport.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/message/ReturnMessage.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQIoTransportProtocolSession.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java2
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/url/URLParser.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/jms/TopicSubscriber.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/ClientSession.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/ClientSessionDelegate.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/DemoClient.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/nclient/interop/BasicInteropTest.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/nclient/util/ByteBufferMessage.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/nclient/util/FileMessage.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/nclient/util/MessagePartListenerAdapter.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/nclient/util/ReadOnlyMessage.java21
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/nclient/util/StreamingMessage.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/ErrorCode.java23
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/QpidConfig.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/SerialException.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/ToyExchange.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/InputHandler_0_9.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioHandler.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioSender.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/util/Serial.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/AlreadyUnblockedException.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueue.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueueBase.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BooleanLatch.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/Capacity.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchBuffer.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchException.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchQueue.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRecord.java21
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRef.java21
-rw-r--r--qpid/java/common/src/test/java/org/apache/qpid/util/SerialTest.java21
-rw-r--r--qpid/java/module.xml4
-rw-r--r--qpid/java/release-docs/RELEASE_NOTES.txt112
-rw-r--r--qpid/java/resources/DISCLAIMER12
-rwxr-xr-xqpid/java/resources/LICENSE.txt203
-rw-r--r--qpid/java/resources/META-INF/DISCLAIMER10
-rw-r--r--qpid/java/resources/META-INF/DISCLAIMER.txt7
-rw-r--r--qpid/java/resources/META-INF/LICENSE203
-rw-r--r--qpid/java/resources/META-INF/NOTICE105
-rw-r--r--qpid/java/resources/NOTICE.txt36
-rw-r--r--qpid/java/resources/README.txt40
-rw-r--r--qpid/java/systests/pom.xml4
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/server/store/SlowMessageStore.java282
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/test/client/timeouts/SyncWaitDelayTest.java125
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/test/client/timeouts/SyncWaitTimeoutDelayTest.java71
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java70
-rw-r--r--qpid/python/RELEASE_NOTES29
-rw-r--r--qpid/ruby/RELEASE_NOTES21
97 files changed, 2253 insertions, 880 deletions
diff --git a/qpid/cpp/DESIGN b/qpid/cpp/DESIGN
index 7e9ba6755c..c814f1c53d 100644
--- a/qpid/cpp/DESIGN
+++ b/qpid/cpp/DESIGN
@@ -9,9 +9,8 @@ Project contains:
* Client library (lib/libqpid_client): src/qpid/client
* Broker library (lib/libqpid_broker): src/qpid/broker
* Common classes
- * src/qpid/concurrent: concurrecy
* src/qpid/framing: wire encoding/decoding
- * src/qpid/io: reading/writing
+ * src/qpid/sys: io, threading etc
* src/qpid/Exception.cpp, QpidError.cpp: Exception classes.
* Qpid Daemon (bin/qpidd): src/qpidd.cpp
diff --git a/qpid/cpp/README b/qpid/cpp/README
index e008f5b45b..7b3ceaddb2 100644
--- a/qpid/cpp/README
+++ b/qpid/cpp/README
@@ -5,6 +5,7 @@ Table of Contents
=================
1. Introduction
2. Available Documentation
+3. Quick start
1. Introduction
@@ -23,7 +24,14 @@ http://cwiki.apache.org/qpid/
==========================
- INSTALL - How to install Qpid/C++.
- RELEASE_NOTES - Release notes.
- - DESIGN - Qpid/C++ implementation.
- - LICENSE - Apache license.
- - NOTICE - Corresponds to the section 4 d of
- the Apache License, Version 2.0.
+ - DESIGN - Qpid/C++ implementation.
+ - LICENSE - Apache license.
+ - NOTICE - Corresponds to the section 4 d of
+ the Apache License, Version 2.0.
+
+3. Quick start
+==============
+If you are impatient to get on, ./configure && make will usually be
+sifficient to compile. Running make check will run tests, make install
+will install the client and daemon. For more detailed information,
+please see the INSTALL notes.
diff --git a/qpid/cpp/RELEASE_NOTES b/qpid/cpp/RELEASE_NOTES
index 819539b1ec..40031e401f 100644
--- a/qpid/cpp/RELEASE_NOTES
+++ b/qpid/cpp/RELEASE_NOTES
@@ -1,41 +1,16 @@
-Apache Incubator Qpid C++ M2 Release Notes
+Apache Incubator Qpid C++ M3 Release Notes
-------------------------------------------
-The Qpid M2 release contains support the for AMQP 0-8 specification.
-You can access the 0-8 specification using the following link.
-http://www.amqp.org/tikiwiki/tiki-index.php?page=Download
+The Qpid M3 release of the c++ client and broker support the 0-10
+version of the AMQP specification. You can access this specification
+from:
-For full details of Qpid capabilities, as they currently stand, see our
-detailed project documentation at:
+http://jira.amqp.org/confluence/display/AMQP/Download
-http://cwiki.apache.org/confluence/pages/viewpage.action?pageId=28284
-
-Please take time to go through the README file provided with the distro to get a good understanding about build system etc.
-
-
-Known Issues
-------------
-
-You can view the outstanding task list for Qpid by visiting our JIRA:
-http://issues.apache.org/jira/browse/QPID
-
-Bug QPID-437 c++ broker doesn't obey the mandatory flag
+For full details of Qpid c++ capabilities, as they currently stand,
+see our project documentation at:
+http://cwiki.apache.org/confluence/pages/viewpage.action?pageId=28284
-M2 Tasks Completed
--------------------
-
-Test QPID-412 Implement initial C++ interop tests
-Task QPID-124 Connect AMQP version from ProtocolInitiation object to all version-aware objects
-
-New Feature QPID-154 Logging/tracing for C++.
-New Feature QPID-98 implement durable exchanges
-New Feature QPID-41 Persistent storage for messages & durable queues
-
-Improvement QPID-450 C++ demos
-Improvement QPID-64 C++ cluster design.
-Improvement QPID-62 C++ event queue design.
-
-Bug QPID-481 c++ broker dosen't implement channel.flow
-Bug QPID-467 Complete Interop Testing
-Bug QPID-123 Sporadic failure on Python tests
+Please take time to go through the README file provided with the
+distro to get a good understanding about build system etc.
diff --git a/qpid/cpp/configure.ac b/qpid/cpp/configure.ac
index a17cdf25ac..812d82c6ce 100644
--- a/qpid/cpp/configure.ac
+++ b/qpid/cpp/configure.ac
@@ -8,7 +8,7 @@ dnl This program is distributed in the hope that it will be useful, but
dnl WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
dnl implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-AC_INIT([qpidc], [incubating-M3], [qpid-dev@incubator.apache.org])
+AC_INIT([qpidc], [0.3], [qpid-dev@incubator.apache.org])
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([dist-bzip2 subdir-objects])
diff --git a/qpid/cpp/examples/README b/qpid/cpp/examples/README
index d15adce58d..fcab6b4856 100644
--- a/qpid/cpp/examples/README
+++ b/qpid/cpp/examples/README
@@ -1,26 +1,114 @@
= Qpid C++ Examples =
-For more information read examples/README.
+Apache Qpid Examples in C++ are found inside this directory, they are
+based on the 0-10 version of the AMQP specification (see amqp.org for
+details). A short description on each example is found below.
-== The Verify All Script ==
+Please note that you will have to start the Qpid broker on port 5672,
+on your localhost (127.0.0.1) before running these examples. However,
+it is possible to alternatively specify the host and port when running
+each example.
-The verify_all script will run C++ examples against itself and against the
-Python examples. The success of the script is determined by comparing its output
-against what is expected.
+ Ex:- ./declare_queues 127.0.0.1 5673
-=== Arguments ===
+The qpid C++ broker (known as qpidd) is found
+- if installed, installed as /usr/sbin/qpidd
+- in /path-to-qpid-source/cpp/src/
-The verify_all script expects the path to Qpid trunk as an argument, in order to
-setup the environment for Python examples.
+== Direct ==
-== The Verify Script ==
+This is an example on how to create Point-to-Point applications using Qpid. This
+example contains three main components.
-The verify script is capable of running one or many scripts designed to verify
-the success of Qpid examples. The verify script is utilized by the verify_all
-scripts.
+ 1. declare_queues
+ This will bind a queue to the amq.direct exchange, so that the messages sent
+ to the amq.direct exchange, with a given routing key (routing_key) are
+ delivered to a specific queue (message_queue).
+
+ 2. direct_producer
+ Publishes messages to the amq.direct exchange using the given routing key
+ (routing_key) discussed above.
+
+ 3. listener
+ Uses a message listener to listen messages from a specific queue
+ (message_queue) as discussed above.
+
+In order to run this example,
+
+On Linux:
+ # ./declare_queues
+ # ./direct_producer
+ # ./listener
+
+== Fanout ==
+
+This is an example on how to create Fanout exchange applications using Qpid.
+This example has two components unlike the previous. This is because Fanout
+exchange not needing a routing key to be specified.
+
+ 1. fanout_producer
+ Publishes a message to the amq.fanout exchange, without using a routing key.
+
+ 2. listener
+ Uses a message listener to listen messages from the amq.fanout exchange.
+
+Another difference between the above example and this example is that in the
+above example there is no requirement for the listener to be activated before
+the messages being published. However, in this example, it is required that a
+listener be active before the messages being published, if not they will be
+lost.
+
+In order to run this example,
+
+On Linux:
+ # ./listener
+ # ./fanout_producer
+
+== Publisher/Subscriber ==
+
+Showing The ability to create topic Publishers and Subscribers using Qpid is
+the main objective of this example. It is required that you subscribe first,
+before publishing any message due to the construction of this example. There
+are two main applications in this.
+
+ 1. topic_publisher
+ This application is used to publish messages to the amq.topic exchange using
+ multipart routing keys, usa.weather, europe.weather, usa.news and europe.news.
+
+ 2. topic_listener
+ This application is used to subscribe to several private queues, such as usa,
+ europe, weather and news. In here, each private queue created is bound to the
+ amq.topic exchange using bindings that match the corresponding parts of the
+ multipart routing keys.
+ Ex:- #.news will retrieve news irrespective of destination.
+
+This example also shows the use of the 'control' routing key which is used by
+control messages.
+
+In order to run this example,
+
+On Linux:
+ # ./topic_listener
+ # ./topic_publisher
+
+== Request/Response ==
+
+This example shows a simple server that will accept string from a client and
+convert them to upper case and send them back to the client. This too has two
+main application like the previous sample.
+
+ 1. client
+ This sends lines of poetry to the server.
+
+ 2. server
+ This is a simple service that will convert incoming strings to upper case and
+ send the result to amq.direct exchange on which the client listens. It uses the
+ request's reply_to property as the response's routing key.
+
+In order to run this example,
+
+On Linux:
+ # ./server
+ # ./client
-=== Verifying an individual example ===
-This will require you using the verify script, and providing the necessary sub
-script(s) it will utilize in the process. Please note that it is your
-responsibility to setup the necessary environment for the verification process
diff --git a/qpid/cpp/src/Makefile.am b/qpid/cpp/src/Makefile.am
index 172888cfb8..039c35ed4e 100644
--- a/qpid/cpp/src/Makefile.am
+++ b/qpid/cpp/src/Makefile.am
@@ -546,6 +546,7 @@ nobase_include_HEADERS = \
qpid/sys/ConnectionInputHandler.h \
qpid/sys/ConnectionInputHandlerFactory.h \
qpid/sys/ConnectionOutputHandler.h \
+ qpid/sys/ConnectionOutputHandlerPtr.h \
qpid/sys/DeletionManager.h \
qpid/sys/Dispatcher.h \
qpid/sys/IOHandle.h \
diff --git a/qpid/cpp/src/cluster.mk b/qpid/cpp/src/cluster.mk
index aa3644785b..934ec0174b 100644
--- a/qpid/cpp/src/cluster.mk
+++ b/qpid/cpp/src/cluster.mk
@@ -19,7 +19,11 @@ libqpidcluster_la_SOURCES = \
qpid/cluster/ShadowConnectionOutputHandler.h \
qpid/cluster/PollableCondition.h \
qpid/cluster/PollableCondition.cpp \
- qpid/cluster/PollableQueue.h
+ qpid/cluster/PollableQueue.h \
+ qpid/cluster/WriteEstimate.h \
+ qpid/cluster/WriteEstimate.cpp \
+ qpid/cluster/OutputInterceptor.h \
+ qpid/cluster/OutputInterceptor.cpp
libqpidcluster_la_LIBADD= -lcpg libqpidbroker.la
diff --git a/qpid/cpp/src/qpid/amqp_0_10/Connection.cpp b/qpid/cpp/src/qpid/amqp_0_10/Connection.cpp
index a3692911b2..0b996dedd2 100644
--- a/qpid/cpp/src/qpid/amqp_0_10/Connection.cpp
+++ b/qpid/cpp/src/qpid/amqp_0_10/Connection.cpp
@@ -30,7 +30,7 @@ using sys::Mutex;
Connection::Connection(sys::OutputControl& o, broker::Broker& broker, const std::string& id, bool _isClient)
: frameQueueClosed(false), output(o),
connection(new broker::Connection(this, broker, id, _isClient)),
- identifier(id), initialized(false), isClient(_isClient) {}
+ identifier(id), initialized(false), isClient(_isClient), buffered(0) {}
size_t Connection::decode(const char* buffer, size_t size) {
framing::Buffer in(const_cast<char*>(buffer), size);
@@ -53,7 +53,7 @@ size_t Connection::decode(const char* buffer, size_t size) {
bool Connection::canEncode() {
if (!frameQueueClosed) connection->doOutput();
- Mutex::ScopedLock l(frameQueueLock);
+ Mutex::ScopedLock l(frameQueueLock);
return (!isClient && !initialized) || !frameQueue.empty();
}
@@ -71,10 +71,12 @@ size_t Connection::encode(const char* buffer, size_t size) {
initialized = true;
QPID_LOG(trace, "SENT " << identifier << " INIT(" << pi << ")");
}
- while (!frameQueue.empty() && (frameQueue.front().size() <= out.available())) {
+ size_t frameSize=0;
+ while (!frameQueue.empty() && ((frameSize=frameQueue.front().size()) <= out.available())) {
frameQueue.front().encode(out);
QPID_LOG(trace, "SENT [" << identifier << "]: " << frameQueue.front());
- frameQueue.pop();
+ frameQueue.pop_front();
+ buffered -= frameSize;
}
assert(frameQueue.empty() || frameQueue.front().size() <= size);
if (!frameQueue.empty() && frameQueue.front().size() > size)
@@ -98,7 +100,8 @@ void Connection::send(framing::AMQFrame& f) {
{
Mutex::ScopedLock l(frameQueueLock);
if (!frameQueueClosed)
- frameQueue.push(f);
+ frameQueue.push_back(f);
+ buffered += f.size();
}
activateOutput();
}
@@ -107,4 +110,9 @@ framing::ProtocolVersion Connection::getVersion() const {
return framing::ProtocolVersion(0,10);
}
+size_t Connection::getBuffered() const {
+ Mutex::ScopedLock l(frameQueueLock);
+ return buffered;
+}
+
}} // namespace qpid::amqp_0_10
diff --git a/qpid/cpp/src/qpid/amqp_0_10/Connection.h b/qpid/cpp/src/qpid/amqp_0_10/Connection.h
index b707031789..f6fb87f928 100644
--- a/qpid/cpp/src/qpid/amqp_0_10/Connection.h
+++ b/qpid/cpp/src/qpid/amqp_0_10/Connection.h
@@ -26,7 +26,7 @@
#include "qpid/sys/Mutex.h"
#include "qpid/broker/Connection.h"
#include <boost/intrusive_ptr.hpp>
-#include <queue>
+#include <deque>
#include <memory>
namespace qpid {
@@ -36,7 +36,9 @@ namespace amqp_0_10 {
class Connection : public sys::ConnectionCodec,
public sys::ConnectionOutputHandler
{
- std::queue<framing::AMQFrame> frameQueue;
+ typedef std::deque<framing::AMQFrame> FrameQueue;
+
+ FrameQueue frameQueue;
bool frameQueueClosed;
mutable sys::Mutex frameQueueLock;
sys::OutputControl& output;
@@ -44,7 +46,8 @@ class Connection : public sys::ConnectionCodec,
std::string identifier;
bool initialized;
bool isClient;
-
+ size_t buffered;
+
public:
Connection(sys::OutputControl&, broker::Broker&, const std::string& id, bool isClient = false);
size_t decode(const char* buffer, size_t size);
@@ -56,6 +59,7 @@ class Connection : public sys::ConnectionCodec,
void close(); // closing from this end.
void send(framing::AMQFrame&);
framing::ProtocolVersion getVersion() const;
+ size_t getBuffered() const;
};
}} // namespace qpid::amqp_0_10
diff --git a/qpid/cpp/src/qpid/broker/Connection.cpp b/qpid/cpp/src/qpid/broker/Connection.cpp
index ab18d1f035..d65dbaeec7 100644
--- a/qpid/cpp/src/qpid/broker/Connection.cpp
+++ b/qpid/cpp/src/qpid/broker/Connection.cpp
@@ -79,7 +79,7 @@ Connection::Connection(ConnectionOutputHandler* out_, Broker& broker_, const std
void Connection::requestIOProcessing(boost::function0<void> callback)
{
ioCallback = callback;
- out->activateOutput();
+ out.activateOutput();
}
Connection::~Connection()
@@ -178,7 +178,6 @@ void Connection::closedImpl(){ // Physically closed, suspend open sessions.
try {
while (!channels.empty())
ptr_map_ptr(channels.begin())->handleDetach();
- // FIXME aconway 2008-07-15: exclusive is per-session not per-connection in 0-10.
while (!exclusiveQueues.empty()) {
Queue::shared_ptr q(exclusiveQueues.front());
q->releaseExclusiveOwnership();
@@ -245,7 +244,7 @@ Manageable::status_t Connection::ManagementMethod(uint32_t methodId, Args&)
case management::Connection::METHOD_CLOSE :
mgmtClosing = true;
if (mgmtObject != 0) mgmtObject->set_closing(1);
- out->activateOutput();
+ out.activateOutput();
status = Manageable::STATUS_OK;
break;
}
diff --git a/qpid/cpp/src/qpid/broker/ConnectionState.h b/qpid/cpp/src/qpid/broker/ConnectionState.h
index c9cf6ece8d..97055f8b2e 100644
--- a/qpid/cpp/src/qpid/broker/ConnectionState.h
+++ b/qpid/cpp/src/qpid/broker/ConnectionState.h
@@ -24,7 +24,7 @@
#include <vector>
#include "qpid/sys/AggregateOutput.h"
-#include "qpid/sys/ConnectionOutputHandler.h"
+#include "qpid/sys/ConnectionOutputHandlerPtr.h"
#include "qpid/framing/ProtocolVersion.h"
#include "qpid/management/Manageable.h"
#include "Broker.h"
@@ -34,11 +34,14 @@ namespace broker {
class ConnectionState : public ConnectionToken, public management::Manageable
{
+ protected:
+ sys::ConnectionOutputHandlerPtr out;
+
public:
- ConnectionState(qpid::sys::ConnectionOutputHandler* o, Broker& b) :
+ ConnectionState(qpid::sys::ConnectionOutputHandler* o, Broker& b) :
+ out(o),
broker(b),
- outputTasks(*o),
- out(o),
+ outputTasks(out),
framemax(65535),
heartbeat(0),
stagingThreshold(broker.getStagingThreshold())
@@ -67,14 +70,13 @@ class ConnectionState : public ConnectionToken, public management::Manageable
//contained output tasks
sys::AggregateOutput outputTasks;
- sys::ConnectionOutputHandler& getOutput() const { return *out; }
+ sys::ConnectionOutputHandlerPtr& getOutput() { return out; }
framing::ProtocolVersion getVersion() const { return version; }
- void setOutputHandler(qpid::sys::ConnectionOutputHandler* o) { out = o; }
+ void setOutputHandler(qpid::sys::ConnectionOutputHandler* o) { out.set(o); }
protected:
framing::ProtocolVersion version;
- sys::ConnectionOutputHandler* out;
uint32_t framemax;
uint16_t heartbeat;
uint64_t stagingThreshold;
diff --git a/qpid/cpp/src/qpid/cluster/Cluster.cpp b/qpid/cpp/src/qpid/cluster/Cluster.cpp
index 05ab9148b5..f36d606af8 100644
--- a/qpid/cpp/src/qpid/cluster/Cluster.cpp
+++ b/qpid/cpp/src/qpid/cluster/Cluster.cpp
@@ -25,12 +25,14 @@
#include "qpid/framing/AMQFrame.h"
#include "qpid/framing/ClusterNotifyBody.h"
#include "qpid/framing/ClusterConnectionCloseBody.h"
+#include "qpid/framing/ClusterConnectionDoOutputBody.h"
#include "qpid/log/Statement.h"
#include "qpid/memory.h"
#include "qpid/shared_ptr.h"
#include <boost/bind.hpp>
#include <boost/cast.hpp>
+#include <boost/current_function.hpp>
#include <algorithm>
#include <iterator>
#include <map>
@@ -76,11 +78,6 @@ Cluster::Cluster(const std::string& name_, const Url& url_, broker::Broker& b) :
cpg.join(name);
notify();
- // FIXME aconway 2008-08-11: can we remove this loop?
- // Dispatch till we show up in the cluster map.
- while (empty())
- cpg.dispatchOne();
-
// Start dispatching from the poller.
cpgDispatchHandle.startWatch(poller);
deliverQueue.start(poller);
@@ -97,9 +94,8 @@ Cluster::~Cluster() {
std::for_each(localConnectionSet.begin(), localConnectionSet.end(), boost::bind(&ConnectionInterceptor::dirtyClose, _1));
}
-// local connection initializes plugins
void Cluster::initialize(broker::Connection& c) {
- bool isLocal = &c.getOutput() != &shadowOut;
+ bool isLocal = c.getOutput().get() != &shadowOut;
if (isLocal)
localConnectionSet.insert(new ConnectionInterceptor(c, *this));
}
@@ -107,10 +103,8 @@ void Cluster::initialize(broker::Connection& c) {
void Cluster::leave() {
Mutex::ScopedLock l(lock);
if (!broker) return; // Already left.
- // At this point the poller has already been shut down so
- // no dispatches can occur thru the cpgDispatchHandle.
- //
- // FIXME aconway 2008-08-11: assert this is the cae.
+ // Leave is called by from Broker destructor after the poller has
+ // been shut down. No dispatches can occur.
QPID_LOG(debug, "Leaving cluster " << *this);
cpg.leave(name);
@@ -173,13 +167,6 @@ Cluster::MemberList Cluster::getMembers() const {
return result;
}
-// ################ HERE - leaking shadow connections.
-// FIXME aconway 2008-08-11: revisit memory management for shadow
-// connections, what if the Connection is closed other than via
-// disconnect? Dangling pointer in shadow map. Use ptr_map for shadow
-// map, add deleted state to ConnectionInterceptor? Interceptors need
-// to know about map? Check how Connections can be deleted.
-
ConnectionInterceptor* Cluster::getShadowConnection(const Cpg::Id& member, void* remotePtr) {
ShadowConnectionId id(member, remotePtr);
ShadowConnectionMap::iterator i = shadowConnectionMap.find(id);
@@ -274,7 +261,8 @@ void Cluster::handleMethod(Id from, ConnectionInterceptor* connection, AMQMethod
break;
}
case CLUSTER_CONNECTION_DO_OUTPUT_METHOD_ID: {
- connection->deliverDoOutput();
+ ClusterConnectionDoOutputBody& doOutput = static_cast<ClusterConnectionDoOutputBody&>(method);
+ connection->deliverDoOutput(doOutput.getBytes());
break;
}
default:
@@ -309,9 +297,8 @@ void Cluster::dispatch(sys::DispatchHandle& h) {
void Cluster::disconnect(sys::DispatchHandle& h) {
h.stopWatch();
- // FIXME aconway 2008-08-11: error handling if we are disconnected.
- // Kill the broker?
- assert(0);
+ QPID_LOG(critical, "Disconnected from cluster, shutting down");
+ broker->shutdown();
}
}} // namespace qpid::cluster
diff --git a/qpid/cpp/src/qpid/cluster/ConnectionInterceptor.cpp b/qpid/cpp/src/qpid/cluster/ConnectionInterceptor.cpp
index c13651eccb..efcab1b731 100644
--- a/qpid/cpp/src/qpid/cluster/ConnectionInterceptor.cpp
+++ b/qpid/cpp/src/qpid/cluster/ConnectionInterceptor.cpp
@@ -22,6 +22,8 @@
#include "qpid/framing/ClusterConnectionCloseBody.h"
#include "qpid/framing/ClusterConnectionDoOutputBody.h"
#include "qpid/framing/AMQFrame.h"
+#include <boost/current_function.hpp>
+
namespace qpid {
namespace cluster {
@@ -32,24 +34,27 @@ template <class T, class U, class V> void shift(T& a, U& b, const V& c) { a = b;
ConnectionInterceptor::ConnectionInterceptor(
broker::Connection& conn, Cluster& clust, Cluster::ShadowConnectionId shadowId_)
- : connection(&conn), cluster(clust), isClosed(false), shadowId(shadowId_)
+ : connection(&conn), cluster(clust), isClosed(false), shadowId(shadowId_), output(*this, *conn.getOutput().get())
{
connection->addFinalizer(boost::bind(operator delete, this));
+ connection->setOutputHandler(&output),
// Attach my functions to Connection extension points.
shift(receivedNext, connection->receivedFn, boost::bind(&ConnectionInterceptor::received, this, _1));
shift(closedNext, connection->closedFn, boost::bind(&ConnectionInterceptor::closed, this));
- shift(doOutputNext, connection->doOutputFn, boost::bind(&ConnectionInterceptor::doOutput, this));
+ shift(output.doOutputNext, connection->doOutputFn, boost::bind(&OutputInterceptor::doOutput, &output));
}
ConnectionInterceptor::~ConnectionInterceptor() {
assert(connection == 0);
}
+// Forward all received frames to the cluster, continue handling on delivery.
void ConnectionInterceptor::received(framing::AMQFrame& f) {
if (isClosed) return;
cluster.send(f, this);
}
+// Continue normal handling of delivered frames.
void ConnectionInterceptor::deliver(framing::AMQFrame& f) {
receivedNext(f);
}
@@ -81,28 +86,17 @@ void ConnectionInterceptor::deliverClosed() {
}
void ConnectionInterceptor::dirtyClose() {
- // Not closed via cluster self-delivery but closed locally.
- // Used for dirty cluster shutdown where active connections
- // must be cleaned up.
+ // Not closed via cluster self-delivery but closed locally. Used
+ // when local broker is shut down without a clean cluster shutdown.
+ // Release the connection, it will delete this.
connection = 0;
}
-bool ConnectionInterceptor::doOutput() {
- // FIXME aconway 2008-08-15: this is not correct.
- // Run in write threads so order of execution of doOutput is not determinate.
- // Will only work reliably for in single-consumer tests.
-
- if (connection->hasOutput()) {
- cluster.send(AMQFrame(in_place<ClusterConnectionDoOutputBody>()), this);
- return doOutputNext();
- }
- return false;
-}
-
-void ConnectionInterceptor::deliverDoOutput() {
- // FIXME aconway 2008-08-15: see comment in doOutput.
- if (isShadow())
- doOutputNext();
+// Delivery of doOutput allows us to run the real connection doOutput()
+// which stocks up the write buffers with data.
+//
+void ConnectionInterceptor::deliverDoOutput(size_t requested) {
+ output.deliverDoOutput(requested);
}
}} // namespace qpid::cluster
diff --git a/qpid/cpp/src/qpid/cluster/ConnectionInterceptor.h b/qpid/cpp/src/qpid/cluster/ConnectionInterceptor.h
index 370572bd9d..9216921067 100644
--- a/qpid/cpp/src/qpid/cluster/ConnectionInterceptor.h
+++ b/qpid/cpp/src/qpid/cluster/ConnectionInterceptor.h
@@ -1,5 +1,5 @@
-#ifndef QPID_CLUSTER_CONNECTIONPLUGIN_H
-#define QPID_CLUSTER_CONNECTIONPLUGIN_H
+#ifndef QPID_CLUSTER_CONNECTIONINTERCEPTOR_H
+#define QPID_CLUSTER_CONNECTIONINTERCEPTOR_H
/*
*
@@ -23,6 +23,8 @@
*/
#include "Cluster.h"
+#include "WriteEstimate.h"
+#include "OutputInterceptor.h"
#include "qpid/broker/Connection.h"
#include "qpid/sys/ConnectionOutputHandler.h"
@@ -41,42 +43,46 @@ class ConnectionInterceptor {
Cluster::ShadowConnectionId getShadowId() const { return shadowId; }
- bool isLocal() const { return shadowId == Cluster::ShadowConnectionId(0,0); }
-
+ bool isShadow() const { return shadowId != Cluster::ShadowConnectionId(0,0); }
+ bool isLocal() const { return !isShadow(); }
+ bool getClosed() const { return isClosed; }
+
// self-delivery of intercepted extension points.
void deliver(framing::AMQFrame& f);
void deliverClosed();
- void deliverDoOutput();
+ void deliverDoOutput(size_t requested);
void dirtyClose();
+ Cluster& getCluster() { return cluster; }
+
private:
struct NullConnectionHandler : public qpid::sys::ConnectionOutputHandler {
void close() {}
void send(framing::AMQFrame&) {}
- void doOutput() {}
void activateOutput() {}
};
- bool isShadow() { return shadowId != Cluster::ShadowConnectionId(0,0); }
-
// Functions to intercept to Connection extension points.
void received(framing::AMQFrame&);
void closed();
bool doOutput();
+ void activateOutput();
+
+ void sendDoOutput();
boost::function<void (framing::AMQFrame&)> receivedNext;
boost::function<void ()> closedNext;
- boost::function<bool ()> doOutputNext;
boost::intrusive_ptr<broker::Connection> connection;
Cluster& cluster;
NullConnectionHandler discardHandler;
bool isClosed;
Cluster::ShadowConnectionId shadowId;
+ WriteEstimate writeEstimate;
+ OutputInterceptor output;
};
}} // namespace qpid::cluster
-#endif /*!QPID_CLUSTER_CONNECTIONPLUGIN_H*/
-
+#endif /*!QPID_CLUSTER_CONNECTIONINTERCEPTOR_H*/
diff --git a/qpid/cpp/src/qpid/cluster/OutputInterceptor.cpp b/qpid/cpp/src/qpid/cluster/OutputInterceptor.cpp
new file mode 100644
index 0000000000..84d3a6ad69
--- /dev/null
+++ b/qpid/cpp/src/qpid/cluster/OutputInterceptor.cpp
@@ -0,0 +1,106 @@
+/*
+ *
+ * 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 "OutputInterceptor.h"
+#include "ConnectionInterceptor.h"
+#include "qpid/framing/ClusterConnectionDoOutputBody.h"
+#include "qpid/framing/AMQFrame.h"
+#include <boost/current_function.hpp>
+
+
+namespace qpid {
+namespace cluster {
+
+using namespace framing;
+
+OutputInterceptor::OutputInterceptor(ConnectionInterceptor& p, sys::ConnectionOutputHandler& h)
+ : parent(p), next(h), sent(), moreOutput(), doingOutput()
+{}
+
+void OutputInterceptor::send(framing::AMQFrame& f) {
+ Locker l(lock);
+ next.send(f);
+ sent += f.size();
+}
+
+void OutputInterceptor::activateOutput() {
+ Locker l(lock);
+ moreOutput = true;
+ sendDoOutput();
+}
+
+// Called in write thread when the IO layer has no more data to write.
+// We do nothing in the write thread, we run doOutput only on delivery
+// of doOutput requests.
+bool OutputInterceptor::doOutput() {
+ return false;
+}
+
+// Delivery of doOutput allows us to run the real connection doOutput()
+// which stocks up the write buffers with data.
+//
+void OutputInterceptor::deliverDoOutput(size_t requested) {
+ if (parent.getClosed()) return;
+
+ Locker l(lock);
+ size_t buf = next.getBuffered();
+ if (parent.isLocal())
+ writeEstimate.delivered(sent, buf); // Update the estimate.
+
+ // Run the real doOutput() till we have added the requested data or there's nothing to output.
+ sent = 0;
+ do {
+ sys::Mutex::ScopedUnlock u(lock);
+ moreOutput = doOutputNext(); // Calls send()
+ } while (sent < requested && moreOutput);
+ sent += buf; // Include buffered data in the sent total.
+
+ QPID_LOG(trace, "Delivered doOutput: requested=" << requested << " output=" << sent << " more=" << moreOutput);
+
+ if (parent.isLocal() && moreOutput)
+ sendDoOutput();
+ else
+ doingOutput = false;
+}
+
+void OutputInterceptor::startDoOutput() {
+ if (!doingOutput)
+ sendDoOutput();
+}
+
+// Send a doOutput request if one is not already in flight.
+void OutputInterceptor::sendDoOutput() {
+ // Call with lock held.
+ if (parent.isShadow() || parent.getClosed())
+ return;
+
+ doingOutput = true;
+ size_t request = writeEstimate.sending(getBuffered());
+
+ // Note we may send 0 size request if there's more than 2*estimate in the buffer.
+ // Send it anyway to keep the doOutput chain going until we are sure there's no more output
+ // (in deliverDoOutput)
+ //
+ parent.getCluster().send(AMQFrame(in_place<ClusterConnectionDoOutputBody>(
+ framing::ProtocolVersion(), request)), &parent);
+ QPID_LOG(trace, &parent << "Send doOutput request for " << request);
+}
+
+}} // namespace qpid::cluster
diff --git a/qpid/cpp/src/qpid/cluster/OutputInterceptor.h b/qpid/cpp/src/qpid/cluster/OutputInterceptor.h
new file mode 100644
index 0000000000..b39f2a2be9
--- /dev/null
+++ b/qpid/cpp/src/qpid/cluster/OutputInterceptor.h
@@ -0,0 +1,74 @@
+#ifndef QPID_CLUSTER_OUTPUTINTERCEPTOR_H
+#define QPID_CLUSTER_OUTPUTINTERCEPTOR_H
+
+/*
+ *
+ * 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 "WriteEstimate.h"
+#include "qpid/sys/ConnectionOutputHandler.h"
+#include "qpid/broker/ConnectionFactory.h"
+#include <boost/function.hpp>
+
+namespace qpid {
+namespace framing { class AMQFrame; }
+namespace cluster {
+
+class ConnectionInterceptor;
+
+/**
+ * Interceptor for connection OutputHandler, manages outgoing message replication.
+ */
+class OutputInterceptor : public sys::ConnectionOutputHandler {
+ public:
+ OutputInterceptor(ConnectionInterceptor& p, sys::ConnectionOutputHandler& h);
+
+ // sys::ConnectionOutputHandler functions
+ void send(framing::AMQFrame& f);
+ void activateOutput();
+ void close() { Locker l(lock); next.close(); }
+ size_t getBuffered() const { Locker l(lock); return next.getBuffered(); }
+
+ // Delivery point for doOutput requests.
+ void deliverDoOutput(size_t requested);
+ // Intercept doOutput requests on Connection.
+ bool doOutput();
+
+ boost::function<bool ()> doOutputNext;
+
+ ConnectionInterceptor& parent;
+
+ private:
+ typedef sys::Mutex::ScopedLock Locker;
+
+ void startDoOutput();
+ void sendDoOutput();
+
+ mutable sys::Mutex lock;
+ sys::ConnectionOutputHandler& next;
+ size_t sent;
+ WriteEstimate writeEstimate;
+ bool moreOutput;
+ bool doingOutput;
+};
+
+}} // namespace qpid::cluster
+
+#endif /*!QPID_CLUSTER_OUTPUTINTERCEPTOR_H*/
diff --git a/qpid/cpp/src/qpid/cluster/WriteEstimate.cpp b/qpid/cpp/src/qpid/cluster/WriteEstimate.cpp
new file mode 100644
index 0000000000..81131be437
--- /dev/null
+++ b/qpid/cpp/src/qpid/cluster/WriteEstimate.cpp
@@ -0,0 +1,63 @@
+/*
+ *
+ * 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 "WriteEstimate.h"
+#include "qpid/log/Statement.h"
+#include <boost/current_function.hpp>
+
+namespace qpid {
+namespace cluster {
+
+WriteEstimate::WriteEstimate(size_t initial)
+ : growing(true), estimate(initial) {}
+
+size_t WriteEstimate::sending(size_t buffered) {
+ // We want to send a doOutput request for enough data such
+ // that if estimate bytes are written before it is self
+ // delivered then what is left in the buffer plus the doOutput
+ // request will be estimate bytes.
+
+ size_t predictLeft = (buffered > estimate) ? buffered - estimate : 0;
+ size_t request = (estimate > predictLeft) ? estimate - predictLeft : 0;
+ return request;
+}
+
+size_t pad(size_t value) { return value + value/2; }
+
+void WriteEstimate::delivered(size_t sent, size_t buffered) {
+ size_t wrote = sent > buffered ? sent - buffered : 0;
+ if (wrote == 0) // No change
+ return;
+ if (buffered > 0) { // Buffer was over-stocked, we wrote to capacity.
+ growing = false;
+ estimate = pad(wrote); // Estimate at 1.5 write for padding.
+ }
+ else if (wrote > estimate) { // Wrote everything, buffer was under-stocked
+ if (growing)
+ estimate = std::max(estimate*2, pad(wrote)); // Grow quickly if we have not yet seen an over-stock.
+ else
+ estimate = pad(wrote);
+ }
+}
+
+}} // namespace qpid::cluster
+
+
diff --git a/qpid/cpp/src/qpid/cluster/WriteEstimate.h b/qpid/cpp/src/qpid/cluster/WriteEstimate.h
new file mode 100644
index 0000000000..01ab2a3e34
--- /dev/null
+++ b/qpid/cpp/src/qpid/cluster/WriteEstimate.h
@@ -0,0 +1,64 @@
+#ifndef QPID_CLUSTER_WRITEESTIMATE_H
+#define QPID_CLUSTER_WRITEESTIMATE_H
+
+/*
+ *
+ * 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 "qpid/sys/Mutex.h"
+
+namespace qpid {
+namespace cluster {
+
+/**
+ * Estimate the amount of data that a connection can write between sending
+ * a doOutput notice and re-receiving it.
+ *
+ * The goal is to avoid ever write-idling the connection by sending
+ * the next doOutput request as soon as we've processed the previous
+ * one, such that data generated by the previous request will keep the
+ * writer busy till the next one is delivered.
+ *
+ */
+class WriteEstimate
+{
+ public:
+ WriteEstimate(size_t initial=4096);
+
+ /** About to send a doOutput request.
+ * Update estimation state and return size for next request.
+ */
+ size_t sending(size_t buffered);
+
+ /**
+ * doOutput request just delivered, not yet executed. Update the estimate.
+ * and estimate how much data to request in the next onOutput
+ * request. 0 means don't send an onOutput request.
+ */
+ void delivered(size_t sent, size_t buffered);
+
+ private:
+ bool growing;
+ size_t estimate;
+};
+
+}} // namespace qpid::cluster
+
+#endif /*!QPID_CLUSTER_WRITEESTIMATE_H*/
diff --git a/qpid/cpp/src/qpid/sys/ConnectionOutputHandler.h b/qpid/cpp/src/qpid/sys/ConnectionOutputHandler.h
index 5a60ae4998..de0bef3630 100644
--- a/qpid/cpp/src/qpid/sys/ConnectionOutputHandler.h
+++ b/qpid/cpp/src/qpid/sys/ConnectionOutputHandler.h
@@ -34,6 +34,7 @@ class ConnectionOutputHandler : public virtual qpid::framing::OutputHandler, pub
{
public:
virtual void close() = 0;
+ virtual size_t getBuffered() const { return 0; }
};
}}
diff --git a/qpid/cpp/src/qpid/sys/ConnectionOutputHandlerPtr.h b/qpid/cpp/src/qpid/sys/ConnectionOutputHandlerPtr.h
new file mode 100644
index 0000000000..c2da8edc2c
--- /dev/null
+++ b/qpid/cpp/src/qpid/sys/ConnectionOutputHandlerPtr.h
@@ -0,0 +1,54 @@
+#ifndef QPID_SYS_CONNECTIONOUTPUTHANDLERPTR_H
+#define QPID_SYS_CONNECTIONOUTPUTHANDLERPTR_H
+
+/*
+ *
+ * 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 "ConnectionOutputHandler.h"
+
+namespace qpid {
+namespace sys {
+
+/**
+ * A ConnectionOutputHandler that delegates to another
+ * ConnectionOutputHandler. Allows the "real" ConnectionOutputHandler
+ * to be changed modified without updating all the pointers/references
+ * using the ConnectionOutputHandlerPtr
+ */
+class ConnectionOutputHandlerPtr : public ConnectionOutputHandler
+{
+ public:
+ ConnectionOutputHandlerPtr(ConnectionOutputHandler* p) : next(p) {}
+ void set(ConnectionOutputHandler* p) { next = p; }
+ ConnectionOutputHandler* get() { return next; }
+ const ConnectionOutputHandler* get() const { return next; }
+
+ void close() { next->close(); }
+ size_t getBuffered() const { return next->getBuffered(); }
+ void activateOutput() { next->activateOutput(); }
+ void send(framing::AMQFrame& f) { next->send(f); }
+
+ private:
+ ConnectionOutputHandler* next;
+};
+}} // namespace qpid::sys
+
+#endif /*!QPID_SYS_CONNECTIONOUTPUTHANDLERPTR_H*/
diff --git a/qpid/cpp/src/tests/cluster_test.cpp b/qpid/cpp/src/tests/cluster_test.cpp
index 49c5264990..8f3927732d 100644
--- a/qpid/cpp/src/tests/cluster_test.cpp
+++ b/qpid/cpp/src/tests/cluster_test.cpp
@@ -78,7 +78,7 @@ ClusterFixture::ClusterFixture(size_t n) : name(Uuid(true).str()) {
::sleep(1);
--retry;
}
- BOOST_CHECK_EQUAL(n, getGlobalCluster()->size());
+ BOOST_REQUIRE_EQUAL(n, getGlobalCluster()->size());
}
void ClusterFixture::add() {
diff --git a/qpid/cpp/src/tests/consume.cpp b/qpid/cpp/src/tests/consume.cpp
index fecf6bb315..c20a738755 100644
--- a/qpid/cpp/src/tests/consume.cpp
+++ b/qpid/cpp/src/tests/consume.cpp
@@ -42,13 +42,15 @@ struct Args : public qpid::TestOptions {
uint count;
uint ack;
string queue;
-
+ bool declare;
+
Args() : count(0), ack(1)
{
addOptions()
("count", optValue(count, "N"), "number of messages to publish")
("ack-frequency", optValue(ack, "N"), "ack every N messages (0 means use no-ack mode)")
- ("queue", optValue(queue, "<queue name>"), "queue to consume from");
+ ("queue", optValue(queue, "<queue name>"), "queue to consume from")
+ ("declare", optValue(declare), "declare the queue");
}
};
@@ -67,7 +69,8 @@ struct Client
void consume()
{
-
+ if (opts.declare)
+ session.queueDeclare(opts.queue);
SubscriptionManager subs(session);
LocalQueue lq(AckPolicy(opts.ack));
subs.setAcceptMode(opts.ack > 0 ? 0 : 1);
@@ -77,7 +80,7 @@ struct Client
Message msg;
for (size_t i = 0; i < opts.count; ++i) {
msg=lq.pop();
- std::cout << "Received: " << msg.getMessageProperties().getCorrelationId() << std::endl;
+ QPID_LOG(info, "Received: " << msg.getMessageProperties().getCorrelationId());
}
if (opts.ack != 0)
subs.getAckPolicy().ackOutstanding(session); // Cumulative ack for final batch.
diff --git a/qpid/cpp/src/tests/latencytest.cpp b/qpid/cpp/src/tests/latencytest.cpp
index e1a6f156a5..6c3fdd23bd 100644
--- a/qpid/cpp/src/tests/latencytest.cpp
+++ b/qpid/cpp/src/tests/latencytest.cpp
@@ -44,6 +44,7 @@ struct Args : public qpid::TestOptions {
uint size;
uint count;
uint rate;
+ bool sync;
uint reportFrequency;
uint timeLimit;
uint queues;
@@ -65,6 +66,7 @@ struct Args : public qpid::TestOptions {
("queues", optValue(queues, "N"), "number of queues")
("count", optValue(count, "N"), "number of messages to send")
("rate", optValue(rate, "N"), "target message rate (causes count to be ignored)")
+ ("sync", optValue(sync), "send messages synchronously")
("report-frequency", optValue(reportFrequency, "N"),
"number of milliseconds to wait between reports (ignored unless rate specified)")
("time-limit", optValue(timeLimit, "N"),
@@ -143,6 +145,7 @@ class Sender : public Client
void sendByRate();
void sendByCount();
Receiver& receiver;
+ const string data;
public:
Sender(const string& queue, Receiver& receiver);
void test();
@@ -285,7 +288,7 @@ void Stats::reset()
totalLatency = maxLatency = minLatency = 0;
}
-Sender::Sender(const string& q, Receiver& receiver) : Client(q), receiver(receiver) {}
+Sender::Sender(const string& q, Receiver& receiver) : Client(q), receiver(receiver), data(generateData(opts.size)) {}
void Sender::test()
{
@@ -295,7 +298,7 @@ void Sender::test()
void Sender::sendByCount()
{
- Message msg(generateData(opts.size), queue);
+ Message msg(data, queue);
if (opts.durable) {
msg.getDeliveryProperties().setDeliveryMode(framing::PERSISTENT);
}
@@ -303,15 +306,15 @@ void Sender::sendByCount()
for (uint i = 0; i < opts.count; i++) {
uint64_t sentAt(current_time());
msg.getDeliveryProperties().setTimestamp(sentAt);
- //msg.getHeaders().setTimestamp("sent-at", sentAt);//TODO add support for uint64_t to field tables
async(session).messageTransfer(arg::content=msg, arg::acceptMode=1);
+ if (opts.sync) session.sync();
}
session.sync();
}
void Sender::sendByRate()
{
- Message msg(generateData(opts.size), queue);
+ Message msg(data, queue);
if (opts.durable) {
msg.getDeliveryProperties().setDeliveryMode(framing::PERSISTENT);
}
@@ -324,9 +327,9 @@ void Sender::sendByRate()
while (true) {
uint64_t start_msg(current_time());
msg.getDeliveryProperties().setTimestamp(start_msg);
- //msg.getHeaders().setTimestamp("sent-at", sentAt);//TODO add support for uint64_t to field tables
async(session).messageTransfer(arg::content=msg, arg::acceptMode=1);
-
+ if (opts.sync) session.sync();
+
uint64_t now = current_time();
if (timeLimit != 0 && (now - start) > timeLimit) {
diff --git a/qpid/cpp/src/tests/start_cluster b/qpid/cpp/src/tests/start_cluster
index 55f989a3e9..6d254190df 100755
--- a/qpid/cpp/src/tests/start_cluster
+++ b/qpid/cpp/src/tests/start_cluster
@@ -16,7 +16,7 @@ OPTS="-d --load-module ../.libs/libqpidcluster.so --cluster-name=$CLUSTER --no-
if test "$SIZE" = "one"; then # Special case of singleton cluster, use default port.
../qpidd -q
- with_ais_group ../qpidd $OPTS || exit 1
+ with_ais_group ../qpidd $OPTS --log-output=cluster.log || exit 1
else
for (( i=0; i<SIZE; ++i )); do
PORT=`with_ais_group ../qpidd -p0 --log-output=cluster$i.log $OPTS` || exit 1
diff --git a/qpid/cpp/xml/cluster.xml b/qpid/cpp/xml/cluster.xml
index 6dfb4d14c3..8d6b5a241e 100644
--- a/qpid/cpp/xml/cluster.xml
+++ b/qpid/cpp/xml/cluster.xml
@@ -26,12 +26,18 @@
<doc>Qpid extension class to allow clustered brokers to communicate.</doc>
<control name = "notify" code="0x1">
+ <role name="server" implement="MUST" />
<field name="url" type="str16" />
</control>
- <control name="connection-close" code="0x2"/>
+ <control name="connection-close" code="0x2">
+ <role name="server" implement="MUST" />
+ </control>
- <control name="connection-do-output" code="0x3"/>
+ <control name="connection-do-output" code="0x3">
+ <role name="server" implement="MUST" />
+ <field name="bytes" type="uint32"/>
+ </control>
</class>
</amqp>
diff --git a/qpid/java/010ExcludeList b/qpid/java/010ExcludeList
index 00d84548e2..8e7f8d253c 100644
--- a/qpid/java/010ExcludeList
+++ b/qpid/java/010ExcludeList
@@ -65,4 +65,6 @@ org.apache.qpid.test.unit.client.connection.ConnectionTest#testPasswordFailureCo
org.apache.qpid.test.unit.topic.TopicSessionTest#testNonMatchingMessagesDoNotFillQueue
// QPID-1225 : Temporary remove this test until the problem has been addressed
org.apache.qpid.server.security.acl.SimpleACLTest#testClientPublishInvalidQueueSuccess
+// InVM Broker tests
+org.apache.qpid.test.client.timeouts.SyncWaitDelayTest#*
diff --git a/qpid/java/010ExcludeList-noPrefetch b/qpid/java/010ExcludeList-noPrefetch
index 08b93d115f..102b874da2 100644
--- a/qpid/java/010ExcludeList-noPrefetch
+++ b/qpid/java/010ExcludeList-noPrefetch
@@ -55,3 +55,5 @@ org.apache.qpid.test.unit.topic.TopicSessionTest#testNonMatchingMessagesDoNotFil
// QPID-1225 : Temporary remove this test until the problem has been addressed
org.apache.qpid.server.security.acl.SimpleACLTest#testClientPublishInvalidQueueSuccess
+// InVM Broker tests
+org.apache.qpid.test.client.timeouts.SyncWaitDelayTest#*
diff --git a/qpid/java/010ExcludeList-store b/qpid/java/010ExcludeList-store
index 7a351761ad..d8bb289992 100644
--- a/qpid/java/010ExcludeList-store
+++ b/qpid/java/010ExcludeList-store
@@ -58,3 +58,5 @@ org.apache.qpid.test.unit.topic.TopicSessionTest#testNonMatchingMessagesDoNotFil
// QPID-1225 : Temporary remove this test until the problem has been addressed
org.apache.qpid.server.security.acl.SimpleACLTest#testClientPublishInvalidQueueSuccess
+// InVM Broker tests
+org.apache.qpid.test.client.timeouts.SyncWaitDelayTest#*
diff --git a/qpid/java/08ExcludeList-nonvm b/qpid/java/08ExcludeList-nonvm
index d35fa1e3da..52250db44e 100644
--- a/qpid/java/08ExcludeList-nonvm
+++ b/qpid/java/08ExcludeList-nonvm
@@ -25,3 +25,6 @@ org.apache.qpid.test.client.failover.FailoverTest#*
// QPID-1225 : Temporary remove this test until the problem has been addressed
org.apache.qpid.server.security.acl.SimpleACLTest#testClientPublishInvalidQueueSuccess
+// InVM Broker tests
+org.apache.qpid.test.client.timeouts.SyncWaitDelayTest#*
+
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/AccessRequestHandler.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/AccessRequestHandler.java
index c13a69b793..e64eaeae76 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/AccessRequestHandler.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/AccessRequestHandler.java
@@ -1,4 +1,25 @@
package org.apache.qpid.server.handler;
+/*
+ *
+ * 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.
+ *
+ */
+
import org.apache.qpid.framing.*;
import org.apache.qpid.server.state.StateAwareMethodListener;
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicRecoverSyncMethodHandler.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicRecoverSyncMethodHandler.java
index 15484273c8..2c264c3d45 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicRecoverSyncMethodHandler.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicRecoverSyncMethodHandler.java
@@ -1,4 +1,25 @@
package org.apache.qpid.server.handler;
+/*
+ *
+ * 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.
+ *
+ */
+
import org.apache.log4j.Logger;
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueUnbindHandler.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueUnbindHandler.java
index d73e33d6c8..6331a0365d 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueUnbindHandler.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueUnbindHandler.java
@@ -1,4 +1,25 @@
package org.apache.qpid.server.handler;
+/*
+ *
+ * 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.
+ *
+ */
+
import org.apache.log4j.Logger;
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_9/ProtocolOutputConverterImpl.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_9/ProtocolOutputConverterImpl.java
index c76c262edd..65184fe744 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_9/ProtocolOutputConverterImpl.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_9/ProtocolOutputConverterImpl.java
@@ -1,4 +1,25 @@
package org.apache.qpid.server.output.amqp0_9;
+/*
+ *
+ * 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.
+ *
+ */
+
import org.apache.mina.common.ByteBuffer;
diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTest.java
index aa6ee6ff12..8cb57b8246 100644
--- a/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTest.java
+++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/SimpleAMQQueueTest.java
@@ -1,4 +1,25 @@
package org.apache.qpid.server.queue;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.util.List;
diff --git a/qpid/java/build.xml b/qpid/java/build.xml
index 375fbbac94..4f7a26dfb2 100644
--- a/qpid/java/build.xml
+++ b/qpid/java/build.xml
@@ -33,14 +33,16 @@
<property name="qpid.jar" location="${build.lib}/qpid-incubating.jar"/>
<basename property="qpid.jar.name" file="${qpid.jar}"/>
+ <property name="resources" value="${project.root}/resources"/>
+
<map property="release.excludes" value="${modules}">
<globmapper from="*" to="*/\*\*"/>
</map>
- <property name="release.zip" location="${release}/${project.namever}.zip"/>
- <property name="release.tar" location="${release}/${project.namever}.tar"/>
- <property name="release.tgz" location="${release}/${project.namever}.tar.gz"/>
- <property name="release.bz2" location="${release}/${project.namever}.tar.bz2"/>
+ <property name="release.zip" location="${release}/${project.namever}-java.zip"/>
+ <property name="release.tar" location="${release}/${project.namever}-java.tar"/>
+ <property name="release.tgz" location="${release}/${project.namever}-java.tar.gz"/>
+ <property name="release.bz2" location="${release}/${project.namever}-java.tar.bz2"/>
<macrodef name="iterate">
<attribute name="target"/>
@@ -116,6 +118,7 @@
<manifest>
<attribute name="Class-Path" value="${qpid.jar.classpath}"/>
</manifest>
+ <metainf dir="${project.root}/resources/"/>
</jar>
<touch file="${qpid.jar}"/>
@@ -144,7 +147,14 @@
<zipfileset dir="${build}" prefix="${project.namever}" excludes="${release.excludes}" filemode="644" dirmode="755">
<exclude name="bin/**"/>
<exclude name="**/*.class"/>
+ <exclude name="broker/**"/>
+ <exclude name="common/**"/>
+ <exclude name="client/**"/>
+ <exclude name="perftests/**"/>
+ <exclude name="systests/**"/>
</zipfileset>
+
+ <zipfileset dir="${resources}" prefix="${project.namever}" filemode="644"/>
</zip>
</target>
diff --git a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/DeclareQueue.java b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/DeclareQueue.java
index b16a7fa7c3..b7982f8e78 100755
--- a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/DeclareQueue.java
+++ b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/DeclareQueue.java
@@ -1,4 +1,25 @@
package org.apache.qpid.example.amqpexample.direct;
+/*
+ *
+ * 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.
+ *
+ */
+
import org.apache.qpid.nclient.Client;
import org.apache.qpid.nclient.Connection;
diff --git a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/DirectProducer.java b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/DirectProducer.java
index 2793e567ea..ba4aec4024 100755
--- a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/DirectProducer.java
+++ b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/DirectProducer.java
@@ -1,4 +1,25 @@
package org.apache.qpid.example.amqpexample.direct;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.nio.ByteBuffer;
diff --git a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/Listener.java b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/Listener.java
index 081fbf2521..7fed35872d 100755
--- a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/Listener.java
+++ b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/direct/Listener.java
@@ -1,4 +1,25 @@
package org.apache.qpid.example.amqpexample.direct;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.nio.ByteBuffer;
diff --git a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/DeclareQueue.java b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/DeclareQueue.java
index 9af5f21e66..75f274bcbb 100755
--- a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/DeclareQueue.java
+++ b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/DeclareQueue.java
@@ -1,4 +1,25 @@
package org.apache.qpid.example.amqpexample.fanout;
+/*
+ *
+ * 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.
+ *
+ */
+
import org.apache.qpid.nclient.Client;
import org.apache.qpid.nclient.Connection;
diff --git a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/FannoutProducer.java b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/FannoutProducer.java
index 41038d3e53..a1ec0b7f29 100755
--- a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/FannoutProducer.java
+++ b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/FannoutProducer.java
@@ -1,4 +1,25 @@
package org.apache.qpid.example.amqpexample.fanout;
+/*
+ *
+ * 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.
+ *
+ */
+
import org.apache.qpid.nclient.Client;
import org.apache.qpid.nclient.Connection;
diff --git a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/Listener.java b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/Listener.java
index 7942ce5ca3..432dd7eb4f 100755
--- a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/Listener.java
+++ b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/fanout/Listener.java
@@ -1,4 +1,25 @@
package org.apache.qpid.example.amqpexample.fanout;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.nio.ByteBuffer;
diff --git a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/pubsub/TopicListener.java b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/pubsub/TopicListener.java
index 2e4edfbe6f..70c08e0d02 100755
--- a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/pubsub/TopicListener.java
+++ b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/pubsub/TopicListener.java
@@ -1,4 +1,25 @@
package org.apache.qpid.example.amqpexample.pubsub;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.nio.ByteBuffer;
diff --git a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/pubsub/TopicPublisher.java b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/pubsub/TopicPublisher.java
index caec886642..3067309555 100755
--- a/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/pubsub/TopicPublisher.java
+++ b/qpid/java/client/example/src/main/java/org/apache/qpid/example/amqpexample/pubsub/TopicPublisher.java
@@ -1,4 +1,25 @@
package org.apache.qpid.example.amqpexample.pubsub;
+/*
+ *
+ * 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.
+ *
+ */
+
import org.apache.qpid.nclient.Client;
import org.apache.qpid.nclient.Connection;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
index a2df2f3cf2..c723709d27 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnectionDelegate_0_10.java
@@ -1,4 +1,25 @@
package org.apache.qpid.client;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.io.IOException;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/handler/AccessRequestOkMethodHandler.java b/qpid/java/client/src/main/java/org/apache/qpid/client/handler/AccessRequestOkMethodHandler.java
index 365fed6aa5..af47673a43 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/handler/AccessRequestOkMethodHandler.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/handler/AccessRequestOkMethodHandler.java
@@ -1,4 +1,25 @@
package org.apache.qpid.client.handler;
+/*
+ *
+ * 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.
+ *
+ */
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/FiledTableSupport.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/FiledTableSupport.java
index 3db628017f..5b8a4ce878 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/FiledTableSupport.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/FiledTableSupport.java
@@ -1,4 +1,25 @@
package org.apache.qpid.client.message;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.util.Enumeration;
import java.util.HashMap;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/message/ReturnMessage.java b/qpid/java/client/src/main/java/org/apache/qpid/client/message/ReturnMessage.java
index ed590772d9..6e5f33a65c 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/message/ReturnMessage.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/message/ReturnMessage.java
@@ -1,4 +1,25 @@
package org.apache.qpid.client.message;
+/*
+ *
+ * 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.
+ *
+ */
+
import org.apache.qpid.framing.AMQShortString;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQIoTransportProtocolSession.java b/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQIoTransportProtocolSession.java
index 1de0e7bdfc..f2aca58deb 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQIoTransportProtocolSession.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQIoTransportProtocolSession.java
@@ -1,4 +1,25 @@
package org.apache.qpid.client.protocol;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.util.UUID;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java b/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
index 25439aba94..6e886f25a8 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
@@ -162,7 +162,7 @@ public class AMQProtocolHandler extends IoHandlerAdapter
private FailoverException _lastFailoverException;
/** Defines the default timeout to use for synchronous protocol commands. */
- private final long DEFAULT_SYNC_TIMEOUT = 1000 * 30;
+ private final long DEFAULT_SYNC_TIMEOUT = Long.getLong("amqj.default_syncwrite_timeout", 1000 * 30);
/**
* Creates a new protocol handler, associated with the specified client connection instance.
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/url/URLParser.java b/qpid/java/client/src/main/java/org/apache/qpid/client/url/URLParser.java
index b975713ad7..fab95f754c 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/url/URLParser.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/url/URLParser.java
@@ -1,4 +1,25 @@
package org.apache.qpid.client.url;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.net.URI;
import java.net.URISyntaxException;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/jms/TopicSubscriber.java b/qpid/java/client/src/main/java/org/apache/qpid/jms/TopicSubscriber.java
index 80cfa18ec1..1dbe464230 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/jms/TopicSubscriber.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/jms/TopicSubscriber.java
@@ -1,4 +1,25 @@
package org.apache.qpid.jms;
+/*
+ *
+ * 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.
+ *
+ */
+
import org.apache.qpid.AMQException;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/ClientSession.java b/qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/ClientSession.java
index 27805a1f39..869f974ae6 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/ClientSession.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/ClientSession.java
@@ -1,4 +1,25 @@
package org.apache.qpid.nclient.impl;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.io.EOFException;
import java.io.IOException;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/ClientSessionDelegate.java b/qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/ClientSessionDelegate.java
index 620cf14c33..6bcd4fbce5 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/ClientSessionDelegate.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/ClientSessionDelegate.java
@@ -1,4 +1,25 @@
package org.apache.qpid.nclient.impl;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.nio.ByteBuffer;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/DemoClient.java b/qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/DemoClient.java
index 88b5dc6392..155de2a678 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/DemoClient.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/nclient/impl/DemoClient.java
@@ -1,4 +1,25 @@
package org.apache.qpid.nclient.impl;
+/*
+ *
+ * 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.
+ *
+ */
+
import org.apache.qpid.ErrorCode;
import org.apache.qpid.api.Message;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/nclient/interop/BasicInteropTest.java b/qpid/java/client/src/main/java/org/apache/qpid/nclient/interop/BasicInteropTest.java
index 9ea9297e14..dd4a78fa2b 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/nclient/interop/BasicInteropTest.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/nclient/interop/BasicInteropTest.java
@@ -1,4 +1,25 @@
package org.apache.qpid.nclient.interop;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.nio.ByteBuffer;
import java.util.HashMap;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/ByteBufferMessage.java b/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/ByteBufferMessage.java
index 64c89c960c..14bfb4f95e 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/ByteBufferMessage.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/ByteBufferMessage.java
@@ -1,4 +1,25 @@
package org.apache.qpid.nclient.util;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.io.IOException;
import java.nio.ByteBuffer;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/FileMessage.java b/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/FileMessage.java
index 179c91c2e9..6727b41929 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/FileMessage.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/FileMessage.java
@@ -1,4 +1,25 @@
package org.apache.qpid.nclient.util;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.io.EOFException;
import java.io.FileInputStream;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/MessagePartListenerAdapter.java b/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/MessagePartListenerAdapter.java
index 0e54e04a99..10fd8d2a80 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/MessagePartListenerAdapter.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/MessagePartListenerAdapter.java
@@ -1,4 +1,25 @@
package org.apache.qpid.nclient.util;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.io.IOException;
import java.nio.ByteBuffer;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/ReadOnlyMessage.java b/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/ReadOnlyMessage.java
index 6583a95c7e..478e3e4a56 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/ReadOnlyMessage.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/ReadOnlyMessage.java
@@ -1,4 +1,25 @@
package org.apache.qpid.nclient.util;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.nio.ByteBuffer;
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/StreamingMessage.java b/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/StreamingMessage.java
index a4574438ac..54fa67ebc5 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/StreamingMessage.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/nclient/util/StreamingMessage.java
@@ -1,4 +1,25 @@
package org.apache.qpid.nclient.util;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.io.EOFException;
import java.io.IOException;
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/ErrorCode.java b/qpid/java/common/src/main/java/org/apache/qpid/ErrorCode.java
index be1ad16dd5..0549869e71 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/ErrorCode.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/ErrorCode.java
@@ -1,4 +1,25 @@
package org.apache.qpid;
+/*
+ *
+ * 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.
+ *
+ */
+
public enum ErrorCode
{
@@ -99,4 +120,4 @@ public enum ErrorCode
An invalid or illegal argument was passed to a method, and the operation could not proceed.
</doc>
</constant>
-*/ \ No newline at end of file
+*/
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/QpidConfig.java b/qpid/java/common/src/main/java/org/apache/qpid/QpidConfig.java
index e8d42fdf83..9c8019f109 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/QpidConfig.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/QpidConfig.java
@@ -1,4 +1,25 @@
package org.apache.qpid;
+/*
+ *
+ * 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.
+ *
+ */
+
/**
* API to configure the Security parameters of the client.
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/SerialException.java b/qpid/java/common/src/main/java/org/apache/qpid/SerialException.java
index 4fc8458e45..c59a6af779 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/SerialException.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/SerialException.java
@@ -1,4 +1,25 @@
package org.apache.qpid;
+/*
+ *
+ * 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.
+ *
+ */
+
/**
* This exception is used by the serial class (imp RFC 1982)
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/ToyExchange.java b/qpid/java/common/src/main/java/org/apache/qpid/ToyExchange.java
index c638679596..da6aed9629 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/ToyExchange.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/ToyExchange.java
@@ -1,4 +1,25 @@
package org.apache.qpid;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.util.ArrayList;
import java.util.HashMap;
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/InputHandler_0_9.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/InputHandler_0_9.java
index b63020913b..ecc5f6d07c 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/InputHandler_0_9.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/InputHandler_0_9.java
@@ -1,4 +1,25 @@
package org.apache.qpid.transport.network.io;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.nio.ByteBuffer;
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioHandler.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioHandler.java
index 51e41b26f7..318fe0d03b 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioHandler.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioHandler.java
@@ -1,4 +1,25 @@
package org.apache.qpid.transport.network.nio;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.io.EOFException;
import java.io.IOException;
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioSender.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioSender.java
index 33e888cc56..8792fce142 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioSender.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioSender.java
@@ -1,4 +1,25 @@
package org.apache.qpid.transport.network.nio;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java b/qpid/java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java
index 5d26e7e65b..7182348692 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java
@@ -1,4 +1,25 @@
package org.apache.qpid.url;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.net.URISyntaxException;
import java.util.ArrayList;
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/Serial.java b/qpid/java/common/src/main/java/org/apache/qpid/util/Serial.java
index 44712984c0..8ad9d00f54 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/util/Serial.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/util/Serial.java
@@ -1,4 +1,25 @@
package org.apache.qpid.util;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.util.Comparator;
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/AlreadyUnblockedException.java b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/AlreadyUnblockedException.java
index ef43d1c8a8..e0c0337898 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/AlreadyUnblockedException.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/AlreadyUnblockedException.java
@@ -1,4 +1,25 @@
package org.apache.qpid.util.concurrent;
+/*
+ *
+ * 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.
+ *
+ */
+
/**
* Used to signal that a data element and its producer cannot be requeued or sent an error message when using a
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueue.java b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueue.java
index 261eecb561..63d8f77edb 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueue.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueue.java
@@ -1,4 +1,25 @@
package org.apache.qpid.util.concurrent;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.util.Collection;
import java.util.concurrent.BlockingQueue;
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueueBase.java b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueueBase.java
index d1c1abd285..4564b1d686 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueueBase.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueueBase.java
@@ -1,4 +1,25 @@
package org.apache.qpid.util.concurrent;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.util.*;
import java.util.concurrent.TimeUnit;
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BooleanLatch.java b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BooleanLatch.java
index 391ca686c9..0e4a07594f 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BooleanLatch.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/BooleanLatch.java
@@ -1,4 +1,25 @@
package org.apache.qpid.util.concurrent;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.util.concurrent.locks.AbstractQueuedSynchronizer;
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/Capacity.java b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/Capacity.java
index e317c84971..a97ce0e172 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/Capacity.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/Capacity.java
@@ -1,4 +1,25 @@
package org.apache.qpid.util.concurrent;
+/*
+ *
+ * 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.
+ *
+ */
+
/**
* An interface exposed by data structures that have a maximum capacity.
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchBuffer.java b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchBuffer.java
index 49020803d7..bc63eb0353 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchBuffer.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchBuffer.java
@@ -1,4 +1,25 @@
package org.apache.qpid.util.concurrent;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.util.Queue;
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchException.java b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchException.java
index 77b60f2b72..99a83f96cd 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchException.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchException.java
@@ -1,4 +1,25 @@
package org.apache.qpid.util.concurrent;
+/*
+ *
+ * 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.
+ *
+ */
+
/**
* SynchException is used to encapsulate exceptions with the data elements that caused them in order to send exceptions
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchQueue.java b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchQueue.java
index 9d15c211f6..95833f398a 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchQueue.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchQueue.java
@@ -1,4 +1,25 @@
package org.apache.qpid.util.concurrent;
+/*
+ *
+ * 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.
+ *
+ */
+
import java.util.LinkedList;
import java.util.Queue;
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRecord.java b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRecord.java
index 5e002100c2..fd740c20cd 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRecord.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRecord.java
@@ -1,4 +1,25 @@
package org.apache.qpid.util.concurrent;
+/*
+ *
+ * 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.
+ *
+ */
+
/**
* SynchRecord associates a data item from a {@link BatchSynchQueue} with its producer. This enables the data item data
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRef.java b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRef.java
index a75f7b766d..efe2344c06 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRef.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRef.java
@@ -1,4 +1,25 @@
package org.apache.qpid.util.concurrent;
+/*
+ *
+ * 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.
+ *
+ */
+
/**
* A SynchRef is an interface which is returned from the synchronous take and drain methods of {@link BatchSynchQueue},
diff --git a/qpid/java/common/src/test/java/org/apache/qpid/util/SerialTest.java b/qpid/java/common/src/test/java/org/apache/qpid/util/SerialTest.java
index d3ab817b5d..b2578563e0 100644
--- a/qpid/java/common/src/test/java/org/apache/qpid/util/SerialTest.java
+++ b/qpid/java/common/src/test/java/org/apache/qpid/util/SerialTest.java
@@ -1,4 +1,25 @@
package org.apache.qpid.util;
+/*
+ *
+ * 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.
+ *
+ */
+
import junit.framework.TestCase;
diff --git a/qpid/java/module.xml b/qpid/java/module.xml
index 50b68ee633..cdc260399c 100644
--- a/qpid/java/module.xml
+++ b/qpid/java/module.xml
@@ -279,7 +279,9 @@
</target>
<target name="jar.nomanifest" depends="compile" unless="module.manifest">
- <jar destfile="${module.jar}" basedir="${module.classes}"/>
+ <jar destfile="${module.jar}" basedir="${module.classes}">
+ <metainf dir="${project.root}/resources/" />
+ </jar>
</target>
<target name="jar" depends="jar.manifest,jar.nomanifest" description="create jar"/>
diff --git a/qpid/java/release-docs/RELEASE_NOTES.txt b/qpid/java/release-docs/RELEASE_NOTES.txt
index 1004ec62b4..cdddbc4254 100644
--- a/qpid/java/release-docs/RELEASE_NOTES.txt
+++ b/qpid/java/release-docs/RELEASE_NOTES.txt
@@ -1,105 +1,47 @@
-Apache Incubator Qpid Java M2 Release Notes
+Apache Qpid Incubating Java M3 Release Notes
-------------------------------------------
-The Qpid M2 release contains support the for AMQP 0-8 specification.
-You can access the 0-8 specification using the following link.
+The Qpid M3 release contains support for AMQP 0-8, 0-9 and 0-10. You
+can access the specifications from
http://www.amqp.org/tikiwiki/tiki-index.php?page=Download
-For full details of Qpid capabilities, as they currently stand, see our
-detailed project documentation at:
+For full details of Apache Qpid's capabilities see our detailed
+project documentation at:
http://cwiki.apache.org/confluence/display/qpid/Qpid+Java+Documentation
From the link above you can access our Getting Started Guide, FAQ, Build How To
and detailed developer documentation.
+New features, Improvements and Bug fixes
+----------------------
-Known Issues/Outstanding Work
------------------------------
-
-You can view the outstanding task list for Qpid by visiting our JIRA:
-http://issues.apache.org/jira/browse/QPID
-
-These issues are moved to M3 release.
-
-Here is a filtered list for your convinience
----------------------------------------
-New Feature QPID-274 add connection configuratble timeout on waituntilStateHasChanged
-New Feature QPID-156 Implement persistence to disk for Qpid
-New Feature QPID-155 Add ability to configure (on/off) queue creation on demand
-New Feature QPID-43 Multiple-AMQP version support in the broker
-New Feature QPID-28 Allow user to select policy for undeliverable message handling
-New Feature QPID-27 Introduce user configurable redlivery delay
-New Feature QPID-22 Provide run scripts for clustered broker
-
-Improvement QPID-430 Message Age Alerting should not depend upon queue activity
-Improvement QPID-19 Add protocol logging capability to client and broker
-Improvement QPID-11 Move protocol literals from code to AMQConstant
+AMQP 0-10 support (client only)
+Apache Derby persistent message store
+Transient transactional performance has greatly increased.
-Bug QPID-539 HeadersExchange doesnot correctly implement isBound
-Bug QPID-517 Broker doesn't return NO_CONSUMERS code for an immediate message, when the consumer is disconnected.
-Bug QPID-469 Redelivered information is currently recorded per message it should be per message per queue.
-Bug QPID-463 Java client doesn't close connection gracefully when faced with broker with unsuported protocol version
-Bug QPID-462 Exclusive queues and with subscription that 'filtersMessages' will build up messages it doesn't hasInterest() in.
+A full list can be found:
+http://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12312117&styleName=Text&projectId=12310520
-Bug QPID-397 Client closeure can be processed before final message ack.
-Bug QPID-396 Broker OutOfMemory Error handling
-Bug QPID-377 NumberFormatException thrown by broker when running one performance test
-Bug QPID-293 setting MessageListener after connection has started can cause messages to be "lost" on a internal delivery queue.
-
-Bug QPID-185 Amend Java Broker handling of ifUnused & ifEmpty flags
-Bug QPID-168 qpid-server.bat needs updated to support same arguments/features as qpid-server (via qpid-run) bash script
-
-
-M2 Tasks Completed
--------------------
-
-The set of JIRA tasks completed as part of the M2 effort is available at:
-https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310520&styleName=Html&version=12312116
+Known Issues/Outstanding Work
+-----------------------------
-Here is a filtered (by Java components) version of the JIRA items
+QPID-959: Fail over between a 0-9 and a 0-10 broker is not supported.
-Task QPID-190 refactoring the java broker mbean classes
-Task QPID-125 Moving eclipse plugin for broker management to Maven
-Task QPID-93 Delete the old management modules (trunk\qpid\java\management)
+QPID-1190: A "protocol not supported" exception is logged when a Java client
+connects to a Java broker because it initially attempts to negotiate
+AMQP 0-10.
-New Feature QPID-428 Add login functionality for a qpid server from the management console
-New Feature QPID-418 Add ability to save user preferences to Java Management Console
-New Feature QPID-170 Enhance Management features to support moving a message from one queue to another
+QPID-1251: On windows platforms the following run time exception is thrown and displayed when initiating a connection with an 0.9 broker:
+ Exception in thread "IoReceiver - localhost/localhost:5672"
+ java.lang.RuntimeException: connection closed
-Improvement QPID-482 [Java] Small performance tweaks
-Improvement QPID-466 Create STRICT_AMQP System property to disable JMS extensions in Java client
-Improvement QPID-453 AMQShortString should implement Comparable
-Improvement QPID-422 Consolidate notification view to display all user configured notifications on one view
-Improvement QPID-421 Provide enumerated description for static constants including delivery mode
-Improvement QPID-420 Add client id to information displayed about connections on management console
-Improvement QPID-419 Introduce read-only and modify authorisation for all objects in a virtual host
-Improvement QPID-129 improving Broker MBeans
+ Moreover, when closing JMS connections the JMS exception listener may
+ receive the following JMS exception:
-Bug QPID-540 Transient Broker throws NullPointerException and locks up.
-Bug QPID-538 [Memory Leak] Connecting lots of consumers causes the broker memory to leak
-Bug QPID-537 Make AMQMessage.incrementReference public
-Bug QPID-531 [Memory Leak] Broker retains messages that are consumed with NO_ACK
-Bug QPID-527 encoding issue
-Bug QPID-508 [Memory Leak] Broker does not return mandatory messages sent outside of a transaction.
-Bug QPID-476 AMQProtocolSession channelId2SessionMap does not have sessions removed
-Bug QPID-472 Creation of TemporaryQueues will not guarantee unqiue queue names if created rapidly.
-Bug QPID-471 UserManagement panel lists all users but only after a View Users has been executed and is not updated on Create/Delete User
+ javax.jms.JMSException: connection was closed at
+ org.apache.qpid.client.AMQConnectionDelegate_0_10.onClosed(AMQConnectionDelegate_0_10.java:164)
-Bug QPID-467 Complete Interop Testing
-Bug QPID-465 Incorrect Exception thrown from send() method.
-Bug QPID-459 Broker doesn't correctly handle noLocal consumers when messages are pre-exisiting on queues.
-Bug QPID-458 Queue Browsing Broken
-Bug QPID-454 Message 'taken' notion is per message. But should be per message per queue
-Bug QPID-443 Abruptly disconnecting client on transaction publish causes error
-Bug QPID-440 Can create dangling transactions on unroutable messages.
-Bug QPID-436 topic exchange doesn't obey the mandatory flag
-Bug QPID-414 Authentication requires plain text passwords in password file
-Bug QPID-408 Queue Depth data incorrect
-Bug QPID-290 Java broker does not honor maximum number of channels threshold
-Bug QPID-276 Potential race condition in AMQChannel
-Bug QPID-200 set/get Destination not implemented in JMSMessage impl
-Bug QPID-166 Check for pre conditions to satisfy JMS spec requirments
-Bug QPID-162 over 600 warnings when building under Eclipse
-Bug QPID-159 The following Interface implementations do not throw Exceptions as required by the spec
+You can view the outstanding task list for Qpid by visiting our JIRA:
+http://issues.apache.org/jira/browse/QPID
diff --git a/qpid/java/resources/DISCLAIMER b/qpid/java/resources/DISCLAIMER
index c321113c9e..024d7c2679 100644
--- a/qpid/java/resources/DISCLAIMER
+++ b/qpid/java/resources/DISCLAIMER
@@ -1,5 +1,11 @@
-Apache Qpid is an effort undergoing incubation at the Apache Software Foundation (ASF), sponsored by the Apache Incubator PMC.
+Apache Qpid is an effort undergoing incubation at the Apache Software
+Foundation (ASF), sponsored by the Apache Incubator PMC.
-Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects.
+Incubation is required of all newly accepted projects until a further
+review indicates that the infrastructure, communications, and decision
+making process have stabilized in a manner consistent with other
+successful ASF projects.
-While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
+While incubation status is not necessarily a reflection of the
+completeness or stability of the code, it does indicate that the
+project has yet to be fully endorsed by the ASF.
diff --git a/qpid/java/resources/LICENSE.txt b/qpid/java/resources/LICENSE.txt
deleted file mode 100755
index 6b0b1270ff..0000000000
--- a/qpid/java/resources/LICENSE.txt
+++ /dev/null
@@ -1,203 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed 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.
-
diff --git a/qpid/java/resources/META-INF/DISCLAIMER b/qpid/java/resources/META-INF/DISCLAIMER
deleted file mode 100644
index 1ca63e46e2..0000000000
--- a/qpid/java/resources/META-INF/DISCLAIMER
+++ /dev/null
@@ -1,10 +0,0 @@
-Apache Qpid is an effort undergoing incubation at the Apache Software
-Foundation (ASF), sponsored by the Apache Incubator PMC.
-
-Incubation is required of all newly accepted projects until a further review
-indicates that the infrastructure, communications, and decision making process
-have stabilized in a manner consistent with other successful ASF projects.
-
-While incubation status is not necessarily a reflection of the completeness
-or stability of the code, it does indicate that the project has yet to be
-fully endorsed by the ASF.
diff --git a/qpid/java/resources/META-INF/DISCLAIMER.txt b/qpid/java/resources/META-INF/DISCLAIMER.txt
deleted file mode 100644
index d33c54a807..0000000000
--- a/qpid/java/resources/META-INF/DISCLAIMER.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Qpid is an effort undergoing incubation at the Apache Software Foundation
-(ASF). Incubation is required of all newly accepted projects until a further
-review indicates that the infrastructure, communications, and decision making
-process have stabilized in a manner consistent with other successful ASF
-projects. While incubation status is not necessarily a reflection of the
-completeness or stability of the code, it does indicate that the project
-has yet to be fully endorsed by the ASF. \ No newline at end of file
diff --git a/qpid/java/resources/META-INF/LICENSE b/qpid/java/resources/META-INF/LICENSE
deleted file mode 100644
index 6b0b1270ff..0000000000
--- a/qpid/java/resources/META-INF/LICENSE
+++ /dev/null
@@ -1,203 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed 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.
-
diff --git a/qpid/java/resources/META-INF/NOTICE b/qpid/java/resources/META-INF/NOTICE
deleted file mode 100644
index f62ec14896..0000000000
--- a/qpid/java/resources/META-INF/NOTICE
+++ /dev/null
@@ -1,105 +0,0 @@
-// ------------------------------------------------------------------
-// NOTICE file corresponding to the section 4d of The Apache License,
-// Version 2.0, in this case for Qpid Common Utilities
-// ------------------------------------------------------------------
-
-Apache Qpid
-Copyright 2006-2007 Apache Software Foundation
-
-This product includes software developed at
-Apache Software Foundation (http://www.apache.org/)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Unnamed - relaxngDatatype:relaxngDatatype:jar:20020414 (http://sourceforge.net/projects/relaxng)
-License: BSD License (http://www.opensource.org/licenses/bsd-license.php)
-
-This product includes/uses software, Apache MINA Core API (http://directory.apache.org/projects/mina/)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Unnamed - isorelax:isorelax:jar:20020414
-License: MIT license (http://www.opensource.org/licenses/mit-license.html)
-
-This product includes/uses software, SLF4J API Module (http://www.slf4j.org),
-developed by QOS.ch (http://www.qos.ch)
-License: MIT License (http://www.slf4j.org/license.html)
-
-This product includes/uses software, Commons Collections - commons-collections:commons-collections:jar:3.1,
-developed by Apache Software Foundation (http://www.apache.org)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Commons Digester - commons-digester:commons-digester:jar:1.6
-developed by Apache Software Foundation (http://www.apache.org)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Commons CLI - commons-cli:commons-cli:jar:1.0
-Ideveloped by Apache Software Foundation (http://www.apache.org)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Unnamed - msv:msv:jar:20020414
-developed by (https://msv.dev.java.net/)
-License:
-
-This product includes/uses software, Codec (http://jakarta.apache.org/commons/codec/),
-developed by The Apache Software Foundation (http://jakarta.apache.org)
-License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Commons Logging - commons-logging:commons-logging:jar:1.0
-developed by Apache Software Foundation (http://www.apache.org)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Backport of JSR 166 (http://www.mathcs.emory.edu/dcl/util/backport-util-concurrent/),
-developed by Dawid Kurzyniec (http://www.mathcs.emory.edu/~dawidk/)
-License: Public Domain (http://creativecommons.org/licenses/publicdomain)
-
-This product includes/uses software, Commons Lang - commons-lang:commons-lang:jar:2.1
-developed by Apache Software Foundation (http://www.apache.org)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Apache MINA SSL Filter (http://directory.apache.org/subprojects/mina/mina-filter-ssl)
-developed by Apache Software Foundation (http://www.apache.org)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Unnamed - xerces:xercesImpl:jar:2.2.1
-developed by The Apache Software Foundation (http://jakarta.apache.org)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, - javax.servlet:servlet-api:jar:2.3
-
-This product includes/uses software, Xalan - xalan:xalan:jar:2.7.0
-developed by Apache Software Foundation (http://www.apache.org)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Commons Configuration (http://jakarta.apache.org/commons/),
-developed by The Apache Software Foundation (http://jakarta.apache.org)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Apache MINA Java5 Extensions (http://directory.apache.org/subprojects/mina/mina-java5)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Jaxen - jaxen:jaxen:jar:1.0-FCS
-License: Apache License (http://jaxen.org/faq.html)
-
-This product includes/uses software, BeanUtils (http://jakarta.apache.org/commons/beanutils/)
-developed by The Apache Software Foundation (http://jakarta.apache.org)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, XML Commons External Components XML APIs (http://xml.apache.org/commons/#external),
-developed by Apache Software Foundation (http://www.apache.org/)
-License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-This product includes/uses software, Commons Beanutils Core - commons-beanutils:commons-beanutils-core:jar:1.7.0
-developed by The Apache Software Foundation (http://jakarta.apache.org)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Commons Logging API - commons-logging:commons-logging-api:jar:1.0.4
-developed by The Apache Software Foundation (http://jakarta.apache.org)
-License: Apache 2.0 License (http://www.apache.org/licenses/LICENSE-2.0)
-
-This product includes/uses software, Dom4j - dom4j:dom4j:jar:1.4
-developed by MetaStuff, Ltd. (http://www.dom4j.org/)
-License: BSD License (http://www.dom4j.org/license.html)
-
-This product includes/uses software, Saxon - saxpath:saxpath:jar:1.0-FCS
-developed by Michael Kay (http://saxon.sourceforge.net/)
-License: Mozilla Public License v1.0, (http://www.opensource.org/licenses/mozilla1.0.php)
-
diff --git a/qpid/java/resources/NOTICE.txt b/qpid/java/resources/NOTICE.txt
deleted file mode 100644
index 82d3dbc632..0000000000
--- a/qpid/java/resources/NOTICE.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-=========================================================================
-== NOTICE file corresponding to the section 4 d of ==
-== the Apache License, Version 2.0, ==
-== in this case for the Apache Qpid distribution. ==
-=========================================================================
-
-This product includes software developed by the Apache Software Foundation
-(http://www.apache.org/).
-
-Please read the LICENSE.txt file present in the root directory of this
-distribution.
-
-
-Aside from contributions to the Apache Qpid project, this software also
-includes (binary only):
-
- - The SAXON XSLT Processor from Michael Kay distributed under the
- Mozilla Public License v1.0, which is available for download at
- http://saxon.sourceforge.net/
-
- - The JUnit regression testing framework written by Erich Gamma
- and Kent Beck and distributed under the Common Public License v1.0.
- JUnit is available for download at
- http://sourceforge.net/projects/junit/
-
- - The Simple Logging Facade For Java (slf4j), Copyright (c)
- 2004-2005 SLF4J.ORG, Copyright (c) 2004-2005 QOS.ch. slf4j is
- licensed under identical terms to the MIT/X11 license and
- available for download at http://www.slf4j.org/
-
- - Software from the Eclipse project. The binaries from this project are
- distributed under the Eclipse Public License and can be donwloaded
- from http://www.eclipse.org/
-
-
-
diff --git a/qpid/java/resources/README.txt b/qpid/java/resources/README.txt
deleted file mode 100644
index 1d52d487fb..0000000000
--- a/qpid/java/resources/README.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-
-Documentation
---------------
-All of our user documentation for the Qpid Java components can be accessed on our wiki at:
-
-http://cwiki.apache.org/confluence/display/qpid/Qpid+Java+Documentation
-
-This includes a Getting Started Guide and FAQ as well as detailed developer documentation.
-However, here's a VERY quick guide to running the installed Qpid broker, once you have installed it somewhere !
-
-
-Running the Broker
-------------------
-
-To run the broker, set the QPID_HOME environment variable to
-distribution directory and add $QPID_HOME/bin to your PATH. Then run
-the qpid-server shell script or qpid-server.bat batch file to start
-the broker. By default, the broker will use $QPID_HOME/etc to find
-the configuration files. You can supply a custom configuration using
-the -c argument.
-
-For example:
-
-qpid-server -c ~/etc/config.xml
-
-You can get a list of all command line arguments by using the -h argument.
-
-
-Developing
-----------
-
-In order to build Qpid you need Ant 1.6.5. Use ant -p to list the
-available targets. The default ant target, build, creates a working
-development-mode distribution in the build directory. To run the
-scripts in build/bin set QPID_HOME to the build directory and put
-${QPID_HOME}/bin on your PATH. The scripts in that directory include
-the standard ones in the distribution and a number of testing scripts.
-
-
-
diff --git a/qpid/java/systests/pom.xml b/qpid/java/systests/pom.xml
index 73c8fb7351..38e7f3bf34 100644
--- a/qpid/java/systests/pom.xml
+++ b/qpid/java/systests/pom.xml
@@ -96,6 +96,10 @@
<name>QPID_HOME</name>
<value>${basedir}/${topDirectoryLocation}/broker</value>
</property>
+ <property>
+ <name>amqj.logging.level</name>
+ <value>${amqj.logging.level}</value>
+ </property>
</systemProperties>
<excludes>
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SlowMessageStore.java b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SlowMessageStore.java
new file mode 100644
index 0000000000..232295811c
--- /dev/null
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/server/store/SlowMessageStore.java
@@ -0,0 +1,282 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.server.store;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.log4j.Logger;
+import org.apache.qpid.AMQException;
+import org.apache.qpid.framing.AMQShortString;
+import org.apache.qpid.framing.FieldTable;
+import org.apache.qpid.framing.abstraction.ContentChunk;
+import org.apache.qpid.server.virtualhost.VirtualHost;
+import org.apache.qpid.server.exchange.Exchange;
+import org.apache.qpid.server.queue.AMQQueue;
+import org.apache.qpid.server.queue.MessageMetaData;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+public class SlowMessageStore implements MessageStore
+{
+ private static final Logger _logger = Logger.getLogger(SlowMessageStore.class);
+ private static final String DELAYS = "delays";
+ private HashMap<String, Long> _preDelays = new HashMap<String, Long>();
+ private HashMap<String, Long> _postDelays = new HashMap<String, Long>();
+ private long _defaultDelay = 0L;
+ private MessageStore _realStore = new MemoryMessageStore();
+ private static final String PRE = "pre";
+ private static final String POST = "post";
+ private String DEFAULT_DELAY = "default";
+
+ public void configure(VirtualHost virtualHost, String base, Configuration config) throws Exception
+ {
+ Configuration delays = config.subset(base + "." + DELAYS);
+
+ configureDelays(delays);
+
+ String messageStoreClass = config.getString(base + ".store.class");
+
+ if (delays.containsKey(DEFAULT_DELAY))
+ {
+ _defaultDelay = delays.getLong(DEFAULT_DELAY);
+ }
+
+ if (messageStoreClass != null)
+ {
+ Class clazz = Class.forName(messageStoreClass);
+
+ Object o = clazz.newInstance();
+
+ if (!(o instanceof MessageStore))
+ {
+ throw new ClassCastException("Message store class must implement " + MessageStore.class + ". Class " + clazz +
+ " does not.");
+ }
+ _realStore = (MessageStore) o;
+ _realStore.configure(virtualHost, base + ".store", config);
+ }
+ else
+ {
+ _realStore.configure(virtualHost, base + ".store", config);
+ }
+ }
+
+ private void configureDelays(Configuration config)
+ {
+ Iterator delays = config.getKeys();
+
+ while (delays.hasNext())
+ {
+ String key = (String) delays.next();
+ if (key.endsWith(PRE))
+ {
+ _preDelays.put(key.substring(0, key.length() - PRE.length() - 1), config.getLong(key));
+ }
+ else if (key.endsWith(POST))
+ {
+ _postDelays.put(key.substring(0, key.length() - POST.length() - 1), config.getLong(key));
+ }
+ }
+ }
+
+ private void doPostDelay(String method)
+ {
+ long delay = lookupDelay(_postDelays, method);
+ doDelay(delay);
+ }
+
+ private void doPreDelay(String method)
+ {
+ long delay = lookupDelay(_preDelays, method);
+ doDelay(delay);
+ }
+
+ private long lookupDelay(HashMap<String, Long> delays, String method)
+ {
+ Long delay = delays.get(method);
+ return (delay == null) ? _defaultDelay : delay;
+ }
+
+ private void doDelay(long delay)
+ {
+ if (delay > 0)
+ {
+ try
+ {
+ Thread.sleep(delay);
+ }
+ catch (InterruptedException e)
+ {
+ _logger.warn("Interrupted : " + e);
+ }
+ }
+ }
+
+ // ***** MessageStore Interface.
+
+ public void close() throws Exception
+ {
+ doPreDelay("close");
+ _realStore.close();
+ doPostDelay("close");
+ }
+
+ public void removeMessage(StoreContext storeContext, Long messageId) throws AMQException
+ {
+ doPreDelay("removeMessage");
+ _realStore.removeMessage(storeContext, messageId);
+ doPostDelay("removeMessage");
+ }
+
+ public void createExchange(Exchange exchange) throws AMQException
+ {
+ doPreDelay("createExchange");
+ _realStore.createExchange(exchange);
+ doPostDelay("createExchange");
+ }
+
+ public void removeExchange(Exchange exchange) throws AMQException
+ {
+ doPreDelay("removeExchange");
+ _realStore.removeExchange(exchange);
+ doPostDelay("removeExchange");
+ }
+
+ public void bindQueue(Exchange exchange, AMQShortString routingKey, AMQQueue queue, FieldTable args) throws AMQException
+ {
+ doPreDelay("bindQueue");
+ _realStore.bindQueue(exchange, routingKey, queue, args);
+ doPostDelay("bindQueue");
+ }
+
+ public void unbindQueue(Exchange exchange, AMQShortString routingKey, AMQQueue queue, FieldTable args) throws AMQException
+ {
+ doPreDelay("unbindQueue");
+ _realStore.unbindQueue(exchange, routingKey, queue, args);
+ doPostDelay("unbindQueue");
+ }
+
+ public void createQueue(AMQQueue queue) throws AMQException
+ {
+ createQueue(queue, null);
+ }
+
+ public void createQueue(AMQQueue queue, FieldTable arguments) throws AMQException
+ {
+ doPreDelay("createQueue");
+ _realStore.createQueue(queue, arguments);
+ doPostDelay("createQueue");
+ }
+
+ public void removeQueue(AMQQueue queue) throws AMQException
+ {
+ doPreDelay("removeQueue");
+ _realStore.removeQueue(queue);
+ doPostDelay("removeQueue");
+ }
+
+ public void enqueueMessage(StoreContext context, AMQQueue queue, Long messageId) throws AMQException
+ {
+ doPreDelay("enqueueMessage");
+ _realStore.enqueueMessage(context, queue, messageId);
+ doPostDelay("enqueueMessage");
+ }
+
+ public void dequeueMessage(StoreContext context, AMQQueue queue, Long messageId) throws AMQException
+ {
+ doPreDelay("dequeueMessage");
+ _realStore.dequeueMessage(context, queue, messageId);
+ doPostDelay("dequeueMessage");
+ }
+
+ public void beginTran(StoreContext context) throws AMQException
+ {
+ doPreDelay("beginTran");
+ _realStore.beginTran(context);
+ doPostDelay("beginTran");
+ }
+
+ public void commitTran(StoreContext context) throws AMQException
+ {
+ doPreDelay("commitTran");
+ _realStore.commitTran(context);
+ doPostDelay("commitTran");
+ }
+
+ public void abortTran(StoreContext context) throws AMQException
+ {
+ doPreDelay("abortTran");
+ _realStore.abortTran(context);
+ doPostDelay("abortTran");
+ }
+
+ public boolean inTran(StoreContext context)
+ {
+ doPreDelay("inTran");
+ boolean b = _realStore.inTran(context);
+ doPostDelay("inTran");
+ return b;
+ }
+
+ public Long getNewMessageId()
+ {
+ doPreDelay("getNewMessageId");
+ Long l = _realStore.getNewMessageId();
+ doPostDelay("getNewMessageId");
+ return l;
+ }
+
+ public void storeContentBodyChunk(StoreContext context, Long messageId, int index, ContentChunk contentBody, boolean lastContentBody) throws AMQException
+ {
+ doPreDelay("storeContentBodyChunk");
+ _realStore.storeContentBodyChunk(context, messageId, index, contentBody, lastContentBody);
+ doPostDelay("storeContentBodyChunk");
+ }
+
+ public void storeMessageMetaData(StoreContext context, Long messageId, MessageMetaData messageMetaData) throws AMQException
+ {
+ doPreDelay("storeMessageMetaData");
+ _realStore.storeMessageMetaData(context, messageId, messageMetaData);
+ doPostDelay("storeMessageMetaData");
+ }
+
+ public MessageMetaData getMessageMetaData(StoreContext context, Long messageId) throws AMQException
+ {
+ doPreDelay("getMessageMetaData");
+ MessageMetaData mmd = _realStore.getMessageMetaData(context, messageId);
+ doPostDelay("getMessageMetaData");
+ return mmd;
+ }
+
+ public ContentChunk getContentBodyChunk(StoreContext context, Long messageId, int index) throws AMQException
+ {
+ doPreDelay("getContentBodyChunk");
+ ContentChunk c = _realStore.getContentBodyChunk(context, messageId, index);
+ doPostDelay("getContentBodyChunk");
+ return c;
+ }
+
+ public boolean isPersistent()
+ {
+ return _realStore.isPersistent();
+ }
+
+}
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/timeouts/SyncWaitDelayTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/timeouts/SyncWaitDelayTest.java
new file mode 100644
index 0000000000..f2c8a5e1f5
--- /dev/null
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/timeouts/SyncWaitDelayTest.java
@@ -0,0 +1,125 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.test.client.timeouts;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.qpid.server.registry.ConfigurationFileApplicationRegistry;
+import org.apache.qpid.server.registry.ApplicationRegistry;
+import org.apache.qpid.test.utils.QpidTestCase;
+import org.apache.qpid.client.transport.TransportConnection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jms.Connection;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Queue;
+import javax.jms.Session;
+import java.io.File;
+
+/**
+ * This tests that when the commit takes a long time(due to POST_COMMIT_DELAY) that the commit does not timeout
+ * This test must be run in conjunction with SyncWaiteTimeoutDelay or be run with POST_COMMIT_DELAY > 30s to ensure
+ * that the default value is being replaced.
+ */
+public class SyncWaitDelayTest extends QpidTestCase
+{
+ protected static final Logger _logger = LoggerFactory.getLogger(SyncWaitDelayTest.class);
+
+ final String QpidHome = System.getProperty("QPID_HOME");
+ final File _configFile = new File(QpidHome, "etc/config.xml");
+
+ private String VIRTUALHOST = "test";
+ protected long POST_COMMIT_DELAY = 1000L;
+ protected long SYNC_WRITE_TIMEOUT = POST_COMMIT_DELAY + 1000;
+
+ protected Connection _connection;
+ protected Session _session;
+ protected Queue _queue;
+ protected MessageConsumer _consumer;
+
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ stopBroker();
+ if (!_configFile.exists())
+ {
+ fail("Unable to test without config file:" + _configFile);
+ }
+
+ ConfigurationFileApplicationRegistry config = new ConfigurationFileApplicationRegistry(_configFile);
+
+ //Disable management on broker.
+ config.getConfiguration().setProperty("management.enabled", "false");
+
+ Configuration testVirtualhost = config.getConfiguration().subset("virtualhosts.virtualhost." + VIRTUALHOST);
+ testVirtualhost.setProperty("store.class", "org.apache.qpid.server.store.SlowMessageStore");
+ testVirtualhost.setProperty("store.delays.commitTran.post", POST_COMMIT_DELAY);
+
+ startBroker(1, config);
+
+ //Set the syncWrite timeout to be just larger than the delay on the commitTran.
+ setSystemProperty("amqj.default_syncwrite_timeout", String.valueOf(SYNC_WRITE_TIMEOUT));
+
+ _connection = getConnection();
+
+ //Create Queue
+ _queue = (Queue) getInitialContext().lookup("queue");
+
+ //Create Consumer
+ _session = _connection.createSession(true, Session.SESSION_TRANSACTED);
+
+ //Ensure Queue exists
+ _session.createConsumer(_queue).close();
+ }
+
+
+ public void test() throws JMSException
+ {
+ MessageProducer producer = _session.createProducer(_queue);
+
+ Message message = _session.createTextMessage("Message");
+
+ producer.send(message);
+
+ long start = System.nanoTime();
+
+ _logger.info("Calling Commit");
+
+ try
+ {
+ _session.commit();
+ long end = System.nanoTime();
+ long time = (end - start);
+ // As we are using Nano time ensure to multiply up the millis.
+ assertTrue("Commit was quickier than the delay:" + time, time > 1000000L * POST_COMMIT_DELAY);
+ assertFalse("Commit was to slower than the build in default", time > 1000000L * 1000 * 30);
+ }
+ catch (JMSException e)
+ {
+ fail(e.getMessage());
+ }
+
+ }
+
+}
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/timeouts/SyncWaitTimeoutDelayTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/timeouts/SyncWaitTimeoutDelayTest.java
new file mode 100644
index 0000000000..2b736ed392
--- /dev/null
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/timeouts/SyncWaitTimeoutDelayTest.java
@@ -0,0 +1,71 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.qpid.test.client.timeouts;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.qpid.AMQTimeoutException;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageProducer;
+
+/** This tests that when the syncWrite timeout is set that it will timeout on that time rather than the default 30s. */
+public class SyncWaitTimeoutDelayTest extends SyncWaitDelayTest
+{
+ protected static final Logger _logger = Logger.getLogger(SyncWaitTimeoutDelayTest.class);
+
+ public void setUp() throws Exception
+ {
+ POST_COMMIT_DELAY = 1000L;
+
+ //Set the syncWrite timeout to be less than the COMMIT Delay so we can validate that it is being applied
+ SYNC_WRITE_TIMEOUT = 500L;
+
+ super.setUp();
+ }
+
+ public void test() throws JMSException
+ {
+ MessageProducer producer = _session.createProducer(_queue);
+
+ Message message = _session.createTextMessage("Message");
+
+ producer.send(message);
+
+ _logger.info("Calling Commit");
+
+ long start = System.nanoTime();
+ try
+ {
+ _session.commit();
+ fail("Commit occured even though syncWait timeout is shorter than delay in commit");
+ }
+ catch (JMSException e)
+ {
+ assertTrue("Wrong exception type received.", e.getLinkedException() instanceof AMQTimeoutException);
+ assertTrue("Wrong message received on exception.", e.getMessage().startsWith("Failed to commit"));
+ // As we are using Nano time ensure to multiply up the millis.
+ assertTrue("Timeout was more than 30s default", (System.nanoTime() - start) < (1000000L * 1000 * 30));
+ }
+
+ }
+}
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java
index 65939e1fb7..74b3d5e049 100644
--- a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java
@@ -28,6 +28,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Map;
+import java.util.HashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -35,6 +36,7 @@ import org.apache.qpid.client.transport.TransportConnection;
import org.apache.qpid.client.AMQConnection;
import org.apache.qpid.client.AMQConnectionFactory;
import org.apache.qpid.server.registry.ApplicationRegistry;
+import org.apache.qpid.server.registry.ConfigurationFileApplicationRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,6 +52,8 @@ public class QpidTestCase extends TestCase
protected long RECEIVE_TIMEOUT = 1000l;
+ private Map<String, String> _setProperties = new HashMap<String, String>();
+
/**
* Some tests are excluded when the property test.excludes is set to true.
* An exclusion list is either a file (prop test.excludesfile) which contains one test name
@@ -131,6 +135,8 @@ public class QpidTestCase extends TestCase
private static final String QPID_HOME = "QPID_HOME";
+ protected int DEFAULT_VM_PORT = 1;
+
protected String _broker = System.getProperty(BROKER, VM);
private String _brokerClean = System.getProperty(BROKER_CLEAN, null);
private String _brokerVersion = System.getProperty(BROKER_VERSION, VERSION_08);
@@ -282,12 +288,26 @@ public class QpidTestCase extends TestCase
}
}
+ public void startBroker(int port, ConfigurationFileApplicationRegistry config) throws Exception
+ {
+ ApplicationRegistry.initialise(config, port);
+ startBroker(port);
+ }
+
public void startBroker() throws Exception
{
+ startBroker(0);
+ }
+
+ public void startBroker(int port) throws Exception
+ {
if (_broker.equals(VM))
{
+ //If we are starting on port 0 use the default VM_PORT
+ port = port == 0 ? DEFAULT_VM_PORT : port;
+
// create an in_VM broker
- TransportConnection.createVMBroker(1);
+ TransportConnection.createVMBroker(port);
}
else if (!_broker.equals(EXTERNAL))
{
@@ -362,6 +382,11 @@ public class QpidTestCase extends TestCase
public void stopBroker() throws Exception
{
+ stopBroker(0);
+ }
+
+ public void stopBroker(int port) throws Exception
+ {
_logger.info("stopping broker: " + _broker);
if (_brokerProcess != null)
{
@@ -372,12 +397,40 @@ public class QpidTestCase extends TestCase
}
else if (_broker.equals(VM))
{
- TransportConnection.killAllVMBrokers();
- ApplicationRegistry.removeAll();
+ port = port == 0 ? DEFAULT_VM_PORT : port;
+
+ TransportConnection.killVMBroker(port);
+ ApplicationRegistry.remove(port);
}
_brokerStarted = false;
}
+ protected void setSystemProperty(String property, String value)
+ {
+ if (!_setProperties.containsKey(property))
+ {
+ _setProperties.put(property, System.getProperty(property));
+ }
+
+ System.setProperty(property, value);
+ }
+
+ protected void revertSystemProperties()
+ {
+ for (String key : _setProperties.keySet())
+ {
+ String value = _setProperties.get(key);
+ if (value != null)
+ {
+ System.setProperty(key, value);
+ }
+ else
+ {
+ System.clearProperty(key);
+ }
+ }
+ }
+
/**
* Check whether the broker is an 0.8
*
@@ -395,8 +448,13 @@ public class QpidTestCase extends TestCase
public void restartBroker() throws Exception
{
- stopBroker();
- startBroker();
+ restartBroker(0);
+ }
+
+ public void restartBroker(int port) throws Exception
+ {
+ stopBroker(port);
+ startBroker(port);
}
/**
@@ -508,6 +566,8 @@ public class QpidTestCase extends TestCase
c.close();
}
}
+
+ revertSystemProperties();
}
}
diff --git a/qpid/python/RELEASE_NOTES b/qpid/python/RELEASE_NOTES
index 7005aa83cb..0e75988ae9 100644
--- a/qpid/python/RELEASE_NOTES
+++ b/qpid/python/RELEASE_NOTES
@@ -1,25 +1,18 @@
-Apache Incubator Qpid Python M2 Release Notes
+Apache Incubator Qpid Python M3 Release Notes
-------------------------------------------
-The Qpid M2 release contains support the for AMQP 0-8 specification.
-You can access the 0-8 specification using the following link.
-http://www.amqp.org/tikiwiki/tiki-index.php?page=Download
+The Qpid M3 release of the python client contains support the for both
+ 0-8 and 0-10 of the AMQP specification as well as support for the
+non-WIP portion of the 0-9 specification. You can access these
+specficiations from:
-For full details of Qpid capabilities, as they currently stand, see our
-detailed project documentation at:
-
-http://cwiki.apache.org/confluence/pages/viewpage.action?pageId=28284
-
-Please take time to go through the README file provided with the distro.
+http://jira.amqp.org/confluence/display/AMQP/Download
+For full details of Qpid capabilities, as they currently stand, see our
+project page at:
-Known Issues/Outstanding Work
------------------------------
-
-There are no known issues for the Phyton client.
-
+http://cwiki.apache.org/confluence/display/qpid/Index
-M2 Tasks Completed
--------------------
+The README file provided contains some details on running the python
+based test suite that is included with this distro.
-Bug QPID-467 Complete Interop Testing
diff --git a/qpid/ruby/RELEASE_NOTES b/qpid/ruby/RELEASE_NOTES
index 5ea0bd8eec..1eae2e1ecb 100644
--- a/qpid/ruby/RELEASE_NOTES
+++ b/qpid/ruby/RELEASE_NOTES
@@ -1,19 +1,14 @@
-Apache Incubator Qpid Ruby M2 Release Notes
+Apache Incubator Qpid Ruby M3 Release Notes
---------------------------------------------
-The Qpid M2 release contains support the for AMQP 0-8 specification.
-You can access the 0-8 specification using the following link.
-http://www.amqp.org/tikiwiki/tiki-index.php?page=Download
+The Qpid M3 release of the ruby client contains support the for AMQP
+0-8 specification (as well as support for the non-WIP portion of the
+0-9 specification). See:
-For full details of Qpid capabilities, as they currently stand, see our
-detailed project documentation at:
+http://jira.amqp.org/confluence/display/AMQP/Download
-http://cwiki.apache.org/confluence/pages/viewpage.action?pageId=28284
+For full details of Qpid capabilities, as they currently stand, see
+our project page at:
-Please take time to go through the README file provided with the distro.
+http://cwiki.apache.org/confluence/display/qpid/Index
-
-Known Issues/Outstanding Work
------------------------------
-
-Bug QPID-467 Complete Interop Testing