检查JTA事务是否成功提交

2024-01-10

有没有办法检查当前事务是否在 JPA 实体侦听器中提交,如下所示?

@ApplicationScoped
public class EntityListener {

    @Inject
    private Event<EntityEvent> event;
    @Inject
    private EntityManager entityManager;
    @Resource
    private UserTransaction userTransaction;

    @PostPersist
    @PostUpdate
    @PostRemove
    public void onChange(Entity entity) {

        // This is only a piece of pseudo code.
        if (userTransaction.isComitted()) {
            // Do something.
        }
    }
}

JPA 2.1 中的实体侦听器被视为依赖于 CDI 注入的 CDI bean,并且事务上下文以及 CDI 在实体侦听器中可用。因此,这些注入在实体侦听器中是可能的(带或不带注释@ApplicationScoped)。 JPA 2.1 规范指出,

持久化提供者只需要支持CDI注入 进入 Java EE 容器环境中的实体侦听器。如果 CDI 是 未启用,持久性提供程序不得调用实体侦听器 这取决于 CDI 注射。

当从 Java EE 环境中调用时,回调侦听器 对于实体共享调用的企业命名上下文 组件,以及实体回调方法在 交易和安全上下文调用组件的 调用回调方法的时间。

例如,如果事务提交是由于正常情况而发生的 使用事务终止会话 bean 业务方法 属性RequiresNew, the PostPersist and PostRemove回调 在命名上下文、事务上下文和 该组件的安全上下文。

是否存在一种方法可以知道事务是否在 JPA 实体侦听器中成功提交,以便可以相应地采取不同的操作或根本不采取任何操作?

我预计事务不会在提交发生后立即完全完成,因此,应该存在一种方法来查看提交是否发生,特别是,我正在寻找一种模拟事务范围事件的方法,即在事务结束时触发的事件,给出事务的状态,无论事务是提交还是回滚。

使用具有 EclipseLink 2.6.0 (JPA 2.1) 的 GlassFish Server 4.1 / Java EE 7。


请参考CDI 规范文档 https://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#transactional_observer_methods.

10.4.5。事务观察者方法

事务观察者方法是在期间接收事件通知的观察者方法 交易完成之前或之后的阶段,其中 事件被解雇。如果事件发生时没有交易正在进行 被解雇后,他们会与其他观察员同时收到通知。

  • 在事务的完成之前阶段调用完成之前观察者方法。
  • 在事务的完成后阶段调用完成后观察者方法。
  • 仅当事务完成后阶段才会调用成功后观察者方法
    成功完成。
  • 仅当事务失败时,才会在事务完成后阶段调用失败后观察者方法。

枚举javax.enterprise.event.TransactionPhase识别 事务观察者方法的种类:

public enum TransactionPhase {
    IN_PROGRESS,
    BEFORE_COMPLETION,
    AFTER_COMPLETION,
    AFTER_FAILURE,
    AFTER_SUCCESS
}

事务观察者方法可以通过指定任何 值以外的值IN_PROGRESS for during:

void onDocumentUpdate(@Observes(during=AFTER_SUCCESS) @Updated Document doc) { ... }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查JTA事务是否成功提交 的相关文章

