当前位置: 首页 > 知识库问答 >
问题:

EJB 3.1事务回滚不起作用

臧令
2023-03-14

public void A()抛出ApplicationException{

.....//some logic here

doInsert(); //entity layer method that perform the insert operation

throw new ApplicationException(); // this is only for test

}

这是方法B():

   A(); //this method is called n time in a loop but it doesn't matter
public ApplicationException() {

   super();

}

}

显然,如果删除方法B()中的catch块,就不会出现这种行为。现在,我想知道是否有一种方法可以回滚我的事务,即使我捕捉到方法B()中的异常。谢谢!!!!

共有1个答案

马哲
2023-03-14

根据EJB3.1规范的第14.2.1节:

被检查的html" target="_blank">应用程序异常异常可以通过在bean的businessinterface、no-interface视图、home interface、component interface和web服务endpoint的方法的throws子句中列出来定义。未检查异常的应用程序异常通过使用ApplicationException元数据注释或在部署描述符中使用application-exception元素表示来定义为应用程序异常。

您的exception类扩展了exception,因此它是一个检查异常,因此忽略@ApplicationException注释。如果希望在抛出此异常时回滚异常,则应该在捕获异常后使用ejbcontext.setrollbackonly(也可以在抛出异常之前完成,但从catch块中完成可能是更好的样式,因为它强调“处理”异常)。或者,您可以将异常更改为扩展runtimeexception,但您可能不想这样做,这取决于您对未检查异常的感觉。

 类似资料:
  • 我在Spring Boot应用程序中有一个Javers实现。Mongo4.4被用作数据库。从MongoDB4.4开始,您可以在事务中创建文档。 我在创建对象时模拟了一个异常。如预期的那样,对象没有在数据库中创建,但是一个新的快照被添加到jv_snapshots集合中。 控制器:

  • 问题内容: 我有一个MySQL数据库,正在使用。 由于某些原因,我无法使事务正常运行。如果我打电话,它不会回滚。 示例代码: 结果是将另一行添加到myTable。谁能想到一个原因? 问题答案: 您使用的是myIsam还是innodb?据我所知,它仅适用于innodb

  • 我使用MyBatis 3.4.5和Spring 4.1.6。我检查了抽象类GenericException(扩展Exception)和CustomException(扩展GenericException我在德克萨斯州为GenericException设置了默认回滚: 我不明白怎么回事。有关信息:我需要在TimerStatePushService中回滚事务,而不是在Service1中回滚事务。

  • 在我的一般问题之后,我有一个使用Spring的特定问题,我想在下面每次执行DAO方法后回滚特定的测试方法。 添加和未能回滚插入 此外,在之前/之后获取连接并回滚也不会产生影响 我应该如何使用TestNG框架回滚单元测试?大多数答案使用JUnit的 我未能使用TestNG自动接线: 但是成功地使用了和include配置类includes jdbcTemplate/DataStource TestNG

  • 我们有一个Spring事务回滚问题,其中回滚似乎不起作用 在用注释的服务层方法中,我调用三个不同的类来插入3条记录 中间插入从第四个表执行get以填充描述字段,但此get失败。我希望第一次插入会回滚,但它似乎没有发生 几点: 获取方法抛出运行时异常 我们使用和中定义的。Bean是在中创建的,它被导入到 在层 中没有 注释 我们已经使用了