00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _TxPublish_
00022 #define _TxPublish_
00023
00024 #include "Queue.h"
00025 #include "Deliverable.h"
00026 #include "Message.h"
00027 #include "MessageStore.h"
00028 #include "TxOp.h"
00029
00030 #include <algorithm>
00031 #include <functional>
00032 #include <list>
00033
00034 #include <boost/intrusive_ptr.hpp>
00035
00036 namespace qpid {
00037 namespace broker {
00048 class TxPublish : public TxOp, public Deliverable{
00049 class Prepare{
00050 TransactionContext* ctxt;
00051 boost::intrusive_ptr<Message>& msg;
00052 public:
00053 Prepare(TransactionContext* ctxt, boost::intrusive_ptr<Message>& msg);
00054 void operator()(Queue::shared_ptr& queue);
00055 };
00056
00057 class Commit{
00058 boost::intrusive_ptr<Message>& msg;
00059 public:
00060 Commit(boost::intrusive_ptr<Message>& msg);
00061 void operator()(Queue::shared_ptr& queue);
00062 };
00063
00064 boost::intrusive_ptr<Message> msg;
00065 std::list<Queue::shared_ptr> queues;
00066
00067 public:
00068 TxPublish(boost::intrusive_ptr<Message> msg);
00069 virtual bool prepare(TransactionContext* ctxt) throw();
00070 virtual void commit() throw();
00071 virtual void rollback() throw();
00072
00073 virtual Message& getMessage() { return *msg; };
00074
00075 virtual void deliverTo(Queue::shared_ptr& queue);
00076
00077 virtual ~TxPublish(){}
00078
00079 uint64_t contentSize();
00080 };
00081 }
00082 }
00083
00084
00085 #endif