XAException: сбой отката при двухфазной фиксации из-за исключения XA - PullRequest
0 голосов
/ 22 марта 2012

Хорошо, на первый взгляд, простое внедрение двухфазной фиксации сталкивается с проблемами. У меня две базы данных на сервере DB2, приложение, размещенное на Websphere 6.1. Управление транзакциями осуществляется Atomikos. Подключение к базе данных через jndi. Я начинаю транзакцию UserTransaction, выполняю обновление для DB1, теряю соединение с DB, одновременно обновляя DB2, чтобы получить исключение StaleConnectionException , которое вызывает откат. Теперь в идеале TM должен выполнить откат для транзакции. Тем не менее, я получаю XAException, как показано ниже:

[3/22/12 11:52:21:022 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC opened incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_0.txt

[3/22/12 11:52:21:053 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC closed incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_0.txt
[3/22/12 11:52:21:053 EDT] 00000023 WSRdbXaResour E   DSRA0304E:  XAException occurred. XAException contents and details are: 
The DB2 Error message is : [jcc][t4][10335][11391][3.53.70] Invalid operation: Connection is closed. ERRORCODE=-4470, SQLSTATE=08003
The DB2 Error code is    : -4470
The DB2 SQLState is      : 08003
.
[3/22/12 11:52:21:053 EDT] 00000023 WSRdbXaResour E   DSRA0302E:  XAException occurred.  Error code is: XAER_RMFAIL (-7).  Exception is: [jcc][t4][10401][12066][3.53.70] XA exception: XAER_RMFAIL : [jcc][t4][10335][11391][3.53.70] Invalid operation: Connection is closed. ERRORCODE=-4470, SQLSTATE=08003 ERRORCODE=-4228, SQLSTATE=null
[3/22/12 11:52:21:085 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC opened incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_1.txt
[3/22/12 11:52:21:100 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC closed incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_1.txt
[3/22/12 11:52:21:116 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC opened incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_2.txt
[3/22/12 11:52:21:163 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC closed incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_2.txt
[3/22/12 11:52:21:194 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC opened incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_3.txt
[3/22/12 11:52:21:225 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC closed incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_3.txt
[3/22/12 11:52:21:256 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC opened incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_4.txt
[3/22/12 11:52:21:288 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC closed incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_4.txt
[3/22/12 11:52:21:288 EDT] 00000023 WSRdbXaResour E   DSRA0304E:  XAException occurred. XAException contents and details are: 
The DB2 Error message is : [jcc][t4][2030][11211][3.53.70] A communication error occurred during operations on the connection's underlying socket, socket input stream, 
or socket output stream.  Error location: T4Agent.sendRequest().  Message: Connection reset by peer: socket write error. ERRORCODE=-4499, SQLSTATE=08001
The DB2 Error code is    : -4499
The DB2 SQLState is      : 08001
.
[3/22/12 11:52:21:288 EDT] 00000023 WSRdbXaResour E   DSRA0302E:  XAException occurred.  Error code is: XA_RETRY (4).  Exception is: [jcc][t4][10401][12066][3.53.70] XA exception: XA_RETRY : [jcc][t4][2030][11211][3.53.70] A communication error occurred during operations on the connection's underlying socket, socket input stream, 
or socket output stream.  Error location: T4Agent.sendRequest().  Message: Connection reset by peer: socket write error. ERRORCODE=-4499, SQLSTATE=08001 ERRORCODE=-4228, SQLSTATE=null
[3/22/12 11:52:21:288 EDT] 00000023 ConnectionEve A   J2CA0056I: The Connection Manager received a fatal connection error from the Resource Adapter for resource jdbc/myDatasource1.  The exception which was received is com.ibm.db2.jcc.b.po: [jcc][t4][10401][12066][3.53.70] XA exception: XA_RETRY : [jcc][t4][2030][11211][3.53.70] A communication error occurred during operations on the connection's underlying socket, socket input stream, 
or socket output stream.  Error location: T4Agent.sendRequest().  Message: Connection reset by peer: socket write error. ERRORCODE=-4499, SQLSTATE=08001 ERRORCODE=-4228, SQLSTATE=null:com.ibm.db2.jcc.b.tn: [jcc][t4][2030][11211][3.53.70] A communication error occurred during operations on the connection's underlying socket, socket input stream, 
or socket output stream.  Error location: T4Agent.sendRequest().  Message: Connection reset by peer: socket write error. ERRORCODE=-4499, SQLSTATE=08001:java.net.SocketException: Connection reset by peer: socket write error
[3/22/12 11:52:21:319 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC opened incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_5.txt
[3/22/12 11:52:21:335 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC closed incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_5.txt
[3/22/12 11:52:21:350 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC opened incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_6.txt
[3/22/12 11:52:21:397 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC closed incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_6.txt
[3/22/12 11:52:21:413 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC opened incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_7.txt
[3/22/12 11:52:21:444 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC closed incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_7.txt
[3/22/12 11:52:21:522 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC opened incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_8.txt
[3/22/12 11:52:21:553 EDT] 00000023 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC closed incident stream file C:\Program Files\IBM\SDP\runtimes\base_v61\profiles\was61profile1\logs\ffdc\server1_00000023_12.03.22_11.52.21_8.txt
[3/22/12 11:53:16:804 EDT] 00000023 SystemOut     O Transaction Failed
[3/22/12 11:53:21:522 EDT] 0000000f InternalDB2Un I   DSRA8203I: Database product name : DB2/NT
[3/22/12 11:53:21:522 EDT] 0000000f InternalDB2Un I   DSRA8204I: Database product version : SQL09056
[3/22/12 11:53:21:522 EDT] 0000000f InternalDB2Un I   DSRA8205I: JDBC driver name  : IBM DB2 JDBC Universal Driver Architecture
[3/22/12 11:53:21:522 EDT] 0000000f InternalDB2Un I   DSRA8206I: JDBC driver version  : 3.53.70
[3/22/12 11:53:21:522 EDT] 0000000f InternalDB2Un I   DSRA8212I: DataStoreHelper name is: com.ibm.websphere.rsadapter.DB2UniversalDataStoreHelper@150a150a.
[3/22/12 11:53:21:522 EDT] 0000000f WSRdbDataSour I   DSRA8208I: JDBC driver type  : 4
[3/22/12 11:53:21:585 EDT] 0000000f WSRdbXaResour E   DSRA0304E:  XAException occurred. XAException contents and details are: "".
[3/22/12 11:53:21:585 EDT] 0000000f WSRdbXaResour E   DSRA0302E:  XAException occurred.  Error code is: XAER_NOTA (-4).  Exception is: [jcc][t4][10401][12066][3.53.70] XA exception: XAER_NOTA ERRORCODE=-4228, SQLSTATE=null

После этого таблица DB1, для которой было выполнено обновление, становится LOCKED. До сих пор я пробовал следующее, но все еще не смог выполнить откат:

  1. запрос использует незафиксированные операции чтения ('ur')
  2. Для автоматической фиксации соединения установлено значение false, а для IsolationLevel - * TRANSACTION_READ_UNCOMMITTED *
  3. Увеличены различные значения времени ожидания для источника данных и службы транзакций.
  4. Минимальное количество подключений к пулу подключений: 0, Политика очистки: FullPool
  5. StaleConnectionException перехватывается и вызывается UserTransaction.rollback () из блока catch.

Как мне использовать 2-фазную фиксацию и XAtransactions для восстановления после сбоя БД? Любые указатели на то, что должно быть сделано для этого?

...