Менеджер транзакций не получает ROLLBACK - PullRequest
1 голос
/ 23 ноября 2011

В моем приложении мы используем TX Manager. Мое приложение построено на JSF и RF3.3 с возможностью подключения JDBC к MYSQL Вот сценарий: -

  1. Пользователь вводит значение в графическом интерфейсе.
  2. после сбора всех данных в Backing Bean я получаю экземпляр Transaction Manager.
  3. Тогда я начинаю передачу.
  4. Все значения вставляются в DB1.
  5. Вызывается SOAP для вставки значений в другую DB2.
  6. В случае сбоя при вставке в DB2 запись из DB1 должна откатиться. 7. Для этого я использую tx.rollBack ().

Проблема в том, что tx.rollBack выполняется даже тогда, когда запись не удаляется. Я попытался объявить afterRollBackAction и запустил запрос на удаление в DB1, но это дает мне исключение

org.jboss.util.NestedSQLException: Transaction TransactionImple < ac, BasicAction: a7c198d:6:4eccc549:a status: ActionStatus.ABORTED > cannot proceed STATUS_ROLLEDBACK; - nested throwable: (javax.transaction.RollbackException: Transaction TransactionImple < ac, BasicAction: a7c198d:6:4eccc549:a status: ActionStatus.ABORTED > cannot proceed STATUS_ROLLEDBACK)

Я правильно проверил свой код .. Нет исключений (NPE, SQL или любые другие типы исключений) ..

Подскажите, пожалуйста, почему TX не откатывается и не удаляет запись из DB1?

Фрагмент кода: -

try
{
txManager.begin()

cStmt.setString(1,Name);
cStmt.setString(2,Address);
cStmt.setString(3,Number);
cStmt.registerOutParameter(10, java.sql.Types.INTEGER);
cStmt.execute();
int errorCode=cStmt.getShort(10);
if(errorCode==0)
{
WebService Stub =new WebServiceStub();
CreateIdentity create=new CreateIdentity();
create.setName(Name);
create.setAddress(Address);
create.setNumber(Number);
CreateIdentityResponse createResponse=stub.createIdentity(create);
int errorCodeFromWebService=createResponse.getMsg();
 switch(errorCodeFromWebService)
{
case 0:
errorCode=0;
 txmanager.commit();

break;
case -1:
txManager.rollback();
break;
default:
txManager.rollback();
}
else
{
txManager.rollback();
}
return errorCode;

Хотя txManager.rollback вызывается, но сам откат не происходит. Я пытался использовать действия до и после отката, но безрезультатно.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2011

Как указал @Mark Rotteveel, если в ваших таблицах не используются транзакции с движком MyIsam. Если вы используете движок InnoDB, проверьте свойство autocommit вашего jdbc-соединения / драйвера jdbc, для него должно быть установлено значение false.

0 голосов
/ 23 ноября 2011

Некоторый код поможет ... Я думаю, что ошибка в том, что вы запускаете его в конце отката транзакции, но я не слишком уверен в этом.

...