summaryrefslogtreecommitdiff
path: root/cpp/src/qpid
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2009-11-23 12:50:58 +0000
committerGordon Sim <gsim@apache.org>2009-11-23 12:50:58 +0000
commit08d70d83487d6c39cdef50f9c90e001787849286 (patch)
treea71b400af2659b03eb5aeb98cfce870495b14382 /cpp/src/qpid
parent86fab2271457603040d420a6af7f88f2503cba77 (diff)
downloadqpid-python-08d70d83487d6c39cdef50f9c90e001787849286.tar.gz
QPID-664: Allow session to be specified as transactional; add basic test of transaction implementation.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@883325 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r--cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp4
-rw-r--r--cpp/src/qpid/client/amqp0_10/ConnectionImpl.h2
-rw-r--r--cpp/src/qpid/client/amqp0_10/SessionImpl.cpp3
-rw-r--r--cpp/src/qpid/client/amqp0_10/SessionImpl.h3
-rw-r--r--cpp/src/qpid/messaging/Connection.cpp7
-rw-r--r--cpp/src/qpid/messaging/ConnectionImpl.h2
6 files changed, 14 insertions, 7 deletions
diff --git a/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp b/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
index ebc5859d32..cd5c0214e3 100644
--- a/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
+++ b/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
@@ -118,10 +118,10 @@ qpid::messaging::Session ConnectionImpl::getSession(const std::string& name) con
}
}
-qpid::messaging::Session ConnectionImpl::newSession(const std::string& n)
+qpid::messaging::Session ConnectionImpl::newSession(bool transactional, const std::string& n)
{
std::string name = n.empty() ? Uuid(true).str() : n;
- qpid::messaging::Session impl(new SessionImpl(*this));
+ qpid::messaging::Session impl(new SessionImpl(*this, transactional));
{
qpid::sys::Mutex::ScopedLock l(lock);
sessions[name] = impl;
diff --git a/cpp/src/qpid/client/amqp0_10/ConnectionImpl.h b/cpp/src/qpid/client/amqp0_10/ConnectionImpl.h
index 5272121f92..979cc6c82a 100644
--- a/cpp/src/qpid/client/amqp0_10/ConnectionImpl.h
+++ b/cpp/src/qpid/client/amqp0_10/ConnectionImpl.h
@@ -42,7 +42,7 @@ class ConnectionImpl : public qpid::messaging::ConnectionImpl
public:
ConnectionImpl(const std::string& url, const qpid::messaging::Variant::Map& options);
void close();
- qpid::messaging::Session newSession(const std::string& name);
+ qpid::messaging::Session newSession(bool transactional, const std::string& name);
qpid::messaging::Session getSession(const std::string& name) const;
void closed(SessionImpl&);
void reconnect();
diff --git a/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp b/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp
index 0c09f26039..bb47288e88 100644
--- a/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp
+++ b/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp
@@ -50,7 +50,7 @@ namespace qpid {
namespace client {
namespace amqp0_10 {
-SessionImpl::SessionImpl(ConnectionImpl& c) : connection(c) {}
+SessionImpl::SessionImpl(ConnectionImpl& c, bool t) : connection(c), transactional(t) {}
void SessionImpl::sync()
@@ -134,6 +134,7 @@ void SessionImpl::setSession(qpid::client::Session s)
qpid::sys::Mutex::ScopedLock l(lock);
session = s;
incoming.setSession(session);
+ if (transactional) session.txSelect();
for (Receivers::iterator i = receivers.begin(); i != receivers.end(); ++i) {
getImplPtr<Receiver, ReceiverImpl>(i->second)->init(session, resolver);
}
diff --git a/cpp/src/qpid/client/amqp0_10/SessionImpl.h b/cpp/src/qpid/client/amqp0_10/SessionImpl.h
index 30391fc0c5..96c7ca93a3 100644
--- a/cpp/src/qpid/client/amqp0_10/SessionImpl.h
+++ b/cpp/src/qpid/client/amqp0_10/SessionImpl.h
@@ -54,7 +54,7 @@ class SenderImpl;
class SessionImpl : public qpid::messaging::SessionImpl
{
public:
- SessionImpl(ConnectionImpl&);
+ SessionImpl(ConnectionImpl&, bool transactional);
void commit();
void rollback();
void acknowledge();
@@ -111,6 +111,7 @@ class SessionImpl : public qpid::messaging::SessionImpl
IncomingMessages incoming;
Receivers receivers;
Senders senders;
+ const bool transactional;
bool accept(ReceiverImpl*, qpid::messaging::Message*, IncomingMessages::MessageTransfer&);
bool getIncoming(IncomingMessages::Handler& handler, qpid::sys::Duration timeout);
diff --git a/cpp/src/qpid/messaging/Connection.cpp b/cpp/src/qpid/messaging/Connection.cpp
index 8342fc546a..64ca962317 100644
--- a/cpp/src/qpid/messaging/Connection.cpp
+++ b/cpp/src/qpid/messaging/Connection.cpp
@@ -50,7 +50,12 @@ Connection& Connection::operator=(const Connection& c) { return PI::assign(*this
Connection::~Connection() { PI::dtor(*this); }
void Connection::close() { impl->close(); }
-Session Connection::newSession(const std::string& name) { return impl->newSession(name); }
+Session Connection::newSession(const char* name) { return impl->newSession(false, name); }
+Session Connection::newSession(const std::string& name) { return impl->newSession(false, name); }
+Session Connection::newSession(bool transactional, const std::string& name)
+{
+ return impl->newSession(transactional, name);
+}
Session Connection::getSession(const std::string& name) const { return impl->getSession(name); }
InvalidOptionString::InvalidOptionString(const std::string& msg) : Exception(msg) {}
diff --git a/cpp/src/qpid/messaging/ConnectionImpl.h b/cpp/src/qpid/messaging/ConnectionImpl.h
index ce60f6f9fc..4eff68ff9d 100644
--- a/cpp/src/qpid/messaging/ConnectionImpl.h
+++ b/cpp/src/qpid/messaging/ConnectionImpl.h
@@ -37,7 +37,7 @@ class ConnectionImpl : public virtual qpid::RefCounted
public:
virtual ~ConnectionImpl() {}
virtual void close() = 0;
- virtual Session newSession(const std::string& name) = 0;
+ virtual Session newSession(bool transactional, const std::string& name) = 0;
virtual Session getSession(const std::string& name) const = 0;
private:
};