首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Weld和junit,没有transactionmanager

Weld和junit,没有transactionmanager
EN

Stack Overflow用户
提问于 2020-01-17 03:10:21
回答 1查看 602关注 0票数 1

我有一些junit风格的集成测试,注入是由Weld处理的。我可以很好地注入一个entityManager,而且一切似乎都很好,当我测试的代码在我的entityManager...except上执行一些操作时,实际上没有任何东西被写入我的内存中的H2 database...no插入,更新任何东西。据我所知,这是由于没有任何可用的事务造成的。当我启动测试时,日志会告诉我这一点:

事务服务不可用。@Inject UserTransaction注入不可用。事务性观察者将被同步调用。

有没有什么正常的/典型的方法来做到这一点?我只发现了这一点:与我需要的https://in.relation.to/2019/01/23/testing-cdi-beans-and-persistence-layer-under-java-se/比较接近(我在正在测试的代码中使用@Transactional注解),但似乎必须重新发明weel。真的没有简单的方法做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-20 23:15:39

如果UserTransaction不可用,这很可能意味着您尚未配置事务管理器。@Transactional@Inject UserTransaction功能在JTA规范中定义,该规范由事务管理器实现。

焊接在WildFly中使用,并与纳拉亚纳很好地集成在一起。这是你的一个选择(免责声明:我是http://narayana.io项目的开发人员)。

当您的应用程序在独立模式下运行时,您将需要提供上面的一些集成。起始点是将依赖添加到

代码语言:javascript
复制
<groupId>org.jboss.narayana.jta</groupId>
<artifactId>cdi</artifactId>

然后,您应该在其上实现Weld SPI接口(示例在Narayana快速入门中:https://github.com/jbosstm/quickstart/blob/master/jta-1_2-standalone/src/test/java/org/jboss/narayana/quickstarts/jta/cdi/CDITransactionServices.java)

我写了一篇关于这方面的博客文章,你可以在这里找到更多细节:http://jbossts.blogspot.com/2019/04/jta-and-cdi-integration.html

如果您在将事务管理器依赖项拉到您的项目中时遇到问题-我知道可能会担心将依赖项列表扩展得更大,或者担心一些性能影响(即使我认为这种担心是没有根据的,但这是另一种讨论)-那么您将需要配置您的EntityManager,使其与本地事务一起运行。在这里,使用<non-jta-data-source>可能会有所帮助。Hibernate需要在事务内运行insert查询。这是一个先决条件。

请注意,如果将EntityManager配置为使用资源本地事务,则测试可以开始工作,但仍然不能使用@Inject UserTransaction@Transactional,因为它们是事务管理器提供的功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59776325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档