내 응용 프로그램에서 TX Manager를 사용하고 있습니다. 내 응용 프로그램이 MYSQL 에 JDBC 연결과 JSF와 RF3.3을 기반으로 다음 시나리오입니다 : -트랜잭션 관리자가 ROLLBACK되지 않음
- 사용자가 GUI에 값을 입력합니다.
- Backing Bean의 모든 데이터를 수집 한 후 트랜잭션 관리자의 인스턴스를 얻습니다.
- 그럼 나는 TX를 시작한다.
- 모든 값이 DB1에 삽입됩니다.
- 다른 DB2에 값을 삽입하도록 SOAP 호출이 작성됩니다.
- DB2 삽입에 실패 할 경우 DB1에서 항목을 롤백해야합니다. 7.이 경우 tx.rollBack()을 사용합니다.
문제가 있지만 tx.rollBack이 실행 되더라도 항목이 제거되지 않습니다. 나는 afterRollBackAction를 선언 시도하고 DB1에서 삭제 쿼리를 해고 그러나 그것은 나에게 예외 내가 properly..There 예외없는 내 코드를 확인
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에서 항목을 삭제하지 않는지 말해 줄 수 있습니까?
코드 조각 : - txManager.rollback 호출하지만, 그 자체가 발생하지 않는 롤백됩니다 있지만
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;
. 롤백 전후의 작업을 시도했지만 아무 소용이 없습니다.
테이블이 InnoDB입니까? 그들이 MyISAM 인 경우, 트랜잭션 제어하에 있지 않으므로 롤백 할 수 없습니다. –