gpt4 book ai didi

java - 事务性 CDI bean : How to force transaction rollback

转载 作者:行者123 更新时间:2023-11-30 02:59:03 26 4
gpt4 key购买 nike

我在 REST 接口(interface)中注入(inject)了 @RequestScoped、@Transactional CDI bean:

@RequestScoped
@Transactional
public class myRestCall
{
@Inject
EntityHandlerService ehs; // contains @PersistenceContext

try
{
// execute business logic, access DB via ehs (JPA / Hibernate)
}
catch(Throwable t)
{
// log exception
// -> rollback transaction
}
}

现在我喜欢在业务逻辑的调用周围进行尝试/捕获,以便我可以正确记录异常。但我需要手动回滚事务,除非我再次抛出我不喜欢的异常。那么这里如何强制事务回滚呢?我知道该怎么做,如果它是一个 EJB:我们可以做

@Resource
private SessionContext ctx;

然后

ctx.setRollbackOnly();

catch中关闭。

但是,它不是 EJB,并且由于资源限制,我无法用它制作 EJB。

最佳答案

如果有人仍在寻找答案,您可以添加 @Resource TransactionSynchronizationRegistry,然后调用 setRollbackOnly();

@RequestScoped
class MyBean {
@Resource
private TransactionSynchronizationRegistry reg;

@Transactional
void yourmethod()
{
try {
// do stuff

} catch (Exception e) {
reg.setRollbackOnly();
}

}
}

如果你不能使用@Resource,你可以使用jndi查找trx resgistry:

java:comp/TransactionSynchronizationRegistry

关于java - 事务性 CDI bean : How to force transaction rollback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36421412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com