diff options
author | Gordon Sim <gsim@apache.org> | 2010-04-09 15:08:47 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2010-04-09 15:08:47 +0000 |
commit | ef958e7b221d38ec76c392f76a66978211d6d1f9 (patch) | |
tree | 111ba60857b7613f18e64f5c817d6e271428013e /cpp/src/qpid/messaging | |
parent | 2daf8e11866364ff4955ee69625bf401e9baa93c (diff) | |
download | qpid-python-ef958e7b221d38ec76c392f76a66978211d6d1f9.tar.gz |
QPID-664: changed connect() back to open(),removed detach(),defined new exception hierarchy, added ability to re-use reconnect/replay logic for resource-limit-exceeded errors
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@932451 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/messaging')
-rw-r--r-- | cpp/src/qpid/messaging/Address.cpp | 4 | ||||
-rw-r--r-- | cpp/src/qpid/messaging/Connection.cpp | 9 | ||||
-rw-r--r-- | cpp/src/qpid/messaging/ConnectionImpl.h | 5 | ||||
-rw-r--r-- | cpp/src/qpid/messaging/Message.cpp | 4 | ||||
-rw-r--r-- | cpp/src/qpid/messaging/Session.cpp | 11 | ||||
-rw-r--r-- | cpp/src/qpid/messaging/SessionImpl.h | 1 | ||||
-rw-r--r-- | cpp/src/qpid/messaging/exceptions.cpp | 58 |
7 files changed, 76 insertions, 16 deletions
diff --git a/cpp/src/qpid/messaging/Address.cpp b/cpp/src/qpid/messaging/Address.cpp index 0c522888e7..a516959edb 100644 --- a/cpp/src/qpid/messaging/Address.cpp +++ b/cpp/src/qpid/messaging/Address.cpp @@ -148,8 +148,4 @@ std::ostream& operator<<(std::ostream& out, const Address& address) return out; } -InvalidAddress::InvalidAddress(const std::string& msg) : Exception(msg) {} - -MalformedAddress::MalformedAddress(const std::string& msg) : Exception(msg) {} - }} // namespace qpid::messaging diff --git a/cpp/src/qpid/messaging/Connection.cpp b/cpp/src/qpid/messaging/Connection.cpp index 81a72bb876..14e713d425 100644 --- a/cpp/src/qpid/messaging/Connection.cpp +++ b/cpp/src/qpid/messaging/Connection.cpp @@ -39,7 +39,7 @@ Connection::Connection(const Connection& c) : Handle<ConnectionImpl>() { PI::cop Connection& Connection::operator=(const Connection& c) { return PI::assign(*this, c); } Connection::~Connection() { PI::dtor(*this); } -Connection::Connection(const std::string& url, const std::string& o) +Connection::Connection(const std::string& url, const std::string& o) throw(InvalidOptionString) { Variant::Map options; AddressParser parser(o); @@ -54,9 +54,8 @@ Connection::Connection(const std::string& url, const Variant::Map& options) PI::ctor(*this, new qpid::client::amqp0_10::ConnectionImpl(url, options)); } -void Connection::connect() { impl->connect(); } -bool Connection::isConnected() { return impl->isConnected(); } -void Connection::detach() { impl->detach(); } +void Connection::open() { impl->open(); } +bool Connection::isOpen() { return impl->isOpen(); } void Connection::close() { impl->close(); } Session Connection::createSession(const std::string& name) { return impl->newSession(false, name); } Session Connection::createTransactionalSession(const std::string& name) @@ -69,6 +68,4 @@ void Connection::setOption(const std::string& name, const Variant& value) impl->setOption(name, value); } -InvalidOptionString::InvalidOptionString(const std::string& msg) : Exception(msg) {} - }} // namespace qpid::messaging diff --git a/cpp/src/qpid/messaging/ConnectionImpl.h b/cpp/src/qpid/messaging/ConnectionImpl.h index 148105476d..23ab5272d0 100644 --- a/cpp/src/qpid/messaging/ConnectionImpl.h +++ b/cpp/src/qpid/messaging/ConnectionImpl.h @@ -38,9 +38,8 @@ class ConnectionImpl : public virtual qpid::RefCounted { public: virtual ~ConnectionImpl() {} - virtual void connect() = 0; - virtual bool isConnected() = 0; - virtual void detach() = 0; + virtual void open() = 0; + virtual bool isOpen() = 0; virtual void close() = 0; virtual Session newSession(bool transactional, const std::string& name) = 0; virtual Session getSession(const std::string& name) const = 0; diff --git a/cpp/src/qpid/messaging/Message.cpp b/cpp/src/qpid/messaging/Message.cpp index 753d3cec1b..1a04abe15b 100644 --- a/cpp/src/qpid/messaging/Message.cpp +++ b/cpp/src/qpid/messaging/Message.cpp @@ -111,13 +111,13 @@ template <class C> struct MessageCodec checkEncoding(requested) || checkEncoding(message.getContentType()); } - template <class T> static void decode(const Message& message, T& object, const std::string& encoding) + static void decode(const Message& message, typename C::ObjectType& object, const std::string& encoding) { checkEncoding(message, encoding); C::decode(message.getContent(), object); } - template <class T> static void encode(const T& map, Message& message, const std::string& encoding) + static void encode(const typename C::ObjectType& map, Message& message, const std::string& encoding) { checkEncoding(message, encoding); std::string content; diff --git a/cpp/src/qpid/messaging/Session.cpp b/cpp/src/qpid/messaging/Session.cpp index eb5e3766b8..bd9048e893 100644 --- a/cpp/src/qpid/messaging/Session.cpp +++ b/cpp/src/qpid/messaging/Session.cpp @@ -94,6 +94,15 @@ Connection Session::getConnection() const return impl->getConnection(); } -KeyError::KeyError(const std::string& msg) : Exception(msg) {} +void Session::checkError() { impl->checkError(); } +bool Session::hasError() +{ + try { + checkError(); + return false; + } catch (const std::exception&) { + return true; + } +} }} // namespace qpid::messaging diff --git a/cpp/src/qpid/messaging/SessionImpl.h b/cpp/src/qpid/messaging/SessionImpl.h index 7acead5b04..e9a200b22e 100644 --- a/cpp/src/qpid/messaging/SessionImpl.h +++ b/cpp/src/qpid/messaging/SessionImpl.h @@ -54,6 +54,7 @@ class SessionImpl : public virtual qpid::RefCounted virtual Sender getSender(const std::string& name) const = 0; virtual Receiver getReceiver(const std::string& name) const = 0; virtual Connection getConnection() const = 0; + virtual void checkError() = 0; private: }; }} // namespace qpid::messaging diff --git a/cpp/src/qpid/messaging/exceptions.cpp b/cpp/src/qpid/messaging/exceptions.cpp new file mode 100644 index 0000000000..5d2683fffe --- /dev/null +++ b/cpp/src/qpid/messaging/exceptions.cpp @@ -0,0 +1,58 @@ +/* + * + * 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/messaging/exceptions.h" + +namespace qpid { +namespace messaging { + +MessagingException::MessagingException(const std::string& msg) : qpid::types::Exception(msg) {} +MessagingException::~MessagingException() throw() {} + +InvalidOptionString::InvalidOptionString(const std::string& msg) : MessagingException(msg) {} +KeyError::KeyError(const std::string& msg) : MessagingException(msg) {} + + +LinkError::LinkError(const std::string& msg) : MessagingException(msg) {} + +AddressError::AddressError(const std::string& msg) : LinkError(msg) {} +ResolutionError::ResolutionError(const std::string& msg) : AddressError(msg) {} +MalformedAddress::MalformedAddress(const std::string& msg) : AddressError(msg) {} +AssertionFailed::AssertionFailed(const std::string& msg) : ResolutionError(msg) {} +NotFound::NotFound(const std::string& msg) : ResolutionError(msg) {} + +ReceiverError::ReceiverError(const std::string& msg) : LinkError(msg) {} +FetchError::FetchError(const std::string& msg) : ReceiverError(msg) {} +NoMessageAvailable::NoMessageAvailable() : FetchError("No message to fetch") {} + +SenderError::SenderError(const std::string& msg) : LinkError(msg) {} +SendError::SendError(const std::string& msg) : SenderError(msg) {} +TargetCapacityExceeded::TargetCapacityExceeded(const std::string& msg) : SendError(msg) {} + +SessionError::SessionError(const std::string& msg) : MessagingException(msg) {} +TransactionError::TransactionError(const std::string& msg) : SessionError(msg) {} +TransactionAborted::TransactionAborted(const std::string& msg) : TransactionError(msg) {} +UnauthorizedAccess::UnauthorizedAccess(const std::string& msg) : SessionError(msg) {} + +ConnectionError::ConnectionError(const std::string& msg) : MessagingException(msg) {} + +TransportFailure::TransportFailure(const std::string& msg) : MessagingException(msg) {} + +}} // namespace qpid::messaging |