В моем приложении мы используем TX Manager.
Мое приложение построено на JSF и RF3.3 с возможностью подключения JDBC к MYSQL
Вот сценарий: -
- Пользователь вводит значение в графическом интерфейсе.
- после сбора всех данных в Backing Bean я получаю экземпляр Transaction Manager.
- Тогда я начинаю передачу.
- Все значения вставляются в DB1.
- Вызывается SOAP для вставки значений в другую DB2.
- В случае сбоя при вставке в 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 вызывается, но сам откат не происходит. Я пытался использовать действия до и после отката, но безрезультатно.