gpt4 book ai didi

java - EJB3 - 处理 RollBackException

转载 作者:行者123 更新时间:2023-12-02 08:38:18 25 4
gpt4 key购买 nike

我有一个 EJB3 应用程序,其中包含一些用于访问数据库的 EJB,并通过 session Bean 作为 Web 服务公开。

现在我需要弄清楚两件事:

1) 有什么方法可以阻止 SQL 异常导致 Web 服务抛出 SOAP 错误吗?事务由容器处理,当前 sql 异常会导致抛出 RollBackException,从而导致事务回滚(期望的行为)并且 Web 服务抛出错误(不期望的行为)。

2) 我希望扩展 Web 服务,使其能够接收实体列表,并使用 session bean 来保存每个实体。但是,我希望每个实体都在自己的事务中执行,这样如果一个实体失败,其他实体就不会受到影响(并且 Web 服务不应出现故障)。

对于 (1),我 try catch RollBackException,但我假设这是在另一个线程的某个地方抛出的,因为永远不会到达 catch block 。我假设对于(2)我需要研究用户事务,但首先更喜欢容器来管理它,其次不知道如何强制使用用户事务。

谢谢。

最佳答案

不,您可以使用容器管理的事务来完成所有这些(这绝对是更好的选择,因为管理事务很痛苦)。

该解决方案的要点是创建第二个仅具有本地接口(interface)和您想要的事务语义的 EJB。然后,Web 服务直接调用的“公共(public)”ejb 通过其本地接口(interface)调用第二个 ejb 来完成实际工作。

大致如下:

public class MyPublicEjb {
@EJB
private MyPrivateImpl impl;

public void doSomething() {
try {
impl.doSomething();
} catch(TXRolledBack) {
// handle rollback ...
}
}
}

我知道这看起来有点难看,但相信我,这比直接操纵交易要好得多。

关于java - EJB3 - 处理 RollBackException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673538/

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