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

中间件编程

开发平台:

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 _XASTATEMODEL_H
  19. #define _XASTATEMODEL_H
  20. #include <string>
  21. #include "xa.h"
  22. namespace atmibroker {
  23. namespace xa {
  24. /*
  25.  * State table for managing legal calling sequences for XA routines.
  26.  * Refer to chapter 6 of X/Open XA specification for details.
  27.  */
  28. enum XAEVENT {
  29. XACALL_START = 0,
  30. XACALL_END,
  31. XACALL_OPEN,
  32. XACALL_RECOVER,
  33. XACALL_CLOSE,
  34. XACALL_PREPARE = 5,
  35. XACALL_COMMIT,
  36. XACALL_ROLLBACK,
  37. XACALL_FORGET,
  38. };
  39. enum XAASTATE {
  40. T0 = 0x0,   // not associated
  41. T1 = 0x1,   // associated
  42. T2 = 0x2,   // association suspended
  43. };
  44. enum XABSTATE {
  45. S0 = 0x0,   // Non-existent transaction
  46. S1 = 0x1,   // active
  47. S2 = 0x2,   // idle
  48. S3 = 0x4,   // prepared
  49. S4 = 0x8,   // rollback only
  50. S5 = 0x10,  // heuristically completed
  51. R0 = 0x20,  // RM not initialised
  52. //  R1 = 0x40,  // RM initialised
  53. };
  54. class BLACKTIE_TX_DLL XAStateModel
  55. {
  56. public:
  57. XAStateModel();
  58. int transition(XID& xid, enum XAEVENT method, long flags, int rv);
  59. int astate() {return astate_;} // thread association state
  60. int bstate() {return bstate_;} // branch state
  61. static std::string show_flags(long flags);
  62. private:
  63. int transition(int allowable[], int *initial_state, int next_state);
  64. int btransition(int *ini_state, enum XAEVENT method, long flag, int rval);
  65. int atransition(int *ini_state, enum XAEVENT method, long flag, int rval);
  66. int astate_;
  67. int bstate_;
  68. };
  69. } // namespace xa
  70. } //namespace atmibroker
  71. #endif // _XASTATEMODEL_H