home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / Software / TemaCD / tcvpa / data1.cab / MyFileGroup / INCLUDE / TxServ.hpp < prev    next >
C/C++ Source or Header  |  1999-06-03  |  6KB  |  130 lines

  1. #ifndef _INC_TXSERV_HPP
  2. #define _INC_TXSERV_HPP
  3. enum TCPsTxStatus {
  4.  TxStat_Active,
  5.  TxStat_Committing,
  6.  TxStat_Committed,
  7.  TxStat_RollingBack,
  8.  TxStat_RolledBack,
  9. };
  10. #define TC_PS_TX_EXCLUSIVE    0x00000001
  11. #define TC_PS_TX_LOG        0x00000002
  12. enum TCPsTxTerm {
  13.  TxTerm_Destroy,
  14.  TxTerm_LetItBe,
  15.  TxTerm_Restart,
  16. };
  17. #define TC_PSWorkCxt    tcPsGetWorkContext()
  18. class PsInstMgr;
  19. class TC_CPsTxContext;
  20. class TC_CPsTxRsc;
  21.  
  22. // **********************************************************************
  23. class TC_PS_EXPORT TC_CPsTxRsc 
  24. {
  25. friend class TC_CPsTxContext;
  26. private:  TC_CPsDataService * m_DataService ;
  27. private:  TC_CPsTxContext * m_TxCxt ;
  28. private:  PsInstMgr * m_InstMgr ;
  29. private:  long m_hConnect ;
  30. private:   TC_CPsTxRsc (TC_CPsTxContext * tx_cxt, TC_CPsDataService * ds, long hConnect)  ;
  31. private:  PsDrvBind * DrvBind () 
  32. {
  33. return m_DataService->GetDataDriver()->GetDrvBind();
  34. } // end of func
  35. // **********************************************************************
  36.  
  37. public:  static  long m_TransientGen ;
  38. public:   ~TC_CPsTxRsc ()  ;
  39. public:  TCPsRetCode Commit ()  ;
  40. public:  TCPsRetCode Rollback ()  ;
  41. public:  void Reset ()  ;
  42. public:  TCPsRetCode CreateObject (TC_CPsObject ** obj, TC_CPsInstID &inst_id) TC_PS_THROW_FUNC ;
  43. public:  TCPsRetCode CreateObject (TC_CPsRef & objRef, TC_CPsInstID &inst_id) TC_PS_THROW_FUNC ;
  44. public:  TCPsRetCode RestoreObject (TC_CPsObject **obj, TC_CPsInstID &inst_id, TCPsDepthMode depth) TC_PS_THROW_FUNC ;
  45. public:  TCPsRetCode RestoreObject (TC_CPsRef & objRef, TC_CPsInstID &inst_id, TCPsDepthMode depth) TC_PS_THROW_FUNC ;
  46. public:  TCPsRetCode ReleaseObject (TC_CPsObject * obj) TC_PS_THROW_FUNC ;
  47. public:  TCPsRetCode RestoreAssoc (TC_CPsObject *obj, const char * attr_name, TCPsDepthMode depth) TC_PS_THROW_FUNC ;
  48. public:  TCPsRetCode ReleaseAssoc (TC_CPsObject *obj, const char * attr_name)  ;
  49. public:  TCPsRetCode AssociateObject (TC_CPsObject * owner, TC_CPsObject * assoc_obj, const char * attr_name)  ;
  50. public:  TCPsRetCode DisassociateObject (TC_CPsObject * owner, TC_CPsObject * assoc_obj, const char * attr_name)  ;
  51. public:  TCPsRetCode StoreObject (TC_CPsObject *obj, TCPsDepthMode depth)  ;
  52. public:  TCPsRetCode StoreAssoc (TC_CPsObject *obj, const char * attr_name, TCPsDepthMode depth)  ;
  53. public:  TCPsRetCode RemoveObject (TC_CPsObject *obj)  ;
  54. public:  TCPsRetCode RemoveAssoc (TC_CPsObject *obj, const char * attr_name)  ;
  55. public:  TC_CPsObject * GetObject (TC_CPsInstID &inst_id)  ;
  56. public:  TCPsRetCode FetchObject (TC_CPsObject **obj, TCPsHClass hClass)  ;
  57. public:  TCPsRetCode FetchIntoResult (TC_CPsAtomicResult * result, BOOL * stop)  ;
  58. public:  TCPsRetCode BeginQuery (TC_CPsQuery * query)  ;
  59. public:  BOOL LockObject (TC_CPsObject * obj, TCPsLockMode lock_mode, long timeout = -1)  ;
  60. public:  BOOL UnlockObject (TC_CPsObject * obj)  ;
  61. private:  TCPsRetCode _ReleaseObj (TC_CPsObject * obj)  ;
  62. private:  TC_CPsObject * _CreateObj (TC_CPsInstID &inst_id, BOOL registration=TRUE)  ;
  63. private:  TCPsRetCode _RestoreExistedObj (TC_CPsObject * obj, TCPsDepthMode depth, PsObjGraph * objGraph)  ;
  64. private:  TCPsRetCode _RestoreNewObj (TC_CPsObject **ppobj, TC_CPsInstID &inst_id, TCPsDepthMode depth, PsObjGraph * objGraph)  ;
  65. private:  TCPsRetCode _RestoreDescImplements (TC_CPsObject * obj, TCPsHClass hSetClass)  ;
  66. private:  TCPsRetCode _RestoreRelations (TC_CPsObject * obj, TCPsDepthMode depth, PsObjGraph * objGraph)  ;
  67. private:  TCPsRetCode _RestoreRelObject (TC_CPsObject * obj,  TC_CPsAttribInfo atInfo, TCPsDepthMode depth, PsObjGraph * objGraph)  ;
  68. private:  TCPsRetCode _RestoreRelCollect (TC_CPsObject * obj,  TC_CPsAttribInfo atInfo, TCPsDepthMode depth, PsObjGraph * objGraph)  ;
  69. private:  void _ClearFailedCltn (TC_CPsAttribInfo atInfo, TC_CPsCollection * cltnAdapter, void * cltn)  ;
  70. private:  TCPsRetCode _StoreObj (TC_CPsObject * obj, TCPsDepthMode depth, PsObjGraph * objGraph)  ;
  71. private:  TCPsRetCode _StoreRelations (TC_CPsObject * obj, TCPsDepthMode depth, PsObjGraph * objGraph)  ;
  72. private:  TCPsRetCode _StoreRelCollect (TC_CPsObject * obj,  TC_CPsAttribInfo atInfo, TCPsDepthMode depth, PsObjGraph * objGraph)  ;
  73. private:  TCPsRetCode _StoreObjGraph (PsObjGraph * objGraph)  ;
  74. private:  TCPsRetCode _DrvStoreObj (TC_CPsObject * obj, int store_opt)  ;
  75. private:  TCPsRetCode _RemoveObj (TC_CPsObject *obj)  ;
  76. private:  TCPsRetCode _DrvRemoveObj (TC_CPsInstID * inst_id)  ;
  77. public:  void Trace (char * title="OBJECT INSTANCES")  ;
  78.  
  79. }; // end of class TC_CPsTxRsc
  80.  
  81. // **********************************************************************
  82.  
  83. // **********************************************************************
  84. class TC_PS_EXPORT TC_CPsTxContext 
  85. {
  86. friend class TC_CPsWorkContext;
  87. private:  static  TC_TKeyList <TC_CPsTxContext> m_Chain ;
  88. private:  TC_TKeyNode <TC_CPsTxContext> m_Node ;
  89. private:  static  long m_TxCounter ;
  90. private:  TCPsTxStatus m_Status ;
  91. private:  long m_Flags ;
  92. private:  long m_ThrID ;
  93. private:  TC_CPsTxRsc * m_TxRsc ;
  94. private:   TC_CPsTxContext (TC_CPsDataService * ds, long hConnect, long tx_flag)  ;
  95. private:   ~TC_CPsTxContext ()  ;
  96. public:  long GetTxID ()  ;
  97. public:  long GetTxFlags ()  ;
  98. public:  TCPsTxStatus GetTxStatus ()  ;
  99. public:  TC_CPsTxRsc * GetTxRsc ()  ;
  100. public:  BOOL IsSuspended ()  ;
  101. public:  TCPsRetCode Commit ()  ;
  102. public:  TCPsRetCode Rollback ()  ;
  103. public:  void Restart ()  ;
  104. public: static int GetTxCount ()  ;
  105.  
  106. }; // end of class TC_CPsTxContext
  107.  
  108. // **********************************************************************
  109.  
  110. // **********************************************************************
  111. class TC_PS_EXPORT TC_CPsWorkContext 
  112. {
  113. private:  static  TC_CLock m_Lock ;
  114. public:   TC_CPsWorkContext ()  ;
  115. public:  TC_CPsTxContext * Begin (const char * ds_name, long tx_flag)  ;
  116. public:  TC_CPsTxContext * Current ()  ;
  117. public:  TC_CPsTxContext * Suspend ()  ;
  118. public:  TCPsRetCode Resume (TC_CPsTxContext * tx_cxt)  ;
  119. public:  TCPsRetCode Commit (TCPsTxTerm tx_term)  ;
  120. public:  TCPsRetCode Rollback (TCPsTxTerm tx_term)  ;
  121. public:  TCPsRetCode Destroy (TC_CPsTxContext * tx_cxt=0)  ;
  122. public:  TCPsRetCode Restart (TC_CPsTxContext * tx_cxt)  ;
  123.  
  124. }; // end of class TC_CPsWorkContext
  125.  
  126. // **********************************************************************
  127. TC_PS_EXPORT TC_CPsWorkContext * tcPsGetWorkContext ()  ;
  128.  
  129. #endif // _INC_TXSERV_HPP
  130.