DbService.c
上传用户: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. #include "tx/request.h"
  19. #ifdef TX_RC
  20. #include "testrm.h"
  21. static void inject_fault(int xa_method, int type)
  22. {
  23. userlogc( "TxLog inject_fault check type=0x%x", type);
  24. if (type & TX_TYPE_HALT) {
  25. fault_t fault1 = {0, 202, O_XA_COMMIT, XA_OK, F_HALT, (void*) 0};
  26. userlogc( "TxLog inject_fault adding halt");
  27. (void) dummy_rm_add_fault(&fault1);
  28. }
  29. }
  30. #else
  31. #define inject_fault(xa_method, type)
  32. #endif
  33. #ifdef UNITTEST
  34. void tx_db_service(TPSVCINFO *svcinfo)
  35. #else
  36. void BAR(TPSVCINFO * svcinfo)
  37. #endif
  38. {
  39. test_req_t *req = (test_req_t *) svcinfo->data;
  40. test_req_t *resp = (test_req_t *) tpalloc((char*) "X_C_TYPE", (char*) "test_req", 0);
  41. product_t *p = products;
  42. userlogc_debug( "TxLog %s service %s running", __FUNCTION__, TXTEST_SVC_NAME);
  43. resp->status = -1;
  44. inject_fault(O_XA_COMMIT, req->txtype);
  45. for (p = products; p->id != -1; p++) {
  46. if (req->prod == p->id) {
  47. int rv;
  48. strncpy(req->db, p->dbname, sizeof(req->db));
  49. userlogc_debug("TxLog Service %s %4d: prod=%8s (id=%d) op=%c tx=0x%x data=%s", TXTEST_SVC_NAME,
  50. req->id, p->pname, p->id, req->op, req->txtype, req->data);
  51. rv = p->access(req, resp);
  52. userlogc_debug("TxLog Service %s %4d: resp->status=%d rv=%d", TXTEST_SVC_NAME, req->id, resp->status, rv);
  53. break;
  54. }
  55. }
  56. tpreturn(TPSUCCESS, resp->status, (char *) resp, sizeof (test_req_t), 0);
  57. }