问题标签 [transactionmanager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - transactionManager 与 spring 远程服务冲突
我已经成功到达(调试)我创建的一个远程服务,它将在另一个应用程序中创建一个用户,但是它在 applicationUserDao.save(user); 线上爆炸了。出现此错误:
我试图将用户保存到的应用程序中的 transactionManager 如下所示:
这是在services.xml 中。我为我正在访问的这个服务添加了一个 remote-servlet.xml,其中包含这一行:
<context:annotation-config/>
在顶部的服务实现类中:
@Autowired private ApplicationUserDao applicationUserDao;
context:annotation-config 允许它自动装配,没有它(context:annotation-config) 我不再收到上面的错误,我得到一个空异常,因为 applicationUserDao 为空。我是spring和hibernate配置的初学者。我不确定另一个 transactionManager 是如何被加载以与 services.xml 中的一个冲突的。我不知道如何在不自动连接的情况下使用 applicationUserDao.save() 。任何关于这些如何冲突的建议或信息都会很棒:)
编辑给出解决方案:感谢 Manuel Jordan,我添加<tx:annotation-driven/>
到我的 remote-servlet.xml 中。我也坚持了<context:annotation-config/>
下来。现在完美运行:D
spring - 您如何测试 Spring @Transactional 而不只是访问休眠级别 1 缓存或进行手动会话刷新?
使用 Spring + Hibernate 和事务注释。
我正在尝试测试以下内容:
- 调用一个改变用户对象的方法,然后调用一个
@Transactional
服务方法来持久化它 - 从数据库中读回对象并确保在方法之后它的值是正确的
我遇到的第一个问题是在第 2 步中读取 User 对象只是返回了 Hibernate 1 级缓存中的那个,并且实际上并没有从数据库中读取。
因此,我使用 Session 手动从缓存中逐出对象以强制从数据库中读取。但是,当我这样做时,对象值永远不会保留在单元测试中(我知道由于我指定的设置,它会在测试完成后回滚)。
我尝试在调用@Transactional
服务方法后手动刷新会话,并且该 DID 提交了更改。然而,这不是我所期望的。我认为@Transactional
服务方法将确保事务已提交并在返回之前刷新会话。我知道 Spring 通常会决定何时进行这种管理,但我认为方法中的“工作单元”@Transactional
就是那个方法。
无论如何,现在我试图弄清楚我将如何测试@Transactional
一般的方法。
这是一个失败的junit测试方法:
如果我手动刷新会话,则测试成功。但是,我希望该@Transactional
方法能够处理提交和刷新会话。
updateUserSamePassword 的服务方法在这里:
DAO方法在这里:
SessionFactory 是自动装配的:
我正在使用 XML 应用程序上下文配置。我有:
和
还对服务和 dao 类进行了组件扫描。正如我所说,这是在生产中工作的。
我认为如果我在该方法@Transactional
结束时有一个方法标记为该方法(例如这里的更新方法),Spring 会强制 Session 提交和刷新。
我只能看到几个选项:
我错误地配置了一些东西,即使这对我来说一般都有效(只是不是单元测试)。有什么猜测吗?关于如何测试这个的任何想法?
关于单元测试配置本身的某些事情与应用程序的行为方式不同。
事务和会话不是那样工作的。我唯一的推断是 Spring 在调用该更新方法后使事务和/或会话保持打开状态。因此,当我在 Session 对象上手动驱逐用户时,这些更改尚未提交。
谁能确认这是否是预期的行为?不应该@Transaction
在会话中强制提交和刷新?如果不是,那么如何测试标记的方法@Transactional
并且这些方法实际上与事务一起使用?
即,我应该如何在这里重写我的单元测试?
还有其他想法吗?
transactions - 具有业务级事务管理的 Spring JDBC 模板
我想在业务服务级别处理和回滚异常,但是当我在 jdbctemplete 中使用 datasourcetransacitonmanager 时,它只是处理数据库异常,您有什么建议吗?多重管理或?合并事务管理器?
java - Spring引导数据JPA获取与事务管理器相关的NullPointerException
一开始,我已经尝试了各种论坛中提到的选项,以获得相同的堆栈跟踪。其中一些在与其他人一起工作时不起作用(比如删除 javax.persistence.transactiontype)我不明白如何以及在哪里尝试它。
我正在使用 Spring Boot 数据 JPA (1.2 RC2) + Hibernate(带有自定义的 persistence.xml)。这是我的 Application.java
我的 RepositoryConfiguration(因为我们有自定义的 persistence.xml - 目前需要重用它)
如果我没有单个存储库,则会在此处创建 transactionManager,但是当我添加一个存储库时,任何测试都会失败,并出现以下异常:
我的测试应用程序上下文是:
我尝试添加的存储库的示例(不是实际的)(假设 Item 是模型对象)
任何指针都会有最大的帮助。
编辑:现在只有当我在 ItemRepository 中添加额外的方法说 Item findByItemCode(String itemCode) 时才会失败,让我们说 itemCode 是 Item 模型中的一个字段,但不明白为什么?
谢谢,
稻田
java - Spring 批处理、单元测试、JPA 事务和休眠延迟加载:IllegalTransactionStateException
嗨,伙计们,
我想运行一个弹簧批处理作业,然后对结果数据进行一些测试,但我需要使用休眠延迟加载。所以我需要一个打开的事务来保持会话活跃。
但是我得到了这个异常: IllegalTransactionStateException : Pre-bound JDBC Connection found!
我可以编写方法来直接获取我想要测试的关联对象,但我不想只为测试而编写方法并失去 hibernate 的优势。
有没有办法做到这一点 ?我尝试在 jobRepositoy 中将 validateStateTransaction 设置为 false,但它不起作用(实际上它只适用于像 MapJobRepository 这样的内存元数据存储库)。
我正在寻找几天,但没有任何效果。
请问你能帮帮我吗 ?谢谢
我的代码在这里:
和
这是一个例外:
我尝试将测试部分放在另一个用@Transactional 注释的方法中,但后来我得到了一个 LazyInitializationException ...
编辑 :
我将 org.springframework.orm.jpa.JpaTransactionManager 实现用于事务管理器。
这是我的弹簧配置:
我已经搜索了手动打开交易的方式,但我还没有找到
spring - 数据源连接未释放
我正在使用 DataSource 和 DataSourceTransactionManager spring beans 并将它们连接到 JobRepository bean。一旦我的spring应用程序关闭,其中之一不应该是生命周期感知或具有关闭连接的关闭功能。除非我在退出之前手动调用 DataSourceUtils.releaseConnection(...),否则我的进程将挂起。我在这里错过了什么吗?我的代码中是否还有其他可能导致此问题的错误?
我需要使用连接池吗?如何让 spring 正确管理连接生命周期。
jdbc - 使用 Guice 和 JDBC 的事务 - 解决方案讨论
在我的应用程序中,我需要将纯 JDBC 与 Guice 一起使用。但是,Guice 不提供任何内置支持来管理事务。guice-persist 仅提供基于 JPA 的支持,我无法使用。
所以我尝试实现一个简单的解决方案来使用 Guice 和 JDBC 管理事务。这是第一个版本:
使用 TransactionHolder 存储每个线程的事务。
公共类 JdbcTransactionHolder {
}
为 JDBC 实现事务管理器,目前只有 begin()、getTransaction()、commit() 和 rollback() 方法:
公共类 JdbcTransactionManager 实现 TransactionManager {
}
为 DataSource 实现一个包装器,如果事务已启动,它可以从事务持有者那里获取当前连接:
公共类 JdbcDataSource 实现 DataSource {
}
然后创建一个 DataSourceProvider 以便我们可以使用 guice 将 DataSource 注入任何 POJO:
公共类 DataSourceProvider 实现 Provider {
/li>然后实现 TransactionalMethodInterceptor 来管理带有 Transactional 注解的方法的事务:
公共类 TransactionalMethodInterceptor 实现 MethodInterceptor {
}
最后,将所有代码放在一起以便 Guice 可以注入实例:
/li>
我使用 c3p0 作为数据源池。所以,它在我的测试中工作得很好。
我发现另一个相关问题:Guice、JDBC 和管理数据库连接
但到目前为止我还没有找到任何类似的方法,除了 SpringFramework 中的一些东西。但即使是在 Spring 中的实现似乎也相当复杂。
我想问是否有人对此解决方案有任何建议。
谢谢。
spring - 无法查找:java:/TransactionManager - 无法实例化遗留事务管理器
当我开始调试我的应用程序服务器(JBoss EAP 6.1)时,我遇到了问题。当它启动时,在控制台中我在 DEBUG 中有以下信息:
另外,如果它在调试中,我会理解问题,因为我不知道问题出在哪里。有什么建议吗?
postgresql - 表 xxx' 上的 UPDATE 语句预计更新 1 行;0 与 Zope transactionmanager 匹配
我正在运行 Pyramid + Zope 事务管理器 + SQLAlchemy + PostgreSQL。在某些情况下,我StaleDataError
在 Pyramid Web 应用程序上看到了错误,这应该是更新数据库中一行的非常简单的视图。由于错误发生在正常视图边界之外并且不可重复,因此调试起来非常棘手。
我想这可能与断开的数据库连接或事务生命周期有关。但是我不知道如何开始调试系统,所以我想问是什么导致了这种情况,以及如何确定这样的错误。
UPDATE statement on table 'xxx' expected to update 1 row(s); 0 were matched.
spring - 带有 Spring 2.5.6 事务管理器的 Oracle Toplink 11g
我们正在从 OC4J 迁移到 Weblogic。但是我们希望在 Spring 2.5.6 中继续使用 Weblogic 中的 Toplink。
就我而言,我想在一个事务管理器中加入两个 Toplink 事务和我自己的事务。是否可以在 Spring 2.5.6 中使用 Oracle Toplink 11g?我不确定 Spring 2.5.6 是否可以使用 Oracle Toplink 11g