首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于事务和事件监听器

关于事务和事件监听器
EN

Stack Overflow用户
提问于 2012-01-31 16:58:06
回答 1查看 263关注 0票数 0

让我看看我的理解是否正确。通常,我们应该努力将属于一个“工作单元”的所有操作放在同一个事务下,对吗?这有助于在操作链上出现异常的情况下恢复DB的状态。

然而,在我的特殊情况下,我有一个旧的服务,这并不是很容易插入到我当前的代码中。因此,我必须让它单独运行,并赋予它访问当前应用程序存储数据的同一数据库的权限。

当我必须在数据库中插入一个新项目时,问题就出现了。然后我必须调用服务。如果我在一个事务下执行此操作,则在事务实际提交之前,服务将开始在数据库中查找记录。因此,我开始使用事件侦听器,即PostInsertEventListener和PostDeleteEventListener。

现在它可以正常工作了,因为事务是预先提交的,但这完全打乱了我的代码架构。我已经构建了一系列相互注入的服务,现在我必须声明这两个侦听器类。我想,我能做的最好的事情就是让我的协调器服务实现这两个侦听器接口,但通过这种方式,我将它完全耦合到Hibernate,对吧?

总而言之,对于像我这样的情况,使用这些侦听器真的是正确的方式吗?

EN

回答 1

Stack Overflow用户

发布于 2012-01-31 17:06:30

我不明白你是如何从“我需要在调用外部服务之前提交事务”变成“我决定使用侦听器”的。

为什么不简单地使用下面的代码:

代码语言:javascript
复制
public void someNonTransactionalMethod() {
    someTransactionalService.insertThingsInDatabase();
    externalService.foo();
}

代码语言:javascript
复制
public void someMethod() {
    someTransactionalService.insertThingsInDatabase();
    externalService.foo();
}

insertThingsInDatabase在何处使用REQUIRES_NEW传播类型?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9076840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档