随机推荐

  • RedirectToAction 位于区域之外

    我最近在工作中更新了我们的 MVC 2 项目以使用 Areas 但是我遇到了一些问题RedirectToAction method 我们的一些管制员等仍然位于我们的区域之外 这些控制器包括家庭控制器等 我该如何做RedirectToActi
  • Python 静态方法并不总是可调用的

    在解析属性时使用 dict https docs python org 3 library stdtypes html object dict my staticmethod https docs python org 3 library
  • 使用 rsync(或 svn、git、cvs)进行部署并忽略部署期间不一致的状态?

    我们目前正在讨论通过 rsync 部署网站 但是 在 rsync 过程中 应用程序处于不一致的状态 因为某些文件可能已经同步 而其他文件仍保留旧版本 对吗 人们如何处理这个问题 我猜想通过 svn git cvs 部署时也存在同样的问题 我
  • MongoDB 中的查询

    我正在尝试使用rmongodb从 MongoDB 数据库获取信息以便在 R 中进一步处理 但是 我在真正开始时遇到了一些困难 这个有效 cursor lt mongo find mongo people query list last na
  • iOS 上的 Xamarin Forms 如何设置页面的屏幕方向?

    所以标题说明了一切 我现在对 iOS 很关心 我试图起诉我的基本页面 LandscapeContentPage 的自定义渲染器 这希望强制它呈现为横向 我没有成功 我尝试使用我发现的一个 hack 在 ViewDidAppear 中你提供了
  • 回形针 - 每个样式的默认样式?可能的

    我正在使用回形针 并且有多种样式 styles gt large gt 300x300 gt medium gt 150x150 gt small gt 50x50 gt thumb gt 30x30 gt 问题是default stype
  • Linux下自动调整进程优先级

    我正在尝试编写一个程序 根据配置文件 基本上是路径 优先级对 自动设置进程优先级 我认为最好的解决方案是用一个内核模块来替换 execve 系统调用 太糟糕了 系统调用表在内核版本 gt 2 6 0 中没有导出 因此如果没有系统调用表 就不
  • Crashlytics 记录错误

    我正在使用 iOS 版 Crashlytics 记录错误 NSDictionary detail message errorWithURL response jsonString Crashlytics sharedInstance rec
  • 如何通过代理/防火墙添加网络引用?

    我目前在工作中处于防火墙后面 我正在测试已部署到 我的网站的某些内容 并且工作代理似乎在某种程度上阻止了它 基本上我收到的消息是 由于对象的当前状态 操作无效 我已将其归结为我的代理干扰 但我看不到任何高级设置或任何可以设置为通过我的代理访
  • Python:解析 JSON 时出现 Keyerror

    我刚刚编写了一个程序来解析 api 中的一些数据 API 以 JSON 格式返回数据 当我尝试解析它时 它给了我一个关键错误 Traceback most recent call last File test py line 20 in
  • 避免 Python 中不必要的切片复制

    对于这样的情况 是否有一个常见的习惯用法可以避免无意义的切片复制 gt gt gt a bytearray b hello gt gt gt b bytearray b goodbye cruel world gt gt gt a exte
  • sql-左连接-计数

    假设我有两张桌子 文章和评论 当我从文章表中选择列时 我还想在同一个选择语句中选择文章的评论数 假设这两个表之间的公共字段是articleid 我怎么做 我可以完成它 但我不知道我的方法是否有效 所以我想学习正确的方法 这应该更有效 因为分
  • 如何在android中显示所有共享选项?

    我正在开发一个 Android 应用程序 想通过打开所有设备中可用的共享选项 但目前该列表显示电子邮件 蓝牙 Gmail 和消息传递 BBC 新闻等其他应用程序在同一设备中显示了更多选项 如 Bump Picasa 等 如何显示所有可用选项
  • 在java中读取JSON对象[重复]

    这个问题在这里已经有答案了 我们如何在 JSP Servlet 或任何其他 Java 程序中读取 JSON 对象 我建议使用Gson http code google com p google gson 为了这 它的优点是对泛型的支持非常好
  • 即使首字母丢失,Elasticsearch 也会提供拼写检查建议

    我创建一个这样的索引 curl location request PUT http 127 0 0 1 9200 test header Content Type application json data raw settings num
  • 编译 Qt 库以在 Visual Studio 2008 上运行,为什么 nmake 失败?

    我正在尝试让我的 Visual Studio Qt 插件正常工作 因此为了重新编译 Qt 库 我从 VS 命令提示符运行了以下命令 c Qtfolder gt configure platform win32 msvc2008 之后我运行
  • Apple TestFlight:“此版本不再可用于测试”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在使用 TestFlight 进行内部 Beta 测试 一切都已设置完毕并且已经运行了一段时间 在提交的二进制文件之一被 AppSt
  • 在Python中使用有序字典作为对象字典

    我不知道为什么这不起作用 我正在使用odict http dev pocoo org hg sandbox raw file tip odict py班级来自PEP 372 http www python org dev peps pep
  • C# 加载二进制文件

    请告诉我最好 最快的方法 1 将非常小的二进制文件加载到内存中 例如图标 2 加载 读取大小为 512Mb 的非常大的二进制文件 3 当您不想考虑大小 速度而只需要做一件事时 您的常见选择 将所有字节读入内存 谢谢你 附 抱歉 也许是一个微
  • 检查JTA事务是否成功提交

    有没有办法检查当前事务是否在 JPA 实体侦听器中提交 如下所示 ApplicationScoped public class EntityListener Inject private Event