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

中间件编程

开发平台:

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. // CorbaTransaction.h
  19. #ifndef _TXMANAGER_H
  20. #define _TXMANAGER_H
  21. #include "CorbaConnection.h"
  22. #include "TxControl.h"
  23. #include "XAResourceManagerFactory.h"
  24. #define TX_NOT_SUPPORTED   1   /* normal execution */
  25. #define TX_OK              0   /* normal execution */
  26. #define TX_OUTSIDE        -1   /* application is in an RM local
  27.                                   transaction */
  28. #define TX_ROLLBACK       -2   /* transaction was rolled back */
  29. #define TX_MIXED          -3   /* transaction was partially committed
  30.                                   and partially rolled back */
  31. #define TX_HAZARD         -4   /* transaction may have been partially
  32.                                   committed and partially rolled back*/
  33. #define TX_PROTOCOL_ERROR -5   /* routine invoked in an improper
  34.                                   context */
  35. #define TX_ERROR          -6   /* transient error */
  36. #define TX_FAIL           -7   /* fatal error */
  37. #define TX_EINVAL         -8   /* invalid arguments were given */
  38. #define TX_COMMITTED      -9   /* the transaction was heuristically
  39.                                   committed */
  40. #define TX_NO_BEGIN       -100 /* transaction committed plus new
  41.                                   transaction could not be started */
  42. #define TX_ROLLBACK_NO_BEGIN (TX_ROLLBACK+TX_NO_BEGIN)
  43. /* transaction rollback plus new
  44.  transaction could not be started */
  45. #define TX_MIXED_NO_BEGIN (TX_MIXED+TX_NO_BEGIN)
  46. /* mixed plus transaction could not
  47.  be started */
  48. #define TX_HAZARD_NO_BEGIN (TX_HAZARD+TX_NO_BEGIN)
  49. /* hazard plus transaction could not
  50.  be started */
  51. #define TX_COMMITTED_NO_BEGIN (TX_COMMITTED+TX_NO_BEGIN)
  52. /* heuristically committed plus
  53.  transaction could not be started */
  54. /*
  55.  * Definitions for tx_*() routines
  56.  */
  57. /* commit return values */
  58. typedef long COMMIT_RETURN;
  59. #define TX_COMMIT_COMPLETED 0
  60. #define TX_COMMIT_DECISION_LOGGED 1
  61. /* transaction control values */
  62. typedef long TRANSACTION_CONTROL;
  63. #define TX_UNCHAINED 0
  64. #define TX_CHAINED 1
  65. /* type of transaction timeouts */
  66. typedef long TRANSACTION_TIMEOUT;
  67. /* transaction state values */
  68. //typedef long TRANSACTION_STATE;
  69. #define TX_ACTIVE 0
  70. #define TX_TIMEOUT_ROLLBACK_ONLY 1
  71. #define TX_ROLLBACK_ONLY 2
  72. namespace atmibroker {
  73. namespace tx {
  74. class BLACKTIE_TX_DLL TxManager {
  75. public:
  76. int open(void);
  77. int begin(void);
  78. int commit(void);
  79. int rollback(void);
  80. int close(void);
  81. int rollback_only(void);
  82. int set_commit_return(COMMIT_RETURN);
  83. COMMIT_RETURN get_commit_return() {return _whenReturn;}
  84. int set_transaction_control(TRANSACTION_CONTROL);
  85. TRANSACTION_CONTROL get_transaction_control() {return _controlMode;}
  86. int set_transaction_timeout(TRANSACTION_TIMEOUT);
  87. TRANSACTION_TIMEOUT get_transaction_timeout() {return _timeout;}
  88. int info(void *); //TXINFO from tx.h
  89. bool isChained() {return _controlMode == TX_CHAINED;}
  90. bool reportHeuristics() {return _whenReturn == TX_COMMIT_COMPLETED;}
  91. TxControl *currentTx(const char *msg);
  92. public: // public static methods
  93. static TxManager* get_instance();
  94. static void discard_instance();
  95. static CosTransactions::Control_ptr get_ots_control(long* ttl); // ref count of ptr is incremented
  96. public: // suspend and resume
  97. int tx_resume(CosTransactions::Control_ptr control, long ttl, int flags, int altflags = -1);
  98. CosTransactions::Control_ptr tx_suspend(int flags, int altflags = -1);
  99. CosTransactions::Control_ptr tx_suspend(TxControl *, int flags, int altflags = -1);
  100. int resume(int cd);
  101. int suspend(int cd, int (*invalidate)(int cd));
  102. bool isCdTransactional(int cd);
  103. CORBA::ORB_ptr getOrb();
  104. int rm_end(int flags, int altflags = -1);
  105. private:
  106. TxManager();
  107. virtual ~TxManager();
  108. int tx_resume(TxControl *, int flags, int altflags = -1);
  109. int complete(bool commit);
  110. int chainTransaction(int);
  111. int rm_open(void);
  112. void rm_close(void);
  113. int rm_start(int flags, int altflags = -1);
  114. int open_trans_factory(void);
  115. CosTransactions::Control_ptr create_tx(TRANSACTION_TIMEOUT timeout);
  116. private:
  117. CosTransactions::TransactionFactory_var _txfac;
  118. XAResourceManagerFactory _xaRMFac;
  119. COMMIT_RETURN _whenReturn;
  120. TRANSACTION_CONTROL _controlMode;
  121. TRANSACTION_TIMEOUT _timeout;
  122. bool _isOpen;
  123. CORBA_CONNECTION *_connection;
  124. private:
  125. static TxManager *_instance;
  126. };
  127. } // namespace tx
  128. } //namespace atmibroker
  129. #endif // _TXMANAGER_H