【发布时间】:2015-11-23 12:34:33
【问题描述】:
使用 Wildfly 10 和 Arquillian,注入 EntityManager 总是返回 NULL。这是为什么呢?
这是我的测试类:
@RunWith(Arquillian.class)
public class XXXDAOTest {
@Deployment
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class)
.addClass(XXXDAO.class)
.addAsResource("test-ds.xml")
.addAsResource("test-persistence.xml", "META-INF/persistence.xml")
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
}
@Test
@PersistenceContext
public void testCreateUser(EntityManager em) {
Assert.assertNotNull("em is NULL", em);
测试失败,因为EntityManager 是NULL。
test-persistence.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="xxx-ejb">
<jta-data-source>jdbc/arquillian</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
</properties>
</persistence-unit>
</persistence>
此外,我正在使用test-ds.xml 中声明的数据源
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="xxx-ejb">
<jta-data-source>jdbc/arquillian</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
</properties>
</persistence-unit>
</persistence>
在我的pom.xmlArquillian 中配置如下:
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
<version>1.0.0.CR8</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-container-spi</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-persistence-integration-tests</artifactId>
<version>1.0.0.Alpha7</version>
<scope>test</scope>
</dependency>
我在某处读到pom.xml 中提供的arquillian-weld-ee-embedded 不支持持久性测试,所以我在下面添加了扩展。我找不到 arquillian 的任何其他配置文件来进行持久性测试。
你有什么提示为什么注入EntityManager不起作用?
【问题讨论】:
-
如果使用@PersistenceContext 作为字段而不是方法参数,它是否仍然为空?
-
是的,没有任何区别
-
因为您使用的是嵌入式焊接,我怀疑您是否得到了一个连接所有东西的完整容器。你最好使用一个完整的容器而不是一个焊接容器。
-
@Jbartmann 你解决了这个问题吗?有小费吗?我有同样的场景:Arquillian + Wildfly 10 + EntityManager 注入
-
这里也一样,有人解决了吗?
标签: java persistence jboss-arquillian