[英]Arquillian Injected EntityManager is null
使用 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.xml
Arquillian 配置如下:
<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
不起作用嗎?
您必須在 test-ds.xml 中定義容器上使用的數據源,例如:
<?xml version="1.0" encoding="UTF-8"?>
<datasources xmlns="http://www.jboss.org/ironjacamar/schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.jboss.org/ironjacamar/schema
http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd">
<datasource enabled="true" jndi-name="jdbc/arquillian"
pool-name="ArquillianEmbeddedH2Pool">
<connection-url>jdbc:h2:mem:arquillian;DB_CLOSE_DELAY=-1</connection-url>
<driver>h2</driver>
</datasource>
</datasources>
以下數據源適用於 WildFly,因為數據庫 h2 包含在 WildFly 發行版中。
有關完整示例,請參閱https://arquillian.org/guides/testing_java_persistence/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.