簡體   English   中英

Arquillian 注入的 EntityManager 為空

[英]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);

測試失敗,因為EntityManagerNULL

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM