diff options
author | Gordon Sim <gsim@apache.org> | 2010-04-08 09:49:04 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2010-04-08 09:49:04 +0000 |
commit | 13d4a7f61d6b4b9935d88e97d14eda29c9ad0950 (patch) | |
tree | a796aaab2caad287a9e9f3538a0055b27224840d | |
parent | 1102cd63f46516cd5b8c46d17567dcd4669adf0a (diff) | |
download | qpid-python-13d4a7f61d6b4b9935d88e97d14eda29c9ad0950.tar.gz |
QPID-664: changed open() to connect(), moved url parameter to constructor, added detach() and isConnected()
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@931852 13f79535-47bb-0310-9956-ffa450edef68
20 files changed, 62 insertions, 50 deletions
diff --git a/qpid/cpp/examples/messaging/client.cpp b/qpid/cpp/examples/messaging/client.cpp index 570497ca0b..c1a8d74237 100644 --- a/qpid/cpp/examples/messaging/client.cpp +++ b/qpid/cpp/examples/messaging/client.cpp @@ -39,9 +39,9 @@ using std::string; int main(int argc, char** argv) { const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672"; - Connection connection; + Connection connection(url); try { - connection.open(url); + connection.connect(); Session session = connection.createSession(); Sender sender = session.createSender("service_queue"); diff --git a/qpid/cpp/examples/messaging/drain.cpp b/qpid/cpp/examples/messaging/drain.cpp index 1215ac75d2..41b9503649 100644 --- a/qpid/cpp/examples/messaging/drain.cpp +++ b/qpid/cpp/examples/messaging/drain.cpp @@ -93,9 +93,9 @@ int main(int argc, char** argv) { Options options(argv[0]); if (options.parse(argc, argv)) { - Connection connection(options.connectionOptions); + Connection connection(options.url, options.connectionOptions); try { - connection.open(options.url); + connection.connect(); Session session = connection.createSession(); Receiver receiver = session.createReceiver(options.address); Duration timeout = options.getTimeout(); diff --git a/qpid/cpp/examples/messaging/map_receiver.cpp b/qpid/cpp/examples/messaging/map_receiver.cpp index 7840a99fda..55c543b90b 100644 --- a/qpid/cpp/examples/messaging/map_receiver.cpp +++ b/qpid/cpp/examples/messaging/map_receiver.cpp @@ -38,9 +38,9 @@ using std::string; int main(int argc, char** argv) { const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672"; - Connection connection; + Connection connection(url); try { - connection.open(url); + connection.connect(); Session session = connection.createSession(); Receiver receiver = session.createReceiver("message_queue"); Variant::Map content; diff --git a/qpid/cpp/examples/messaging/map_sender.cpp b/qpid/cpp/examples/messaging/map_sender.cpp index 8dba47ce63..2e63c88aa4 100644 --- a/qpid/cpp/examples/messaging/map_sender.cpp +++ b/qpid/cpp/examples/messaging/map_sender.cpp @@ -37,9 +37,9 @@ using std::string; int main(int argc, char** argv) { const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672"; - Connection connection; + Connection connection(url); try { - connection.open(url); + connection.connect(); Session session = connection.createSession(); Sender sender = session.createSender("message_queue"); diff --git a/qpid/cpp/examples/messaging/queue_receiver.cpp b/qpid/cpp/examples/messaging/queue_receiver.cpp index d7bcec1bb2..43dffd8baf 100644 --- a/qpid/cpp/examples/messaging/queue_receiver.cpp +++ b/qpid/cpp/examples/messaging/queue_receiver.cpp @@ -31,9 +31,9 @@ using namespace qpid::messaging; int main(int argc, char** argv) { const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672"; - Connection connection; + Connection connection(url); try { - connection.open(url); + connection.connect(); Session session = connection.createSession(); Receiver receiver = session.createReceiver("message_queue"); while (true) { diff --git a/qpid/cpp/examples/messaging/queue_sender.cpp b/qpid/cpp/examples/messaging/queue_sender.cpp index f7f0e9bf6d..fa355dbf88 100644 --- a/qpid/cpp/examples/messaging/queue_sender.cpp +++ b/qpid/cpp/examples/messaging/queue_sender.cpp @@ -34,9 +34,9 @@ int main(int argc, char** argv) { const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672"; int count = argc>2 ? atoi(argv[2]) : 10; - Connection connection; + Connection connection(url); try { - connection.open(url); + connection.connect(); Session session = connection.createSession(); Sender sender = session.createSender("message_queue"); diff --git a/qpid/cpp/examples/messaging/server.cpp b/qpid/cpp/examples/messaging/server.cpp index 64dcc941ed..33d28a75c4 100644 --- a/qpid/cpp/examples/messaging/server.cpp +++ b/qpid/cpp/examples/messaging/server.cpp @@ -40,9 +40,9 @@ using std::string; int main(int argc, char** argv) { const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672"; - Connection connection; + Connection connection(url); try { - connection.open(url); + connection.connect(); Session session = connection.createSession(); Receiver receiver = session.createReceiver("service_queue; {create: always}"); diff --git a/qpid/cpp/examples/messaging/spout.cpp b/qpid/cpp/examples/messaging/spout.cpp index 61b3f88711..9ed8b642c8 100644 --- a/qpid/cpp/examples/messaging/spout.cpp +++ b/qpid/cpp/examples/messaging/spout.cpp @@ -156,9 +156,9 @@ int main(int argc, char** argv) { Options options(argv[0]); if (options.parse(argc, argv)) { - Connection connection(options.connectionOptions); + Connection connection(options.url, options.connectionOptions); try { - connection.open(options.url); + connection.connect(); Session session = connection.createSession(); Sender sender = session.createSender(options.address); diff --git a/qpid/cpp/examples/messaging/topic_receiver.cpp b/qpid/cpp/examples/messaging/topic_receiver.cpp index df2484adfb..408920f5aa 100644 --- a/qpid/cpp/examples/messaging/topic_receiver.cpp +++ b/qpid/cpp/examples/messaging/topic_receiver.cpp @@ -33,9 +33,9 @@ int main(int argc, char** argv) { const std::string url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672"; const std::string pattern = argc>2 ? argv[2] : "#.#"; - Connection connection; + Connection connection(url); try { - connection.open(url); + connection.connect(); Session session = connection.createSession(); Receiver receiver = session.createReceiver("news_service; {filter:[control, " + pattern + "]}"); while (true) { diff --git a/qpid/cpp/examples/messaging/topic_sender.cpp b/qpid/cpp/examples/messaging/topic_sender.cpp index 5dd593ff8a..9d4cd582cf 100644 --- a/qpid/cpp/examples/messaging/topic_sender.cpp +++ b/qpid/cpp/examples/messaging/topic_sender.cpp @@ -51,9 +51,9 @@ int main(int argc, char** argv) { const char* url = argc>1 ? argv[1] : "amqp:tcp:127.0.0.1:5672"; int count = argc>2 ? atoi(argv[2]) : 10; - Connection connection; + Connection connection(url); try { - connection.open(url); + connection.connect(); Session session = connection.createSession(); Sender sender = session.createSender("news_service"); diff --git a/qpid/cpp/include/qpid/messaging/Connection.h b/qpid/cpp/include/qpid/messaging/Connection.h index 933c503635..e58abc1986 100644 --- a/qpid/cpp/include/qpid/messaging/Connection.h +++ b/qpid/cpp/include/qpid/messaging/Connection.h @@ -53,7 +53,7 @@ class Connection : public qpid::messaging::Handle<ConnectionImpl> * sasl-mechanism * sasl-min-ssf * sasl-max-ssf - * protocol + * transport * * Reconnect behaviour can be controlled through the following options: * @@ -71,18 +71,20 @@ class Connection : public qpid::messaging::Handle<ConnectionImpl> * doubled every failure until the value of max-retry-interval * is reached. */ - QPID_CLIENT_EXTERN Connection(const qpid::types::Variant::Map& options = qpid::types::Variant::Map()); + QPID_CLIENT_EXTERN Connection(const std::string& url, const qpid::types::Variant::Map& options = qpid::types::Variant::Map()); /** * Creates a connection using an option string of the form * {name=value,name2=value2...}, see above for options supported. * * @exception InvalidOptionString if the string does not match the correct syntax */ - QPID_CLIENT_EXTERN Connection(const std::string& options); + QPID_CLIENT_EXTERN Connection(const std::string& url, const std::string& options); QPID_CLIENT_EXTERN ~Connection(); QPID_CLIENT_EXTERN Connection& operator=(const Connection&); QPID_CLIENT_EXTERN void setOption(const std::string& name, const qpid::types::Variant& value); - QPID_CLIENT_EXTERN void open(const std::string& url); + QPID_CLIENT_EXTERN void connect(); + QPID_CLIENT_EXTERN bool isConnected(); + QPID_CLIENT_EXTERN void detach(); /** * Closes a connection and all sessions associated with it. An * opened connection must be closed before the last handle is diff --git a/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp b/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp index 5828449d5e..30b75ff4ff 100644 --- a/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp +++ b/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp @@ -91,16 +91,17 @@ void convert(const Variant::Map& from, ConnectionSettings& to) setIfFound(from, "max-frame-size", to.maxFrameSize); setIfFound(from, "bounds", to.bounds); - setIfFound(from, "protocol", to.protocol); + setIfFound(from, "transport", to.protocol); } -ConnectionImpl::ConnectionImpl(const Variant::Map& options) : +ConnectionImpl::ConnectionImpl(const std::string& url, const Variant::Map& options) : reconnect(true), timeout(-1), limit(-1), minReconnectInterval(3), maxReconnectInterval(60), retries(0) { QPID_LOG(debug, "Created connection with " << options); setOptions(options); + urls.push_back(url); } void ConnectionImpl::setOptions(const Variant::Map& options) @@ -127,12 +128,6 @@ void ConnectionImpl::setOption(const std::string& name, const Variant& value) QPID_LOG(debug, "Set " << name << " to " << value); } -void ConnectionImpl::open(const std::string& u) -{ - urls.push_back(u); - connect(); -} - void ConnectionImpl::close() { std::vector<std::string> names; @@ -143,11 +138,21 @@ void ConnectionImpl::close() for (std::vector<std::string>::const_iterator i = names.begin(); i != names.end(); ++i) { getSession(*i).close(); } + detach(); +} +void ConnectionImpl::detach() +{ qpid::sys::Mutex::ScopedLock l(lock); connection.close(); } +bool ConnectionImpl::isConnected() +{ + qpid::sys::Mutex::ScopedLock l(lock); + return connection.isOpen(); +} + boost::intrusive_ptr<SessionImpl> getImplPtr(qpid::messaging::Session& session) { return boost::dynamic_pointer_cast<SessionImpl>( diff --git a/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.h b/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.h index 2c59d8add8..9d992c1375 100644 --- a/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.h +++ b/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.h @@ -39,13 +39,14 @@ class SessionImpl; class ConnectionImpl : public qpid::messaging::ConnectionImpl { public: - ConnectionImpl(const qpid::types::Variant::Map& options); - void open(const std::string& url); + ConnectionImpl(const std::string& url, const qpid::types::Variant::Map& options); + void connect(); + bool isConnected(); void close(); qpid::messaging::Session newSession(bool transactional, const std::string& name); qpid::messaging::Session getSession(const std::string& name) const; void closed(SessionImpl&); - void connect(); + void detach(); void setOption(const std::string& name, const qpid::types::Variant& value); private: typedef std::map<std::string, qpid::messaging::Session> Sessions; diff --git a/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp b/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp index 8f9751a967..969ad93da9 100644 --- a/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp +++ b/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp @@ -108,7 +108,7 @@ void SessionImpl::close() for (std::vector<std::string>::const_iterator i = s.begin(); i != s.end(); ++i) getSender(*i).close(); for (std::vector<std::string>::const_iterator i = r.begin(); i != r.end(); ++i) getReceiver(*i).close(); - + connection->closed(*this); session.close(); } diff --git a/qpid/cpp/src/qpid/messaging/Connection.cpp b/qpid/cpp/src/qpid/messaging/Connection.cpp index b9437c7931..81a72bb876 100644 --- a/qpid/cpp/src/qpid/messaging/Connection.cpp +++ b/qpid/cpp/src/qpid/messaging/Connection.cpp @@ -39,22 +39,24 @@ 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& o) +Connection::Connection(const std::string& url, const std::string& o) { Variant::Map options; AddressParser parser(o); if (o.empty() || parser.parseMap(options)) { - PI::ctor(*this, new qpid::client::amqp0_10::ConnectionImpl(options)); + PI::ctor(*this, new qpid::client::amqp0_10::ConnectionImpl(url, options)); } else { throw InvalidOptionString(o); } } -Connection::Connection(const Variant::Map& options) +Connection::Connection(const std::string& url, const Variant::Map& options) { - PI::ctor(*this, new qpid::client::amqp0_10::ConnectionImpl(options)); + PI::ctor(*this, new qpid::client::amqp0_10::ConnectionImpl(url, options)); } -void Connection::open(const std::string& url) { impl->open(url); } +void Connection::connect() { impl->connect(); } +bool Connection::isConnected() { return impl->isConnected(); } +void Connection::detach() { impl->detach(); } void Connection::close() { impl->close(); } Session Connection::createSession(const std::string& name) { return impl->newSession(false, name); } Session Connection::createTransactionalSession(const std::string& name) diff --git a/qpid/cpp/src/qpid/messaging/ConnectionImpl.h b/qpid/cpp/src/qpid/messaging/ConnectionImpl.h index 474f486736..148105476d 100644 --- a/qpid/cpp/src/qpid/messaging/ConnectionImpl.h +++ b/qpid/cpp/src/qpid/messaging/ConnectionImpl.h @@ -38,7 +38,9 @@ class ConnectionImpl : public virtual qpid::RefCounted { public: virtual ~ConnectionImpl() {} - virtual void open(const std::string& url) = 0; + virtual void connect() = 0; + virtual bool isConnected() = 0; + virtual void detach() = 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/qpid/cpp/src/tests/MessagingSessionTests.cpp b/qpid/cpp/src/tests/MessagingSessionTests.cpp index 6341ef3f28..bdd5422690 100644 --- a/qpid/cpp/src/tests/MessagingSessionTests.cpp +++ b/qpid/cpp/src/tests/MessagingSessionTests.cpp @@ -115,8 +115,8 @@ struct MessagingFixture : public BrokerFixture static Connection open(uint16_t port) { - Connection connection; - connection.open((boost::format("amqp:tcp:localhost:%1%") % (port)).str()); + Connection connection((boost::format("amqp:tcp:localhost:%1%") % (port)).str()); + connection.connect(); return connection; } diff --git a/qpid/cpp/src/tests/qpid_recv.cpp b/qpid/cpp/src/tests/qpid_recv.cpp index 602f91d74e..77e9cd180a 100644 --- a/qpid/cpp/src/tests/qpid_recv.cpp +++ b/qpid/cpp/src/tests/qpid_recv.cpp @@ -159,9 +159,9 @@ int main(int argc, char ** argv) { Options opts; if (opts.parse(argc, argv)) { - Connection connection(opts.connectionOptions); + Connection connection(opts.url, opts.connectionOptions); try { - connection.open(opts.url); + connection.connect(); std::auto_ptr<FailoverUpdates> updates(opts.failoverUpdates ? new FailoverUpdates(connection) : 0); Session session = opts.tx ? connection.createTransactionalSession() : connection.createSession(); Receiver receiver = session.createReceiver(opts.address); diff --git a/qpid/cpp/src/tests/qpid_send.cpp b/qpid/cpp/src/tests/qpid_send.cpp index feeabefbdd..e51c5a93d2 100644 --- a/qpid/cpp/src/tests/qpid_send.cpp +++ b/qpid/cpp/src/tests/qpid_send.cpp @@ -216,9 +216,9 @@ int main(int argc, char ** argv) { Options opts; if (opts.parse(argc, argv)) { - Connection connection(opts.connectionOptions); + Connection connection(opts.url, opts.connectionOptions); try { - connection.open(opts.url); + connection.connect(); std::auto_ptr<FailoverUpdates> updates(opts.failoverUpdates ? new FailoverUpdates(connection) : 0); Session session = opts.tx ? connection.createTransactionalSession() : connection.createSession(); Sender sender = session.createSender(opts.address); diff --git a/qpid/cpp/src/tests/qpid_stream.cpp b/qpid/cpp/src/tests/qpid_stream.cpp index eafa6e96fa..b3fe493922 100644 --- a/qpid/cpp/src/tests/qpid_stream.cpp +++ b/qpid/cpp/src/tests/qpid_stream.cpp @@ -88,9 +88,9 @@ struct Client : qpid::sys::Runnable void run() { - Connection connection; + Connection connection(opts.url); try { - connection.open(opts.url); + connection.connect(); Session session = connection.createSession(); doWork(session); session.close(); |