让我看看我的理解是否正确。通常,我们应该努力将属于一个“工作单元”的所有操作放在同一个事务下,对吗?这有助于在操作链上出现异常的情况下恢复DB的状态。
然而,在我的特殊情况下,我有一个旧的服务,这并不是很容易插入到我当前的代码中。因此,我必须让它单独运行,并赋予它访问当前应用程序存储数据的同一数据库的权限。
当我必须在数据库中插入一个新项目时,问题就出现了。然后我必须调用服务。如果我在一个事务下执行此操作,则在事务实际提交之前,服务将开始在数据库中查找记录。因此,我开始使用事件侦听器,即PostInsertEventListener和PostDeleteEventListener。
现在它可以正常工作了,因为事务是预先提交的,但这完全打乱了我的代码架构。我已经构建了一系列相互注入的服务,现在我必须声明这两个侦听器类。我想,我能做的最好的事情就是让我的协调器服务实现这两个侦听器接口,但通过这种方式,我将它完全耦合到Hibernate,对吧?
总而言之,对于像我这样的情况,使用这些侦听器真的是正确的方式吗?
发布于 2012-01-31 17:06:30
我不明白你是如何从“我需要在调用外部服务之前提交事务”变成“我决定使用侦听器”的。
为什么不简单地使用下面的代码:
public void someNonTransactionalMethod() {
someTransactionalService.insertThingsInDatabase();
externalService.foo();
}或
public void someMethod() {
someTransactionalService.insertThingsInDatabase();
externalService.foo();
}insertThingsInDatabase在何处使用REQUIRES_NEW传播类型?
https://stackoverflow.com/questions/9076840
复制相似问题