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()中的异常。谢谢!!!!
根据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
该步骤的writer的逻辑非常简单:它尝试从数据库中读取一行,一旦找到该行,就更新该行。我能够通过在find方法之后设置断点来重现,手动为数据库中的行颠簸列并提交它,然后恢复。 但是,在我的步骤中取消注释重试定义后,没有尝试重试。经过一些调试后,Spring重试逻辑似乎在块的事务中;但是由于不是由编写器中的代码引发的,而是由Spring的块事务提交逻辑引发的,因此根本没有尝试重试。 当我试图在编写