【问题标题】:Seam wrapping request into (JTA) transaction将包装请求缝合到(JTA)事务中
【发布时间】:2010-12-15 12:21:14
【问题描述】:

据我了解,Seam 将每个请求包装成一个事务。我的 web 应用程序(代码到一些接缝状态 bean)目前正在调用一些 EJB 接口,该接口是应用程序服务器的一部分,它还为桌面客户端提供服务(一个完整的服务器应用程序,提供我的 web 应用程序所需的所有功能)。

现在,从 Seam bean 对这些 ejb 方法的后续调用被 Seam 容器包装到它自己的事务中,谢谢,但两者之间没有发生“刷新”,这意味着实体管理器不会返回给我最新的后续调用的数据。

我通过简单地将一些方法添加到 ejb 类中来解决这个问题,这些方法本身会创建一个新的事务(在执行结束时强制“刷新”)。如果一步出错,我很高兴不回滚所有内容。 我在任何地方都找不到如何配置 Seam 以将每个 ejb 调用的执行包装到事务中,而不是包装整个请求执行。

有什么想法吗?

【问题讨论】:

    标签: jakarta-ee seam ejb


    【解决方案1】:

    好吧,Seam 将每个请求包装成 两个 事务(JSF 呈现响应的额外只读事务)。您可以通过disabling Seam 的事务管理禁用此行为,但这将为所有类型的延迟初始化异常打开大门...

    在我遇到此问题的(极少数)情况下,我通常在 EntityManager 上执行手动刷新/刷新。在大多数情况下,不同方法处理的数据应该按其性质分开,但是

    【讨论】:

    • 禁用 Seam 的事务管理并不能解决问题,因为这里需要强制 seam 在每个 ejb 方法调用之后创建(并结束)一个新事务。此外,手动刷新将与我的 mini ejb wrap 具有相同的效果,它会强制刷新本身(并且是首选,因为实体管理器负责它)
    猜你喜欢
    • 2012-12-12
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2021-08-13
    • 2014-09-19
    • 2013-09-20
    相关资源
    最近更新 更多