Transactions Weld和junit,无事务管理器

Transactions Weld和junit,无事务管理器,transactions,integration-testing,h2,junit4,weld,Transactions,Integration Testing,H2,Junit4,Weld,我有一些junit风格的集成测试,其中注入由Weld处理。当我的被测代码在我的entityManager上执行某些操作时,我能够很好地注入entityManager,而且一切似乎都很好……除了没有任何内容被实际写入内存H2数据库……没有插入、更新任何内容。据我所知,这是因为没有任何可用的事务。当我启动测试时,日志会通知我: 事务服务不可用。@InjectUserTransaction的注入不可用。事务性观察程序将被同步调用 是否有任何正常/典型的方法进行此操作?我只发现:这有点接近我所需要的(我

我有一些junit风格的集成测试,其中注入由Weld处理。当我的被测代码在我的entityManager上执行某些操作时,我能够很好地注入entityManager,而且一切似乎都很好……除了没有任何内容被实际写入内存H2数据库……没有插入、更新任何内容。据我所知,这是因为没有任何可用的事务。当我启动测试时,日志会通知我:

事务服务不可用。@InjectUserTransaction的注入不可用。事务性观察程序将被同步调用


是否有任何正常/典型的方法进行此操作?我只发现:这有点接近我所需要的(我在正在测试的代码中使用@Transactional注释),但似乎不得不重新发明weel。真的没有简单的方法吗?

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

该焊缝用于WildFly,并与Narayana很好地结合。这是您可以选择的一个选项(免责声明:我是project的开发人员)

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

<groupId>org.jboss.narayana.jta</groupId>
<artifactId>cdi</artifactId>
org.jboss.narayana.jta
)

我写了一篇关于此的博客文章,您可以在这里找到更多详细信息:

如果你有一个问题要把事务管理器的依赖项拉到你的项目上,我知道有必要担心扩展列表的依赖性大或者对性能的影响(即使我认为这种担心是毫无根据的,但这是不同的讨论)。-然后您需要配置

EntityManager
,以便与本地事务一起运行。在这里使用
可能会有所帮助。 Hibernate需要在事务内部运行insert查询。这是一个先决条件

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

您看过吗?模块ioc单元ejb有助于在weld容器中模拟持久性事务。