XAResourceManager.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 _XARESOURCEMANAGER_H
  19. #define _XARESOURCEMANAGER_H
  20. #include "CorbaConnection.h"
  21. #include "XAResourceAdaptorImpl.h"
  22. class XAResourceAdaptorImpl;
  23. class xid_cmp
  24. {   
  25. public: 
  26. bool operator()(const XID& xid1, const XID& xid2);
  27. };  
  28. class BLACKTIE_TX_DLL XAResourceManager
  29. {
  30. public:
  31. XAResourceManager(CORBA_CONNECTION *, const char *, const char *, const char *,
  32. CORBA::Long, long, struct xa_switch_t *, XARecoveryLog& log, PortableServer::POA_ptr poa) throw (RMException);
  33. virtual ~XAResourceManager();
  34. int xa_start (XID *, long);
  35. int xa_end (XID *, long);
  36. bool recover(XID& xid, const char* rc); // recover a single XID (on a potentially remote RM)
  37. int recover(); // initiate a recovery scan on this RM
  38. // return the resource id
  39. CORBA::Long rmid(void) {return rmid_;};
  40. void notify_error(XID *, int, bool);
  41. void set_complete(XID*);
  42. const char * name() {return name_;}
  43. int xa_flags();
  44. struct xa_switch_t * get_xa_switch() { return xa_switch_;}
  45. static XID gen_xid(long rmid, long sid, XID &gid);
  46. private:
  47. typedef std::map<XID, XAResourceAdaptorImpl *, xid_cmp> XABranchMap;
  48. XABranchMap branches_;
  49. PortableServer::POA_ptr poa_;
  50. CORBA_CONNECTION* connection_;
  51. const char *name_;
  52. const char *openString_;
  53. const char *closeString_;
  54. CORBA::Long rmid_;
  55. long sid_;
  56. struct xa_switch_t * xa_switch_;
  57. XARecoveryLog& rclog_;
  58. void createPOA();
  59. int createServant(XID &);
  60. XAResourceAdaptorImpl * locateBranch(XID *);
  61. void show_branches(const char *, XID *);
  62. bool isRecoverable(XID &xid);
  63. static SynchronizableObject* lock;
  64. static long counter;
  65. };
  66. #endif // _XARESOURCEMANAGER_H