从 Spring 4.1.6 升级到 4.2.4 突然出现 TransactionRequiredException

2024-05-05

我已经从 4.1.6.Release 升级到最新的 Spring 版本到 4.2.4.Release,突然之间,之前运行顺利的所有功能现在抛出以下异常。

 javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:277) ~[na:4.2.4.RELEASE]
at com.sun.proxy.$Proxy51.persist(Unknown Source) ~[na:na]

拦截器类

public class MessageInterceptor implements EndpointInterceptor {

    @Resource
    private SaveMessageDO saveMessageDO;

    @Override
    public boolean handleRequest(MessageContext messageContext, Object endpoint) {
     saveMessageDO.addMessage(messageContext.getRequest()));        
     return true;
    }

    @Override
    public boolean handleResponse(MessageContext messageContext, Object endpoint) {
        return false;
    }

    @Override
    public boolean handleFault(MessageContext messageContext, Object endpoint) {
        return false;
    }

    @Override
    public void afterCompletion(MessageContext messageContext, Object endpoint, Exception ex) {

    }
}


SaveMessageDO.class
    /**
     * The entity manager.
     */
    @PersistenceContext(unitName = "xxxHibernatePersistenceUnit")
    private EntityManager entityManager;


    /**
     * Adds the message.
     *
     * @param message the message
     */
    @Transactional(value = "xyzTxManager", propagation = Propagation.REQUIRED)
    public void addMessage(final Message message) {
        entityManager.persist(message);
    }

SharedEntityManagerCreator.java 中发生异常

else if (transactionRequiringMethods.contains(method.getName())) {
                    // We need a transactional target now, according to the JPA spec.
                    // Otherwise, the operation would get accepted but remain unflushed...
                    if (target == null || !TransactionSynchronizationManager.isActualTransactionActive()) {
                        throw new TransactionRequiredException("No EntityManager with actual transaction available " +
                                "for current thread - cannot reliably process '" + method.getName() + "' call");
                    }
                }

该方法标有@Transaction注释,当我调用切换回旧的Spring版本时,它工作正常,没有任何问题。

关于代码的背景知识,从 Spring Webservices 拦截器调用以将 SOAP 消息存储在数据库中。


尝试将您的版本升级到此处宣布的 4.2.4:https://spring.io/blog/2015/12/17/spring-framework-4-2-4-4-1-9-released https://spring.io/blog/2015/12/17/spring-framework-4-2-4-4-1-9-released

4.2.4 解决了 4.2.x 行中的一些回归问题,并包括许多 修复和增强,没有立即出现的问题。 4.2.4 是 现在建议所有 4.x 用户升级。

我认为您遇到的问题可能与这个问题有关:不使用事务、传播 SUPPORTS 和 OpenEntityManager 模式的 JPA 行为不一致 https://stackoverflow.com/q/27346975/539394和这个错误报告https://jira.spring.io/browse/SPR-13243 https://jira.spring.io/browse/SPR-13243

无论如何,如果不是新版本,仍然可以解决您的问题,因为许多问题和回归都得到了解决。

当遇到可能归因于框架的意外问题时,检查任何修复版本并检查其错误管理系统总是一个好主意。https://jira.spring.io/browse/SPR-13243?jql=project%20%3D%20 SPR%20AND%20 text%20~%20 transactionrequiredException https://jira.spring.io/browse/SPR-13243?jql=project%20%3D%20SPR%20AND%20text%20~%20transactionrequiredexception

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

从 Spring 4.1.6 升级到 4.2.4 突然出现 TransactionRequiredException 的相关文章

