TxControl.h
上传用户:xfwatch
上传日期:2020-12-14
资源大小:872k
文件大小:3k
源码类别:

中间件编程

开发平台:

Java

  1. /*
  2.  * JBoss, Home of Professional Open Source
  3.  * Copyright 2009, Red Hat, Inc., and others contributors as indicated
  4.  * by the @authors tag. All rights reserved.
  5.  * See the copyright.txt in the distribution for a
  6.  * full listing of individual contributors.
  7.  * This copyrighted material is made available to anyone wishing to use,
  8.  * modify, copy, or redistribute it subject to the terms and conditions
  9.  * of the GNU Lesser General Public License, v. 2.1.
  10.  * This program is distributed in the hope that it will be useful, but WITHOUT A
  11.  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  12.  * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  13.  * You should have received a copy of the GNU Lesser General Public License,
  14.  * v.2.1 along with this distribution; if not, write to the Free Software
  15.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  16.  * MA  02110-1301, USA.
  17.  */
  18. #ifndef _TX_CONTROL_H
  19. #define _TX_CONTROL_H
  20. #include <map>
  21. #include "CosTransactionsS.h"
  22. #include "txi.h"
  23. namespace atmibroker {
  24. namespace tx {
  25. /**
  26.  * An object that gets associated with a thread when there
  27.  * is an active transaction.
  28.  */
  29. class BLACKTIE_TX_DLL TxControl {
  30. public:
  31. TxControl(CosTransactions::Control_ptr ctrl, long timeout, int tid);
  32. virtual ~TxControl();
  33. int commit(bool report_heuristics);
  34. int rollback();
  35. int rollback_only();
  36. CosTransactions::Status get_ots_status();
  37. CosTransactions::Control_ptr get_ots_control(long* ttlp); // ref count of ptr is incremented
  38. int get_status();
  39. int get_timeout(CORBA::ULong *);
  40. /**
  41.  * Return the amount of time in seconds remaining before the txn is subject to rollback,
  42.  * a value -1 means the txn is not subject to timeouts
  43.  */
  44. long ttl();
  45. int thr_id() {return _tid;}
  46. bool isActive(const char *, bool);
  47. bool isOriginator();
  48. // Note this op disassociates the tx and releases _ctrl:
  49. // perhaps we should make it private and use
  50. // friend TxManager;
  51. void suspend();
  52. // return a list of outstanding xatmi call descriptors associated with this tx
  53. // std::vector<int> &get_cds() {return _cds;}
  54. std::map<int, int (*)(int)> &get_cds() {return _cds;}
  55. private:
  56. int end(bool commit, bool report);
  57. bool _rbonly; // txn marked rollback only after txn timeout
  58. long _ctime; // creation time in seconds (since 1970)
  59. long _ttl; // time left until the tx is subject to being rolled back
  60. int _tid; // ACE thread id
  61. CosTransactions::Control_ptr _ctrl;
  62. std::map<int, int (*)(int)> _cds;  // xatmi outstanding tpacall descriptors
  63. };
  64. } // namespace tx
  65. } //namespace atmibroker
  66. #endif // _TX_CONTROL_H