在我的應用程序中,我們使用的是TX管理器。 我的應用程序是建立在JSF和RF3.3與JDBC連接到MySQL 這裏的情景: - 在GUI事務管理器沒有得到ROLLBACKed
- 用戶輸入值。
- 收集Backing Bean中的所有數據後,我得到事務管理器的實例。
- 然後我開始TX。
- 所有的值都插入到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)
我檢查了我的代碼properly..There也不例外(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被調用,但回滾本身沒有發生。我試着在回滾之前和之後使用動作,但無濟於事。
您的表InnoDB?如果它們是MyISAM,那麼它們不受事務控制,不能回滾。 –