随机推荐

  • 计算列中连续真实值的数量

    假设我有一个数据框 如下所示 df pd DataFrame A 1 1 1 1 1 0 0 1 1 0 1 1 1 1 1 0 0 0 0 0 1 1 然后 我将其转换为布尔形式 df eq 1 Out 213 A 0 True 1 Tr
  • 对 IIS 服务器上托管的 .NET CORE 2.1 应用程序进行一次 AJAX 调用后,会话状态被清除或丢失

    我遇到了这个问题 我已经挠头好几个小时了 问题 我创建的会话状态Login拨打电话后神秘清除或丢失API NET CORE 2 1 中也包含控制器 当我打电话时会发生这种情况API方法看起来像 Authorize Policy AdminV
  • createSpy 在 Angular + Jasmine 中如何工作?

    我做了一个简单的工厂演示 我正在尝试使用jasmine 我能够运行测试 但我正在使用spyOn方法 我宁愿使用茉莉花 createSpy or 茉莉花 createSpyObj做同样的测试 有人可以帮助我重构我的代码 以便在我的示例中使用这
  • 将 cookie 设置为在会话结束时过期? ASP.NET

    我很惊讶我找不到任何答案 如何将 cookie 中的 sessionid 设置为在会话结束时过期 当浏览器关闭或用户一段时间不活动时 我发现的两个解决方案是 httpcookie Expires HttpContext Current Se
  • VS Code 自动保存文件历史记录/撤消[重复]

    这个问题在这里已经有答案了 vscode 的自动保存功能非常方便 但有时会有点麻烦 如果有一种方法可以查看自动保存的文件的先前版本 这将非常有用 VS Code 有这样的功能吗 VSCode 1 66 2022 年 3 月 无需扩展 现在它
  • 如何在 Groovy 2.3 中使用 @SourceURI 注释检索脚本文件的完整路径?

    我需要在运行时检索 Groovy 2 3 中脚本文件的完整路径 实际上我遇到了与这里描述的问题相同的问题 在运行时获取 groovy 源文件的路径 https stackoverflow com questions 11958185 get
  • 如何用Python从网站中提取表格

    Here http www ffiec gov census report aspx year 2011 state 01 report demographic msa 11500 这里有张桌子 我的目标是提取表格并将其保存到 csv 文件
  • 如何在iOS SDK中使用语音识别? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道 SIRI 服务没有公共 API 但是有没有简单的语音识别 API 因此 如果我有一个文本字段并且
  • C# 中从一个字符到另一个字符的子字符串

    如何获取从一个特定字符到另一个特定字符的子字符串 例如 如果我有这种格式 string someString 1 7 2015 05 21T09 18 58 我只想得到这部分 2015 05 21T09 18 58 我如何使用子字符串 字符
  • OSError:[Errno 'jupyter-notebook' 未找到] 2

    您好 我已经安装了 Anaconda3 4 3 1 Windows x86 64 在我的桌面上 但运行命令时出现以下错误 Jupyter笔记本 来自命令提示符 Error C Users my pc gt jupyter notebook
  • 正则表达式获取“-”之前的所有字符

    如何获取字符之前的字符串 使用正则表达式 例如 我有 text 1 我想回来 text 所以我看到了实现这一目标的许多可能性 string text Foobar test 正则表达式 匹配所有内容 直到第一个 Match result R
  • 如何从服务器控件中删除“名称”属性?

    asp net端的控制代码如下
  • Postgres: \copy 语法

    使用 CentOS 7 上的 PostgreSQL 9 5 我创建了一个名为sample还有几张桌子 我有 csv数据输入 home MyUser data对于每张桌子 例如 存在TableName csv用于餐桌 TableName 如何
  • 如何获取表的模式名称

    我正在使用 SQL Server 2008 并有以下查询 SELECT SO1 name AS Tab SC1 name AS Col SO2 name AS RefTab SC2 name AS RefCol FO name AS FKN
  • 在 Ubuntu 上运行独立的 ASP.NET Core 应用程序

    我已经发布了一个 ASP NET Core 应用程序作为针对 Ubuntu 的独立应用程序 发布似乎工作正常 我已将这些文件复制到一台漂亮的 Ubuntu 机器上 现在 我如何运行我的应用程序 我的理解是 因为它是一个独立的 NET Cor
  • 在 R 中不循环地对连续的列表元素对应用函数

    我试图找到一种有效的 即避免使用循环 方法来应用一个函数 该函数迭代地将列表的当前和前一个 或下一个 元素作为参数 并返回结果列表 其长度必然是短 1 个元素 作为一个具体的例子 我有一个在某些图中定义路径的顶点列表 vlist lt c
  • Flex - 自动调整数据网格大小的问题

    我正在尝试创建一个数据网格 它将垂直调整大小以确保所有渲染器完整显示 此外 渲染器的高度可变 渲染器可以自行调整大小 一般来说 事件的流程如下 项目渲染器之一会自行调整大小 通常响应用户单击等 它调度父数据网格拾取的冒泡事件 DataGri
  • 如何在 Angular 2 中封装动态添加的元素?

    尝试让 MDL 与 Angular2 一起工作 通过 Shadow DOM 模拟 Angular 封装了从代码中获得的所有 CSS 和 html 但是当我使用componentHandler upgradeElement 它创建没有封装的新
  • 在二进制 R 包中包含测试

    我在用testthat为我的 R 包编写单元测试 我见过一些软件包作者 比如来自Rcpp and ggplot2 使用二进制文件分发单元测试 但是 当我使用 RStudio 0 98 1102 构建包时devtools 1 7 0 test
  • 从 Spring 4.1.6 升级到 4.2.4 突然出现 TransactionRequiredException

    我已经从 4 1 6 Release 升级到最新的 Spring 版本到 4 2 4 Release 突然之间 之前运行顺利的所有功能现在抛出以下异常 javax persistence TransactionRequiredExcepti