java - 事务管理器未回滚

标签 java jdbc transactions

在我的应用程序中,我们使用 TX Manager。 我的应用程序基于 JSF 和 RF3.3 构建,通过 JDBC 连接到 MYSQL 这是场景:-

  1. 用户在 GUI 上输入值。
  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 被调用,但回滚本身并未发生。我尝试在回滚之前和之后使用操作,但没有成功。

最佳答案

正如 @Mark Rotteveel 指出的,如果您的表使用 MyIsam 引擎,事务将不起作用。如果您使用 InnoDB 引擎,请检查 jdbc 连接/jdbc 驱动程序的 autocommit 属性,应将其设置为 false。

关于java - 事务管理器未回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8240642/

相关文章:

javascript - 为什么我无法读取在 POST 中收到的参数?

java - 制作网络服务

java - 如何在使用 rs2xml 填充的 Jtable 中添加复选框

c# - 如果发生错误,using 语句是否会回滚数据库事务?

dart - 如何修复 flutter 中 firestore 的事务错误?

mysql - 没有 START TRANSACTION 语句的回滚在 MySQL 存储过程中不起作用

java - 在 Spring MVC 上将 JSONObject 作为参数传递

java - 按钮 Action 监听器

java - 收到错误 Invalid Oracle URL specified : OracleDataSource. makeURL

java - 结果集耗尽 Oracle 查询