diff options
author | Aidan Skinner <aidan@apache.org> | 2008-08-23 00:07:42 +0000 |
---|---|---|
committer | Aidan Skinner <aidan@apache.org> | 2008-08-23 00:07:42 +0000 |
commit | 082d735e9d11dce3eb7b54ab2e0228edf608d79c (patch) | |
tree | 9e9c35724dbbdeacbb974673e0ccabb794737937 | |
parent | 4fad106ebd284729b9f772ed5aa4b0f0f51381fb (diff) | |
parent | 9c9299dcbf78f868b13cd574822a9637671a8862 (diff) | |
download | qpid-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
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 |