在我的应用程序中,我们使用的是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,那么它们不受事务控制,不能回滚。 –